From 518f1f1e6d50c09138312904af65ca07c81f7428 Mon Sep 17 00:00:00 2001 From: jaybuidl Date: Thu, 17 Apr 2025 19:24:47 +0100 Subject: [PATCH 1/3] chore: bumped @kleros/kleros-v2-contracts, bumped hardhat, bumped solc to 0.8.24 --- contracts/deploy/00-curate-v2.ts | 34 +- contracts/hardhat.config.ts | 13 +- contracts/package.json | 32 +- contracts/src/CurateFactory.sol | 2 +- contracts/src/CurateV2.sol | 2 +- contracts/src/CurateView.sol | 2 +- subgraph/package.json | 2 +- web/package.json | 2 +- yarn.lock | 2155 ++++++++++++++++++++---------- 9 files changed, 1524 insertions(+), 720 deletions(-) diff --git a/contracts/deploy/00-curate-v2.ts b/contracts/deploy/00-curate-v2.ts index 44a0bd7..049d17c 100644 --- a/contracts/deploy/00-curate-v2.ts +++ b/contracts/deploy/00-curate-v2.ts @@ -1,9 +1,9 @@ -import { ethers } from "hardhat"; import { HardhatRuntimeEnvironment } from "hardhat/types"; import { DeployFunction } from "hardhat-deploy/types"; import { HomeChains, isSkipped } from "./utils"; import { CurateFactory, CurateV2 } from "../typechain-types"; import { registrationTemplate, removalTemplate, dataMappings } from "@kleros/curate-v2-templates"; +import { DeploymentName, getContractsEthers } from "@kleros/kleros-v2-contracts"; const listMetadata = `{ "title": "Kleros Curate", @@ -27,8 +27,14 @@ const listMetadata = `{ const extraData = "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003"; +const NETWORK_TO_DEPLOYMENT: Record = { + arbitrumSepoliaDevnet: "devnet", + arbitrumSepolia: "testnet", + arbitrum: "mainnetNeo", +} as const; + const deploy: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - const { deployments, getNamedAccounts, getChainId } = hre; + const { deployments, getNamedAccounts, getChainId, ethers } = hre; const { deploy } = deployments; // fallback to hardhat node signers on local network @@ -36,9 +42,15 @@ const deploy: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const chainId = Number(await getChainId()); console.log("deploying to %s with deployer %s", HomeChains[chainId], deployer); - const klerosCore = await deployments.get("KlerosCore"); - const evidenceModule = await deployments.get("EvidenceModule"); - const disputeTemplateRegistry = await deployments.get("DisputeTemplateRegistry"); + const networkName = deployments.getNetworkName(); + const deploymentName = NETWORK_TO_DEPLOYMENT[networkName]; + + if (!deploymentName) + throw new Error( + `Unsupported network: ${networkName}. Supported networks: ${Object.keys(NETWORK_TO_DEPLOYMENT).join(", ")}` + ); + + const { klerosCore, evidence, disputeTemplateRegistry } = await getContractsEthers(ethers.provider, deploymentName); const fee = ethers.parseEther("0.00001"); const timeout = 600; // 10 minutes @@ -52,12 +64,12 @@ const deploy: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const curate = (await ethers.getContract("CurateV2")) as CurateV2; await curate.initialize( deployer, - klerosCore.address, + klerosCore.target, extraData, - evidenceModule.address, + evidence.target, ethers.ZeroAddress, // _connectedTCR { - templateRegistry: disputeTemplateRegistry.address, + templateRegistry: disputeTemplateRegistry.target, registrationTemplateParameters: [registrationTemplate, dataMappings], removalTemplateParameters: [removalTemplate, dataMappings], }, @@ -76,12 +88,12 @@ const deploy: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { const curateFactory = (await ethers.getContract("CurateFactory")) as CurateFactory; await curateFactory.deploy( deployer, - klerosCore.address, + klerosCore.target, extraData, - evidenceModule.address, + evidence.target, ethers.ZeroAddress, // _connectedTCR { - templateRegistry: disputeTemplateRegistry.address, + templateRegistry: disputeTemplateRegistry.target, registrationTemplateParameters: [registrationTemplate, ""], removalTemplateParameters: [removalTemplate, ""], }, diff --git a/contracts/hardhat.config.ts b/contracts/hardhat.config.ts index 7b3d27e..6e01dba 100644 --- a/contracts/hardhat.config.ts +++ b/contracts/hardhat.config.ts @@ -18,7 +18,7 @@ dotenv.config(); const config: HardhatUserConfig = { solidity: { - version: "0.8.18", + version: "0.8.24", settings: { optimizer: { enabled: true, @@ -179,17 +179,6 @@ const config: HardhatUserConfig = { mocha: { timeout: 20000, }, - external: { - // https://github.com/wighawag/hardhat-deploy#importing-deployment-from-other-projects-with-truffle-support - deployments: { - localhost: process.env.HARDHAT_FORK - ? ["../node_modules/@kleros/kleros-v2-contracts/deployments/" + process.env.HARDHAT_FORK] - : [], - arbitrumSepoliaDevnet: ["../node_modules/@kleros/kleros-v2-contracts/deployments/arbitrumSepoliaDevnet"], - arbitrumSepolia: ["../node_modules/@kleros/kleros-v2-contracts/deployments/arbitrumSepolia"], - arbitrum: ["../node_modules/@kleros/kleros-v2-contracts/deployments/arbitrum"], - }, - }, }; export default config; diff --git a/contracts/package.json b/contracts/package.json index 4d19250..f661b94 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -54,38 +54,38 @@ "@kleros/curate-v2-prettier-config": "workspace:^", "@kleros/curate-v2-tsconfig": "workspace:^", "@logtail/pino": "^0.4.0", - "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", - "@nomiclabs/hardhat-solhint": "^3.0.1", - "@typechain/ethers-v6": "^0.5.0", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.8", + "@nomicfoundation/hardhat-ethers": "^3.0.8", + "@nomicfoundation/hardhat-network-helpers": "^1.0.12", + "@nomicfoundation/hardhat-verify": "^2.0.13", + "@nomiclabs/hardhat-solhint": "^3.1.0", + "@typechain/ethers-v6": "^0.5.1", "@typechain/hardhat": "^9.1.0", - "@types/chai": "^4.2.0", - "@types/mocha": "^10.0.0", - "@types/node": "^16.0.0", + "@types/chai": "^4.3.20", + "@types/mocha": "^10.0.10", + "@types/node": "^16.18.126", "@wagmi/cli": "^1.5.2", "abitype": "^0.10.3", "chai": "^4.2.0", "dotenv": "^16.3.1", - "ethers": "^6.10.0", + "ethers": "^6.13.6", "graphql": "^16.8.1", "graphql-request": "^6.1.0", - "hardhat": "^2.19.0", - "hardhat-deploy": "^0.11.45", - "hardhat-deploy-ethers": "^0.4.1", + "hardhat": "^2.23.0", + "hardhat-deploy": "^1.0.2", + "hardhat-deploy-ethers": "^0.4.2", "hardhat-docgen": "^1.3.0", - "hardhat-gas-reporter": "^1.0.8", + "hardhat-gas-reporter": "^1.0.10", "hardhat-watcher": "^2.5.0", "pino": "^8.17.0", "pino-pretty": "^10.2.3", "solidity-coverage": "^0.8.0", "ts-node": "^8.0.0", - "typechain": "^8.3.0", + "typechain": "^8.3.2", "typescript": "^5.1.3" }, "dependencies": { "@kleros/curate-v2-templates": "workspace:^", - "@kleros/kleros-v2-contracts": "^0.3.2" + "@kleros/kleros-v2-contracts": "^0.9.2" } } diff --git a/contracts/src/CurateFactory.sol b/contracts/src/CurateFactory.sol index 534a5c7..2b90ec5 100644 --- a/contracts/src/CurateFactory.sol +++ b/contracts/src/CurateFactory.sol @@ -6,7 +6,7 @@ /// @custom:bounties: [] /// @custom:deployments: [] -pragma solidity 0.8.18; +pragma solidity 0.8.24; import {CurateV2, IArbitratorV2, EvidenceModule} from "./CurateV2.sol"; diff --git a/contracts/src/CurateV2.sol b/contracts/src/CurateV2.sol index 705ae9a..aab3414 100644 --- a/contracts/src/CurateV2.sol +++ b/contracts/src/CurateV2.sol @@ -6,7 +6,7 @@ /// @custom:bounties: [] /// @custom:deployments: [] -pragma solidity 0.8.18; +pragma solidity 0.8.24; import {IArbitrableV2, IArbitratorV2} from "@kleros/kleros-v2-contracts/arbitration/interfaces/IArbitrableV2.sol"; import {EvidenceModule} from "@kleros/kleros-v2-contracts/arbitration/evidence/EvidenceModule.sol"; diff --git a/contracts/src/CurateView.sol b/contracts/src/CurateView.sol index f24eab7..5ecb042 100644 --- a/contracts/src/CurateView.sol +++ b/contracts/src/CurateView.sol @@ -6,7 +6,7 @@ /// @custom:bounties: [] /// @custom:deployments: [] -pragma solidity 0.8.18; +pragma solidity 0.8.24; import {CurateV2, IArbitratorV2} from "./CurateV2.sol"; diff --git a/subgraph/package.json b/subgraph/package.json index e8c9d0b..9196913 100644 --- a/subgraph/package.json +++ b/subgraph/package.json @@ -32,7 +32,7 @@ "@graphprotocol/graph-cli": "^0.95.0", "@kleros/curate-v2-eslint-config": "workspace:^", "@kleros/curate-v2-prettier-config": "workspace:^", - "gluegun": "^5.1.2", + "gluegun": "^5.2.0", "matchstick-as": "0.6.0" }, "dependenciesComments": { diff --git a/web/package.json b/web/package.json index 4b74a00..b9f2eac 100644 --- a/web/package.json +++ b/web/package.json @@ -105,7 +105,7 @@ "react-use": "^17.4.3", "styled-components": "^5.3.11", "subgraph-status": "^1.2.4", - "viem": "^2.22.22", + "viem": "^2.27.2", "wagmi": "^2.14.10", "zod": "^3.24.2" } diff --git a/yarn.lock b/yarn.lock index 50d9148..ead591b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,6 +19,13 @@ __metadata: languageName: node linkType: hard +"@adraffy/ens-normalize@npm:1.10.1": + version: 1.10.1 + resolution: "@adraffy/ens-normalize@npm:1.10.1" + checksum: 4cb938c4abb88a346d50cb0ea44243ab3574330c81d4f5aaaf9dfee584b96189d0faa404de0fcbef5a1b73909ea4ebc3e63d84bd23f9949e5c8d4085207a5091 + languageName: node + linkType: hard + "@adraffy/ens-normalize@npm:^1.10.1": version: 1.11.0 resolution: "@adraffy/ens-normalize@npm:1.11.0" @@ -56,6 +63,46 @@ __metadata: languageName: node linkType: hard +"@arbitrum/nitro-contracts@npm:1.1.1": + version: 1.1.1 + resolution: "@arbitrum/nitro-contracts@npm:1.1.1" + dependencies: + "@offchainlabs/upgrade-executor": "npm:1.1.0-beta.0" + "@openzeppelin/contracts": "npm:4.5.0" + "@openzeppelin/contracts-upgradeable": "npm:4.5.2" + patch-package: "npm:^6.4.7" + checksum: 6ea79388bd8ed6de2fdb2e1334d37b520928732c86540eaebed1e21a9f2a04dbc11dbae89f06bd66a169130f9b54d90c9fe6ed45cd4d286bc28b4d77fd49c1f8 + languageName: node + linkType: hard + +"@arbitrum/nitro-contracts@npm:^1.0.0-beta.8": + version: 1.3.0 + resolution: "@arbitrum/nitro-contracts@npm:1.3.0" + dependencies: + "@offchainlabs/upgrade-executor": "npm:1.1.0-beta.0" + "@openzeppelin/contracts": "npm:4.5.0" + "@openzeppelin/contracts-upgradeable": "npm:4.5.2" + patch-package: "npm:^6.4.7" + checksum: cc931bf6d65f8249cfe0527b5e7be2bfb30c40ea8408320949db76e20076b91dcbb384f5b5fb997f303f1b4b83310a0f98a5382d4ec1a58be8cf92267d615121 + languageName: node + linkType: hard + +"@arbitrum/token-bridge-contracts@npm:1.1.2": + version: 1.1.2 + resolution: "@arbitrum/token-bridge-contracts@npm:1.1.2" + dependencies: + "@arbitrum/nitro-contracts": "npm:^1.0.0-beta.8" + "@offchainlabs/upgrade-executor": "npm:1.1.0-beta.0" + "@openzeppelin/contracts": "npm:4.8.3" + "@openzeppelin/contracts-upgradeable": "npm:4.8.3" + "@openzeppelin/upgrades-core": "npm:^1.24.1" + dependenciesMeta: + "@openzeppelin/upgrades-core": + optional: true + checksum: d9a1b69db886e4d34f34f9b92dc226ee2add122328da9dc79a4046322a486a731f5992b8e22a0929b1bb717f9d1d1b60b43085fb952a50e955447b3d7aa1bf0c + languageName: node + linkType: hard + "@ardatan/relay-compiler@npm:12.0.0": version: 12.0.0 resolution: "@ardatan/relay-compiler@npm:12.0.0" @@ -1825,6 +1872,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.5.5": + version: 7.27.0 + resolution: "@babel/runtime@npm:7.27.0" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: e6966e03b695feb4c0ac0856a4355231c2580bf9ebd0298f47739f85c0ea658679dd84409daf26378d42c86c1cbe7e33feab709b14e784254b6c441d91606465 + languageName: node + linkType: hard + "@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.22.15, @babel/template@npm:^7.23.9, @babel/template@npm:^7.3.3": version: 7.23.9 resolution: "@babel/template@npm:7.23.9" @@ -1909,10 +1965,28 @@ __metadata: languageName: node linkType: hard -"@chainsafe/as-sha256@npm:^0.3.1": - version: 0.3.1 - resolution: "@chainsafe/as-sha256@npm:0.3.1" - checksum: 3bae7b4bc6e307baa3cf1f9d2c75827874cd0fb458bc592656d741d374b48e71c042fe21616a506cb821487a5abfc6b92181e4b7fbf49b7370cee4df0b67d95a +"@bytecodealliance/preview2-shim@npm:0.17.0": + version: 0.17.0 + resolution: "@bytecodealliance/preview2-shim@npm:0.17.0" + checksum: 28a273227d8e8f2b61ad0260be612fd854ace756784c409c6ac4b65bf6b48426e6c058e45c07675303ef844a981fbdda7257df9833ca12bd3e5e4a0480ca5193 + languageName: node + linkType: hard + +"@chainlink/contracts@npm:^1.3.0": + version: 1.3.0 + resolution: "@chainlink/contracts@npm:1.3.0" + dependencies: + "@arbitrum/nitro-contracts": "npm:1.1.1" + "@arbitrum/token-bridge-contracts": "npm:1.1.2" + "@changesets/changelog-github": "npm:^0.5.0" + "@changesets/cli": "npm:~2.27.8" + "@eth-optimism/contracts": "npm:0.6.0" + "@openzeppelin/contracts": "npm:4.9.3" + "@openzeppelin/contracts-upgradeable": "npm:4.9.3" + "@scroll-tech/contracts": "npm:0.1.0" + "@zksync/contracts": "git+https://github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9" + semver: "npm:^7.6.3" + checksum: 223e80492520cccad301ba360a27c11c73070cc8e9d03af73f68db987f9ad1e0a43f98e9feb8f284d68e9c79273647d3fadb7477532259de96840cfc67d2ebf3 languageName: node linkType: hard @@ -1932,42 +2006,258 @@ __metadata: languageName: node linkType: hard -"@chainsafe/persistent-merkle-tree@npm:^0.4.2": - version: 0.4.2 - resolution: "@chainsafe/persistent-merkle-tree@npm:0.4.2" +"@changesets/apply-release-plan@npm:^7.0.8": + version: 7.0.12 + resolution: "@changesets/apply-release-plan@npm:7.0.12" dependencies: - "@chainsafe/as-sha256": "npm:^0.3.1" - checksum: a7e59f80be3ce0a86fe452a3c003bd159a1719ed22cae22e9841668f0eda8c35412fa16b3b150d96f583a24f430a5cc2a1bfcabafc1b9cf6e1fdb227e98c4dc7 + "@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: 3ce05caa73b7b96a8a6be943507591925c44b22f209da001fb9d83df1d7a4569659e889373f5f7a208a121b3cf7bc17788969b8849bddaf13c27d6720e4e1c47 languageName: node linkType: hard -"@chainsafe/persistent-merkle-tree@npm:^0.5.0": - version: 0.5.0 - resolution: "@chainsafe/persistent-merkle-tree@npm:0.5.0" +"@changesets/assemble-release-plan@npm:^6.0.5, @changesets/assemble-release-plan@npm:^6.0.6": + version: 6.0.6 + resolution: "@changesets/assemble-release-plan@npm:6.0.6" dependencies: - "@chainsafe/as-sha256": "npm:^0.3.1" - checksum: c8a37eb2fbe04d8b6f219774400dad5c50e109a9daf427883c9e33826a294a1bbd6bc759b5d6d38fefb2398443d2d880b67130eacab55b34d95d1332ac8ab680 + "@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: b6c7ce7231e4c1801255d15e99355c700dc6fd62abb5330817231e2f45edd06fa7d31aac0ed3b1908a6cde33ef0c5bf2c1e71f2e03d37435131f2a4d4d48aaf8 languageName: node linkType: hard -"@chainsafe/ssz@npm:^0.10.0": - version: 0.10.2 - resolution: "@chainsafe/ssz@npm:0.10.2" +"@changesets/changelog-git@npm:^0.2.0": + version: 0.2.1 + resolution: "@changesets/changelog-git@npm:0.2.1" + dependencies: + "@changesets/types": "npm:^6.1.0" + checksum: c22f3c0baf50c102a6890046351ee42f65ff6d58747ba4f75e5e40da1ed5fbcfd0dc2d11cdfb86acbb3262e58acb93f096c798827cac570c1e22e8f32f58a30f + languageName: node + linkType: hard + +"@changesets/changelog-github@npm:^0.5.0": + version: 0.5.1 + resolution: "@changesets/changelog-github@npm:0.5.1" + dependencies: + "@changesets/get-github-info": "npm:^0.6.0" + "@changesets/types": "npm:^6.1.0" + dotenv: "npm:^8.1.0" + checksum: 1284e7dc067652edfa14792196e6036849455d121afabe63e8d1a7dc0e8fb0310edb58d1130f2a5944819ae4011eeecc7e0c44c1cda43e6a581a3add187c3447 + languageName: node + linkType: hard + +"@changesets/cli@npm:~2.27.8": + version: 2.27.12 + resolution: "@changesets/cli@npm:2.27.12" + dependencies: + "@changesets/apply-release-plan": "npm:^7.0.8" + "@changesets/assemble-release-plan": "npm:^6.0.5" + "@changesets/changelog-git": "npm:^0.2.0" + "@changesets/config": "npm:^3.0.5" + "@changesets/errors": "npm:^0.2.0" + "@changesets/get-dependents-graph": "npm:^2.1.2" + "@changesets/get-release-plan": "npm:^4.0.6" + "@changesets/git": "npm:^3.0.2" + "@changesets/logger": "npm:^0.1.1" + "@changesets/pre": "npm:^2.0.1" + "@changesets/read": "npm:^0.6.2" + "@changesets/should-skip-package": "npm:^0.1.1" + "@changesets/types": "npm:^6.0.0" + "@changesets/write": "npm:^0.3.2" + "@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: 06618abc60ddd9bb82d0380ee6bdea926cce8ebd76e18eb38487fa2501ee1386ffaf55042c8d052d783bcfd2669c51f3eef8b0b0cfc7624486bcec42ac0da9da + languageName: node + linkType: hard + +"@changesets/config@npm:^3.0.5, @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: 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: 4b79373f92287af4f723e8dbbccaf0299aa8735fc043243d0ad587f04a7614615ea50180be575d4438b9f00aa82d1cf85e902b77a55bdd3e0a8dd97e77b18c60 + languageName: node + linkType: hard + +"@changesets/get-dependents-graph@npm:^2.1.2, @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: 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: 4ba61eafb0a75fa7f741885b465d90559e63581e748527e060f90c37380a02f62810db3bc79a4e74d109754d7f72dc45249e1ac2be5fcaec6a7d0f99db1cee78 + languageName: node + linkType: hard + +"@changesets/get-release-plan@npm:^4.0.6": + version: 4.0.10 + resolution: "@changesets/get-release-plan@npm:4.0.10" + dependencies: + "@changesets/assemble-release-plan": "npm:^6.0.6" + "@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: 372087faf29262bc1373721b5793090828fd3dabd9ff64f0fadf2c7dcb6dfcba19d690d9ea86ca3cab9d5c7a45878d64e302cc30f59e159e7074034cf9e806e7 + 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: 9868e99b31af652d3fa08fc33d55b9636f2feed1f4efdb318a6dbb4bb061281868de089b93041ce7f2775ab9cf454b92b1199767d0f4f228d8bbc483e61d2fd8 + languageName: node + linkType: hard + +"@changesets/git@npm:^3.0.2, @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: 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: 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: 2973ab8f38592a80efea589e148e5bdfd6ed3af86aa9206f941b5b3955f68464bf70a5965349f642667c708ebae60e4266be538328cd27075cace3f7cc1022e3 + languageName: node + linkType: hard + +"@changesets/pre@npm:^2.0.1, @changesets/pre@npm:^2.0.2": + version: 2.0.2 + resolution: "@changesets/pre@npm:2.0.2" dependencies: - "@chainsafe/as-sha256": "npm:^0.3.1" - "@chainsafe/persistent-merkle-tree": "npm:^0.5.0" - checksum: 359b3a672b460ad7fee524115fe7e5d9518c62b667dfc3dc6d8be0286ebb785ce303a68070cde5b31fc2860f99fda40df4296030cb9af42554143290f542326b + "@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: daaedd2747492ced61f107d38f90e535607bcb073b10ffac3d9e3bcad1a4cc082370884224fc6785af2d92d37f6b0a3bf853f9759b8fda294878d00d24344415 + languageName: node + linkType: hard + +"@changesets/read@npm:^0.6.2, @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: fec0ac28801e0560fae0eb1d21250dd2a48aaff67bddd1b446a960afd761690d5873dca6eff369d43763bec61f1023d38a38876d5824e316e6de622dc52a24f3 languageName: node linkType: hard -"@chainsafe/ssz@npm:^0.9.2": - version: 0.9.4 - resolution: "@chainsafe/ssz@npm:0.9.4" +"@changesets/should-skip-package@npm:^0.1.1, @changesets/should-skip-package@npm:^0.1.2": + version: 0.1.2 + resolution: "@changesets/should-skip-package@npm:0.1.2" dependencies: - "@chainsafe/as-sha256": "npm:^0.3.1" - "@chainsafe/persistent-merkle-tree": "npm:^0.4.2" - case: "npm:^1.6.3" - checksum: 2fe83d0b3ef131e14b51b88bb3343b14e7a02185fa9fd3da84b4726dbd857daaa4f7f6f4840fe3772fc1380352b1675a13b5f6153c4211c0f00ffa542b62bf2f + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + checksum: d09fcf1200ee201f0dd5b8049d90e8b5e0cfd34cc94f5c661c4cdab182a8263628733f9bc5886550a92f6f7857339d79fc77f12ffd53559b029a2bf9a2fa7ace + languageName: node + linkType: hard + +"@changesets/types@npm:^4.0.1": + version: 4.1.0 + resolution: "@changesets/types@npm:4.1.0" + checksum: 4d7c65a447400ac474b2dc2d79bc1a5341c305fbce4a648ef59d9939bc1bbbbd6852684c417a9a4ef0226468b9cb522b9ac2b5393f21fa5f20f1b12bee94eab5 + languageName: node + linkType: hard + +"@changesets/types@npm:^6.0.0, @changesets/types@npm:^6.1.0": + version: 6.1.0 + resolution: "@changesets/types@npm:6.1.0" + checksum: 2dcd00712cb85d0c53afdd8d0e856b4bf9c0ce8dc36c838c918d44799aacd9ba8659b9ff610ff92b94fc03c8fd2b52c5b05418fcf8a1bd138cd9182414ede373 + languageName: node + linkType: hard + +"@changesets/write@npm:^0.3.2": + version: 0.3.2 + resolution: "@changesets/write@npm:0.3.2" + dependencies: + "@changesets/types": "npm:^6.0.0" + fs-extra: "npm:^7.0.1" + human-id: "npm:^1.0.2" + prettier: "npm:^2.7.1" + checksum: c16b0a731fa43ae0028fd1f956c7b080030c42ff763f8dac74da8b178a4ea65632831c30550b784286277bdc75a3c44dda46aad8db97f43bb1eb4d61922152aa languageName: node linkType: hard @@ -2965,6 +3255,43 @@ __metadata: 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: 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: a7ea17a8b529b2c86b00ef19fa562c2b792d7e8a4071defea4d8a8b82a101105a3ab6dc86361118e17bf9b4784b4eca9c1e937c8b1e7294a1a850f97b5a73a10 + languageName: node + linkType: hard + "@ethereumjs/common@npm:^3.2.0": version: 3.2.0 resolution: "@ethereumjs/common@npm:3.2.0" @@ -2984,6 +3311,15 @@ __metadata: 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: 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" @@ -3007,6 +3343,16 @@ __metadata: 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: 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" @@ -3039,6 +3385,21 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3052,6 +3413,19 @@ __metadata: languageName: node linkType: hard +"@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: 10986eb1520dd94efb34bc19de4f53a49bea023493a0df686711872eb2cb446f3cca3c98c1ecec7831497004822e16ead756d6c7d6977971eaa780f4d41db327 + languageName: node + linkType: hard + "@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.0.2, @ethersproject/address@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/address@npm:5.7.0" @@ -3065,6 +3439,19 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3074,6 +3461,15 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3084,6 +3480,16 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3095,6 +3501,17 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3104,6 +3521,15 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3113,6 +3539,15 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3148,6 +3583,23 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3199,6 +3651,16 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3206,6 +3668,13 @@ __metadata: languageName: node linkType: hard +"@ethersproject/logger@npm:^5.8.0": + version: 5.8.0 + resolution: "@ethersproject/logger@npm:5.8.0" + checksum: 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" @@ -3215,6 +3684,15 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3234,7 +3712,16 @@ __metadata: languageName: node linkType: hard -"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5.7.1, @ethersproject/providers@npm:^5.7.2": +"@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: 3bc1af678c1cf7c87f39aec24b1d86cfaa5da1f9f54e426558701fff1c088c1dcc9ec3e1f395e138bdfcda94a0161e7192f0596e11c8ff25d31735e6b33edc59 + languageName: node + linkType: hard + +"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5.7.2": version: 5.7.2 resolution: "@ethersproject/providers@npm:5.7.2" dependencies: @@ -3262,6 +3749,34 @@ __metadata: languageName: node linkType: hard +"@ethersproject/providers@npm:^5.7.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: 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" @@ -3272,6 +3787,16 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3282,6 +3807,16 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3293,6 +3828,17 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3307,6 +3853,20 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3332,6 +3892,17 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -3349,6 +3920,23 @@ __metadata: languageName: node linkType: hard +"@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: b43fd97ee359154c9162037c7aedc23abafae3cedf78d8fd2e641e820a0443120d22c473ec9bb79e8301f179f61a6120d61b0b757560e3aad8ae2110127018ba + languageName: node + linkType: hard + "@ethersproject/units@npm:5.7.0": version: 5.7.0 resolution: "@ethersproject/units@npm:5.7.0" @@ -3396,6 +3984,19 @@ __metadata: languageName: node linkType: hard +"@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: 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" @@ -4774,36 +5375,36 @@ __metadata: "@kleros/curate-v2-prettier-config": "workspace:^" "@kleros/curate-v2-templates": "workspace:^" "@kleros/curate-v2-tsconfig": "workspace:^" - "@kleros/kleros-v2-contracts": "npm:^0.3.2" + "@kleros/kleros-v2-contracts": "npm:^0.9.2" "@logtail/pino": "npm:^0.4.0" - "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.0" - "@nomicfoundation/hardhat-ethers": "npm:^3.0.0" - "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.0" - "@nomicfoundation/hardhat-verify": "npm:^2.0.0" - "@nomiclabs/hardhat-solhint": "npm:^3.0.1" - "@typechain/ethers-v6": "npm:^0.5.0" + "@nomicfoundation/hardhat-chai-matchers": "npm:^2.0.8" + "@nomicfoundation/hardhat-ethers": "npm:^3.0.8" + "@nomicfoundation/hardhat-network-helpers": "npm:^1.0.12" + "@nomicfoundation/hardhat-verify": "npm:^2.0.13" + "@nomiclabs/hardhat-solhint": "npm:^3.1.0" + "@typechain/ethers-v6": "npm:^0.5.1" "@typechain/hardhat": "npm:^9.1.0" - "@types/chai": "npm:^4.2.0" - "@types/mocha": "npm:^10.0.0" - "@types/node": "npm:^16.0.0" + "@types/chai": "npm:^4.3.20" + "@types/mocha": "npm:^10.0.10" + "@types/node": "npm:^16.18.126" "@wagmi/cli": "npm:^1.5.2" abitype: "npm:^0.10.3" chai: "npm:^4.2.0" dotenv: "npm:^16.3.1" - ethers: "npm:^6.10.0" + ethers: "npm:^6.13.6" graphql: "npm:^16.8.1" graphql-request: "npm:^6.1.0" - hardhat: "npm:^2.19.0" - hardhat-deploy: "npm:^0.11.45" - hardhat-deploy-ethers: "npm:^0.4.1" + hardhat: "npm:^2.23.0" + hardhat-deploy: "npm:^1.0.2" + hardhat-deploy-ethers: "npm:^0.4.2" hardhat-docgen: "npm:^1.3.0" - hardhat-gas-reporter: "npm:^1.0.8" + hardhat-gas-reporter: "npm:^1.0.10" hardhat-watcher: "npm:^2.5.0" pino: "npm:^8.17.0" pino-pretty: "npm:^10.2.3" solidity-coverage: "npm:^0.8.0" ts-node: "npm:^8.0.0" - typechain: "npm:^8.3.0" + typechain: "npm:^8.3.2" typescript: "npm:^5.1.3" languageName: unknown linkType: soft @@ -4847,7 +5448,7 @@ __metadata: "@graphprotocol/graph-ts": "npm:^0.33.0" "@kleros/curate-v2-eslint-config": "workspace:^" "@kleros/curate-v2-prettier-config": "workspace:^" - gluegun: "npm:^5.1.2" + gluegun: "npm:^5.2.0" matchstick-as: "npm:0.6.0" languageName: unknown linkType: soft @@ -4925,7 +5526,7 @@ __metadata: styled-components: "npm:^5.3.11" subgraph-status: "npm:^1.2.4" typescript: "npm:^5.3.3" - viem: "npm:^2.22.22" + viem: "npm:^2.27.2" vite: "npm:^5.4.2" vite-plugin-node-polyfills: "npm:^0.22.0" vite-plugin-svgr: "npm:^4.2.0" @@ -4961,6 +5562,18 @@ __metadata: languageName: node linkType: hard +"@kleros/kleros-v2-contracts@npm:^0.9.2": + version: 0.9.2 + resolution: "@kleros/kleros-v2-contracts@npm:0.9.2" + dependencies: + "@chainlink/contracts": "npm:^1.3.0" + "@kleros/vea-contracts": "npm:^0.6.0" + "@openzeppelin/contracts": "npm:^5.2.0" + viem: "npm:^2.24.1" + checksum: 8774811f7f49a25739e679ca7dc4fb10d86b635406473488f912d1445ed95107d46995b979882e8acdb762faad037c17b305007997cf70158aa6f95ae79bdd00 + languageName: node + linkType: hard + "@kleros/ui-components-library@npm:^2.20.0": version: 2.20.0 resolution: "@kleros/ui-components-library@npm:2.20.0" @@ -4993,6 +5606,13 @@ __metadata: languageName: node linkType: hard +"@kleros/vea-contracts@npm:^0.6.0": + version: 0.6.0 + resolution: "@kleros/vea-contracts@npm:0.6.0" + checksum: 1dafd94620d3392c2e00e09e7d1ca923007143f8625b4b584411a7b49404ae5630e870d3e260685964d37ccb9c4c4ab406523b8ec4dd9f89bcf6099a4f5976ec + languageName: node + linkType: hard + "@leichtgewicht/ip-codec@npm:^2.0.1": version: 2.0.4 resolution: "@leichtgewicht/ip-codec@npm:2.0.4" @@ -5144,6 +5764,32 @@ __metadata: 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: 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: 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" @@ -5174,19 +5820,6 @@ __metadata: languageName: node linkType: hard -"@metamask/eth-sig-util@npm:^4.0.0": - version: 4.0.1 - resolution: "@metamask/eth-sig-util@npm:4.0.1" - dependencies: - ethereumjs-abi: "npm:^0.6.8" - ethereumjs-util: "npm:^6.2.1" - ethjs-util: "npm:^0.1.6" - tweetnacl: "npm:^1.0.3" - tweetnacl-util: "npm:^0.15.1" - checksum: a41a986abd14675badeb02041466e30e1c3ef529c1d131f47c27fd48d73144fcf590f45d8ee8b7cd357725ebf75ece93f4484adf1baf6311cc996f7ef82c4ae1 - languageName: node - linkType: hard - "@metamask/json-rpc-engine@npm:^7.0.0": version: 7.3.2 resolution: "@metamask/json-rpc-engine@npm:7.3.2" @@ -5589,6 +6222,15 @@ __metadata: languageName: node linkType: hard +"@noble/curves@npm:1.4.2, @noble/curves@npm:^1.4.0, @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: f433a2e8811ae345109388eadfa18ef2b0004c1f79417553241db4f0ad0d59550be6298a4f43d989c627e9f7551ffae6e402a4edf0173981e6da95fc7cab5123 + languageName: node + linkType: hard + "@noble/curves@npm:1.8.0": version: 1.8.0 resolution: "@noble/curves@npm:1.8.0" @@ -5607,15 +6249,6 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:^1.4.0, @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: f433a2e8811ae345109388eadfa18ef2b0004c1f79417553241db4f0ad0d59550be6298a4f43d989c627e9f7551ffae6e402a4edf0173981e6da95fc7cab5123 - languageName: node - linkType: hard - "@noble/curves@npm:^1.6.0, @noble/curves@npm:~1.6.0": version: 1.6.0 resolution: "@noble/curves@npm:1.6.0" @@ -5715,167 +6348,73 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-block@npm:5.0.2": - version: 5.0.2 - resolution: "@nomicfoundation/ethereumjs-block@npm:5.0.2" - dependencies: - "@nomicfoundation/ethereumjs-common": "npm:4.0.2" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.2" - "@nomicfoundation/ethereumjs-trie": "npm:6.0.2" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.2" - "@nomicfoundation/ethereumjs-util": "npm:9.0.2" - ethereum-cryptography: "npm:0.1.3" - ethers: "npm:^5.7.1" - checksum: e3d7c24aa10306ae26389ce464f71e36fe8d331706e942a626594afdd097451d3bda210238b1da843e582b347f4349115b53432076b0f9b37ba36e31818b12cb - languageName: node - linkType: hard - -"@nomicfoundation/ethereumjs-blockchain@npm:7.0.2": - version: 7.0.2 - resolution: "@nomicfoundation/ethereumjs-blockchain@npm:7.0.2" - dependencies: - "@nomicfoundation/ethereumjs-block": "npm:5.0.2" - "@nomicfoundation/ethereumjs-common": "npm:4.0.2" - "@nomicfoundation/ethereumjs-ethash": "npm:3.0.2" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.2" - "@nomicfoundation/ethereumjs-trie": "npm:6.0.2" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.2" - "@nomicfoundation/ethereumjs-util": "npm:9.0.2" - abstract-level: "npm:^1.0.3" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - level: "npm:^8.0.0" - lru-cache: "npm:^5.1.1" - memory-level: "npm:^1.0.0" - checksum: 4cc27cf1d39175f93ec02b4627f0320258685fc19541c0cb2b9208204e65a924f3fbeb69c23840d7100a75c6d88b7a0c65f552cb44bf1e06b530a39ac6f04e17 - languageName: node - linkType: hard - -"@nomicfoundation/ethereumjs-common@npm:4.0.2": - version: 4.0.2 - resolution: "@nomicfoundation/ethereumjs-common@npm:4.0.2" - dependencies: - "@nomicfoundation/ethereumjs-util": "npm:9.0.2" - crc-32: "npm:^1.2.0" - checksum: ea0199240a9cfc932450421b00ba390a9d357092fdbb6ceee2b09ee6a8bc7820fb1df076ead94e0b6748158620ec655099e401816d47ad24eb603694f3a787d1 +"@nomicfoundation/edr-darwin-arm64@npm:0.10.0": + version: 0.10.0 + resolution: "@nomicfoundation/edr-darwin-arm64@npm:0.10.0" + checksum: 437b330d4400198da7e2412a5ce0cf213e6dbe1e944be0a38a8835869e0fab4b38a03a5a650880853605f7bccb0f3cae1de00ee99f114f1d49f5450a7b6edd3e languageName: node linkType: hard -"@nomicfoundation/ethereumjs-ethash@npm:3.0.2": - version: 3.0.2 - resolution: "@nomicfoundation/ethereumjs-ethash@npm:3.0.2" - dependencies: - "@nomicfoundation/ethereumjs-block": "npm:5.0.2" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.2" - "@nomicfoundation/ethereumjs-util": "npm:9.0.2" - abstract-level: "npm:^1.0.3" - bigint-crypto-utils: "npm:^3.0.23" - ethereum-cryptography: "npm:0.1.3" - checksum: c7d963a6806e70cb96ff290a9bc461fb6ad4f74144d9f38eb5f190b228d9b0961aa67d398f80da4b59efb8c57957c936b32faab26c17cf07a6145efe0a6d16e9 +"@nomicfoundation/edr-darwin-x64@npm:0.10.0": + version: 0.10.0 + resolution: "@nomicfoundation/edr-darwin-x64@npm:0.10.0" + checksum: bd81a4ca11fabc54401d2780d3a63a6ca6891863ccefaa23cb4fad36a79e038748b27db0634f811b625cb4fae4458d2a4d0bb40b48c84886058d8b844690ec9e languageName: node linkType: hard -"@nomicfoundation/ethereumjs-evm@npm:2.0.2": - version: 2.0.2 - resolution: "@nomicfoundation/ethereumjs-evm@npm:2.0.2" - dependencies: - "@ethersproject/providers": "npm:^5.7.1" - "@nomicfoundation/ethereumjs-common": "npm:4.0.2" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.2" - "@nomicfoundation/ethereumjs-util": "npm:9.0.2" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - mcl-wasm: "npm:^0.7.1" - rustbn.js: "npm:~0.2.0" - checksum: abcc280500d776a214b282d5a66093fdf3b91582e9f69d6f35e0c7000f58af57060cd384acda7d147193f962f17a8c4ed55e5f2453b2d5b43d694d6588306ef9 +"@nomicfoundation/edr-linux-arm64-gnu@npm:0.10.0": + version: 0.10.0 + resolution: "@nomicfoundation/edr-linux-arm64-gnu@npm:0.10.0" + checksum: c2bb05ac8f572ebd0025ed3fb2afd5a9cd8300f5f39fd13fccd4b26841de2582358cd627d253d85810b51af30a20e317d433723da9a158c894332f87367c65c8 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-rlp@npm:5.0.2": - version: 5.0.2 - resolution: "@nomicfoundation/ethereumjs-rlp@npm:5.0.2" - bin: - rlp: bin/rlp - checksum: ceb820296624f45fa8f7cd3e2cfa4d229722953e91631e6fb3fbca9d1ebe8eea21a8ef4917fa15295f05bed369db06eb81f44e74382b1bca4ece2bb000c6e6d4 +"@nomicfoundation/edr-linux-arm64-musl@npm:0.10.0": + version: 0.10.0 + resolution: "@nomicfoundation/edr-linux-arm64-musl@npm:0.10.0" + checksum: aa9437077537fa7feb79c3e739a41d69b896868d729d64078e4d56d67d1e39424697c4ee27fbe1668d019c821b94dbce2345db324a9c4a9c3809f2d6c7eccf96 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-statemanager@npm:2.0.2": - version: 2.0.2 - resolution: "@nomicfoundation/ethereumjs-statemanager@npm:2.0.2" - dependencies: - "@nomicfoundation/ethereumjs-common": "npm:4.0.2" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.2" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - ethers: "npm:^5.7.1" - js-sdsl: "npm:^4.1.4" - checksum: 0eb939c75aa63517ec8832330c02a71c060fd8424ebe608a072c563a0a9d16621dca9a9c851fa98971316aed80dd9174a0d72ae09633a9698367a3316d773389 +"@nomicfoundation/edr-linux-x64-gnu@npm:0.10.0": + version: 0.10.0 + resolution: "@nomicfoundation/edr-linux-x64-gnu@npm:0.10.0" + checksum: 4b4eaa16d4f55cb363fbecec9ce6d0412311af7959a20ef68f5a189977a6f7953c9b4b9d596da25f42bf1aea6997ed0175cdc376569934d2fd4b4fd677843cd2 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-trie@npm:6.0.2": - version: 6.0.2 - resolution: "@nomicfoundation/ethereumjs-trie@npm:6.0.2" - dependencies: - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.2" - "@nomicfoundation/ethereumjs-util": "npm:9.0.2" - "@types/readable-stream": "npm:^2.3.13" - ethereum-cryptography: "npm:0.1.3" - readable-stream: "npm:^3.6.0" - checksum: f70b89e7f089a90647ea96babc23427cf4db3bdc027667b93be38a0ff03f3222c5130529778fb210ffa56eb2a53cb1657cafdfe828c6a41825bb7e2b74614060 +"@nomicfoundation/edr-linux-x64-musl@npm:0.10.0": + version: 0.10.0 + resolution: "@nomicfoundation/edr-linux-x64-musl@npm:0.10.0" + checksum: 9006aaf0d8979e86e5eb055416ecd76b6e2e3783712152ee62d1e32ef78c68e0e1472956aa9afb08bac33e7d831e524aa86ba65737fbaeafac020c81af56836e languageName: node linkType: hard -"@nomicfoundation/ethereumjs-tx@npm:5.0.2": - version: 5.0.2 - resolution: "@nomicfoundation/ethereumjs-tx@npm:5.0.2" - dependencies: - "@chainsafe/ssz": "npm:^0.9.2" - "@ethersproject/providers": "npm:^5.7.2" - "@nomicfoundation/ethereumjs-common": "npm:4.0.2" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.2" - "@nomicfoundation/ethereumjs-util": "npm:9.0.2" - ethereum-cryptography: "npm:0.1.3" - checksum: 0feb40b602d3b525359f57ad76d64542e192a6f8bb714477b9044b5ba13ab7007a3b5a8a2b2df50e3fdcc9da0c04d07daa3797bc5cc6aad5d29d5633c5616251 +"@nomicfoundation/edr-win32-x64-msvc@npm:0.10.0": + version: 0.10.0 + resolution: "@nomicfoundation/edr-win32-x64-msvc@npm:0.10.0" + checksum: 8c809725f1023c7f9709df0abf3b34e00ab234ffac43a81420543a420ecb644a5e0f6d5f16124c24e69916074660decdb4af8ec423b2ea69335968787778b8f2 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-util@npm:9.0.2": - version: 9.0.2 - resolution: "@nomicfoundation/ethereumjs-util@npm:9.0.2" +"@nomicfoundation/edr@npm:^0.10.0": + version: 0.10.0 + resolution: "@nomicfoundation/edr@npm:0.10.0" dependencies: - "@chainsafe/ssz": "npm:^0.10.0" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.2" - ethereum-cryptography: "npm:0.1.3" - checksum: ec687ecd964bf624e82b5f0cbbffd0896dfdcff6e7b3eb216d18b79cdb6735f2c8a516d04c5a2b0e36a906bd8f35174a4653634151f35e615a7d24d901a35905 + "@nomicfoundation/edr-darwin-arm64": "npm:0.10.0" + "@nomicfoundation/edr-darwin-x64": "npm:0.10.0" + "@nomicfoundation/edr-linux-arm64-gnu": "npm:0.10.0" + "@nomicfoundation/edr-linux-arm64-musl": "npm:0.10.0" + "@nomicfoundation/edr-linux-x64-gnu": "npm:0.10.0" + "@nomicfoundation/edr-linux-x64-musl": "npm:0.10.0" + "@nomicfoundation/edr-win32-x64-msvc": "npm:0.10.0" + checksum: 123405a84cba348ea4381d75f06a68e9caadd4e5615e706d35f2c2e9e399846067c8cc41e1f52ecd7fc31538fb81a8e20e5dee5196fc38d7b79b75006edb73c1 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-vm@npm:7.0.2": - version: 7.0.2 - resolution: "@nomicfoundation/ethereumjs-vm@npm:7.0.2" - dependencies: - "@nomicfoundation/ethereumjs-block": "npm:5.0.2" - "@nomicfoundation/ethereumjs-blockchain": "npm:7.0.2" - "@nomicfoundation/ethereumjs-common": "npm:4.0.2" - "@nomicfoundation/ethereumjs-evm": "npm:2.0.2" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.2" - "@nomicfoundation/ethereumjs-statemanager": "npm:2.0.2" - "@nomicfoundation/ethereumjs-trie": "npm:6.0.2" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.2" - "@nomicfoundation/ethereumjs-util": "npm:9.0.2" - debug: "npm:^4.3.3" - ethereum-cryptography: "npm:0.1.3" - mcl-wasm: "npm:^0.7.1" - rustbn.js: "npm:~0.2.0" - checksum: 7ad391bc68e8e755ed0b88012e8857390590b5ba8b11bdb4995b04ba7afed5570a4259b85fff329affb643e87be12972ca44d269e14e5f840a82c315011d0d7a - languageName: node - linkType: hard - -"@nomicfoundation/hardhat-chai-matchers@npm:^2.0.0": - version: 2.0.3 - resolution: "@nomicfoundation/hardhat-chai-matchers@npm:2.0.3" +"@nomicfoundation/hardhat-chai-matchers@npm:^2.0.8": + version: 2.0.8 + resolution: "@nomicfoundation/hardhat-chai-matchers@npm:2.0.8" dependencies: "@types/chai-as-promised": "npm:^7.1.3" chai-as-promised: "npm:^7.1.1" @@ -5886,50 +6425,59 @@ __metadata: chai: ^4.2.0 ethers: ^6.1.0 hardhat: ^2.9.4 - checksum: c054b2d065bd14b85b145448d42435a94c9a6c3bbfd5f59b96de543b80100e5a17d4f5eeb71100866c439e421bd6100f5b2adbbb84eca0a43dda4b6975bb4fb3 + checksum: 1e40d2ae1627d9c62c90e85f60d38a24768198b3f525659f958c44d395d751876be13198e20ffd2b3336b8650225652610f0c36f0e376c8ee6b0854bcd0f6bb0 languageName: node linkType: hard -"@nomicfoundation/hardhat-ethers@npm:^3.0.0": - version: 3.0.5 - resolution: "@nomicfoundation/hardhat-ethers@npm:3.0.5" +"@nomicfoundation/hardhat-ethers@npm:^3.0.8": + version: 3.0.8 + resolution: "@nomicfoundation/hardhat-ethers@npm:3.0.8" dependencies: debug: "npm:^4.1.1" lodash.isequal: "npm:^4.5.0" peerDependencies: ethers: ^6.1.0 hardhat: ^2.0.0 - checksum: 666101fe903923dda54e6f0c87946468e33d614b8b8ff6678b9507a753fcdb6b053d3b785ecb3964102f513d3fd9dcfaa22b39de6afe6f4df2400483e9c54850 + checksum: 5fe3d1bbf598ad232040ed3df8990c325098ade46bc00e389b9f1c51e0eafad6bab66f373e9814cdbeaede62c43182956def68e71e40142b5651d88402c4f294 languageName: node linkType: hard -"@nomicfoundation/hardhat-network-helpers@npm:^1.0.0": - version: 1.0.10 - resolution: "@nomicfoundation/hardhat-network-helpers@npm:1.0.10" +"@nomicfoundation/hardhat-network-helpers@npm:^1.0.12": + version: 1.0.12 + resolution: "@nomicfoundation/hardhat-network-helpers@npm:1.0.12" dependencies: ethereumjs-util: "npm:^7.1.4" peerDependencies: hardhat: ^2.9.5 - checksum: 38953777f69fea6c82a6df0f5de5c52afd797aae9d9d38d710dc19a4a0ef6bba2b4320db6050e04e94fb4bb0ce4cf81a2911a4da5097e0ca6fc1017ca77c3bb9 + checksum: 6774bdaa76b6792b408dbdf9b4ff5c19315fa9d5be53e53d6b68cd56aba82d18cfa2548a71a2ced41542989bddd3ab4d11e009579d34678202e26f11c43c2a44 languageName: node linkType: hard -"@nomicfoundation/hardhat-verify@npm:^2.0.0": - version: 2.0.3 - resolution: "@nomicfoundation/hardhat-verify@npm:2.0.3" +"@nomicfoundation/hardhat-verify@npm:^2.0.13": + version: 2.0.13 + resolution: "@nomicfoundation/hardhat-verify@npm:2.0.13" dependencies: "@ethersproject/abi": "npm:^5.1.2" "@ethersproject/address": "npm:^5.0.2" cbor: "npm:^8.1.0" - chalk: "npm:^2.4.2" debug: "npm:^4.1.1" lodash.clonedeep: "npm:^4.5.0" + picocolors: "npm:^1.1.0" semver: "npm:^6.3.0" table: "npm:^6.8.0" undici: "npm:^5.14.0" peerDependencies: hardhat: ^2.0.4 - checksum: 4b461f9cd242ba570ab98b7f407d8d27fb3cd667ef8268489485e337e7b2d256d3946869b86c7b7285b51adbcbfe2eeff54066737fec139e186e24e6a0c7ec79 + checksum: 5541c3265aa1e73b6661fc456692b5ad5a7c56cc4784edaeae62c74df449b84ea72abc673741eb8c7161020b4fb6c87e8f315c0c859b5fdeae6e0c1056d77665 + 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: 1dcf687e4719844bffc688d13d15c0db3218ab05983d6b53777a3172c7df157c105171e802fe7812d9fd2bdb4dcd8d7287367c851eed4dfd76621e799c14574f languageName: node linkType: hard @@ -6042,14 +6590,14 @@ __metadata: languageName: node linkType: hard -"@nomiclabs/hardhat-solhint@npm:^3.0.1": - version: 3.0.1 - resolution: "@nomiclabs/hardhat-solhint@npm:3.0.1" +"@nomiclabs/hardhat-solhint@npm:^3.1.0": + version: 3.1.0 + resolution: "@nomiclabs/hardhat-solhint@npm:3.1.0" dependencies: solhint: "npm:^3.4.0" peerDependencies: hardhat: ^2.0.0 - checksum: 661a3e514cc2aa0d00f058262a9b6a07f0380ec4f973030f16a21d53b46f8748b42bfb4aa925e9740f3e2839192d89b0e558e3af17001ab2d3490c924362571c + checksum: 21eee0285073ac0d6fc214f9d143bc2fcba101abac7b8a7dd786c3854c83e41da9a5bba7c1fdd3fb6167bdc72551611b763fe186636493975bc3d85fa9ec0b97 languageName: node linkType: hard @@ -6165,6 +6713,72 @@ __metadata: 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: a8cd0cc24103cc42021c452220005efde535ba3596ec2ba5eb6dc299d1f3291c38a3d859621d7983bd7c43c80606d6e7d906e1081a1e499455ddea7ba64ab355 + languageName: node + linkType: hard + +"@openzeppelin/contracts-upgradeable@npm:4.5.2": + version: 4.5.2 + resolution: "@openzeppelin/contracts-upgradeable@npm:4.5.2" + checksum: 5e246da7a44bb982a312ebf79978735712140692d46273566e490159b98b9041ca72cc08c3d05172137a389be4caad5afc001480bc5557f3d47162f4626e3723 + languageName: node + linkType: hard + +"@openzeppelin/contracts-upgradeable@npm:4.7.3": + version: 4.7.3 + resolution: "@openzeppelin/contracts-upgradeable@npm:4.7.3" + checksum: 7c72ffeca867478b5aa8e8c7adb3d1ce114cfdc797ed4f3cd074788cf4da25d620ffffd624ac7e9d1223eecffeea9f7b79200ff70dc464cc828c470ccd12ddf1 + languageName: node + linkType: hard + +"@openzeppelin/contracts-upgradeable@npm:4.8.3": + version: 4.8.3 + resolution: "@openzeppelin/contracts-upgradeable@npm:4.8.3" + checksum: 1ff70629f509221ef948da6de582fd19a6cf7deea884f0c2de1347ca5eb1f3910099f92fcaf1a70fcae982d8f95b58f48548d833e6ad708e5d7afbae1556fae8 + languageName: node + linkType: hard + +"@openzeppelin/contracts-upgradeable@npm:4.9.3": + version: 4.9.3 + resolution: "@openzeppelin/contracts-upgradeable@npm:4.9.3" + checksum: d8fd6fd9d2271fbdd3958c20769b72a241687883ecd3bea05a3969568cdcabdee9d53c21ac776a651c397507d9c22d8db0a4fb970d27bdab918979fae7285a2f + languageName: node + linkType: hard + +"@openzeppelin/contracts@npm:4.5.0": + version: 4.5.0 + resolution: "@openzeppelin/contracts@npm:4.5.0" + checksum: 8bfa1733732420331728cedd7f1f5f4e4ae0700b32c9e5def19b2d42dbb0b246709e8e22abd457e8269d743012ff2aed4e3f100a942f45d9507cb78d5dbd435b + languageName: node + linkType: hard + +"@openzeppelin/contracts@npm:4.7.3": + version: 4.7.3 + resolution: "@openzeppelin/contracts@npm:4.7.3" + checksum: 3d16ed8943938373ecc331c2ab83c3e8d0d89aed0c2a109aaa61ca6524b4c31cb5a81185c6f93ce9ee2dda685a4328fd85bd217929ae598f4be813d5d4cd1b78 + languageName: node + linkType: hard + +"@openzeppelin/contracts@npm:4.8.3": + version: 4.8.3 + resolution: "@openzeppelin/contracts@npm:4.8.3" + checksum: 276481d76afdc71690bd4204cdd47e6add30d183e20df57c76e5ffc481c783ca756842f3b0ac7e3e6336217dcde448cef8279fafae1176ac436ad86594c4bdc2 + languageName: node + linkType: hard + +"@openzeppelin/contracts@npm:4.9.3": + version: 4.9.3 + resolution: "@openzeppelin/contracts@npm:4.9.3" + checksum: ce0a16a56a39b62d72370ac702bce1917096492442ff05de88521beda2c3f3935b93ee2b9a184614dd543a6181f2f0be10243f5a629be87aab284ade68c18320 + languageName: node + linkType: hard + "@openzeppelin/contracts@npm:^4.8.3": version: 4.9.5 resolution: "@openzeppelin/contracts@npm:4.9.5" @@ -6172,6 +6786,34 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/contracts@npm:^5.2.0": + version: 5.3.0 + resolution: "@openzeppelin/contracts@npm:5.3.0" + checksum: d1b379a56eb443b6ba2caee51f38bd3e2d5be2d3b2c935a083ed3311c106aa3903d7cadd05457999b24175bb80cc405dd6c70297c9825b15471b38051021fd88 + languageName: node + linkType: hard + +"@openzeppelin/upgrades-core@npm:^1.24.1": + version: 1.44.0 + resolution: "@openzeppelin/upgrades-core@npm:1.44.0" + 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: 255eaf514726e8e4fab35b7c63688318665aaf91d526bed8d1f87602122754863575a06f0bf54c489d752fbfa3e4d860c4e3c302d320851051cd038f5f983b49 + languageName: node + linkType: hard + "@parcel/watcher-android-arm64@npm:2.4.0": version: 2.4.0 resolution: "@parcel/watcher-android-arm64@npm:2.4.0" @@ -6829,6 +7471,13 @@ __metadata: languageName: node linkType: hard +"@scroll-tech/contracts@npm:0.1.0": + version: 0.1.0 + resolution: "@scroll-tech/contracts@npm:0.1.0" + checksum: 7b32c4fbd7bafccb4c44f435764e9869486f0094759db24fca5021a3001ea61983a1902eff772c3d003a16470bde28859c975b3a6736264d651695dfbfc3665b + languageName: node + linkType: hard + "@scure/base@npm:^1.1.3, @scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2, @scure/base@npm:~1.1.4": version: 1.1.5 resolution: "@scure/base@npm:1.1.5" @@ -6954,9 +7603,19 @@ __metadata: version: 1.2.2 resolution: "@scure/bip39@npm:1.2.2" dependencies: - "@noble/hashes": "npm:~1.3.2" - "@scure/base": "npm:~1.1.4" - checksum: f71aceda10a7937bf3779fd2b4c4156c95ec9813269470ddca464cb8ab610d2451b173037f4b1e6dac45414e406e7adc7b5814c51279f4474d5d38140bbee542 + "@noble/hashes": "npm:~1.3.2" + "@scure/base": "npm:~1.1.4" + checksum: f71aceda10a7937bf3779fd2b4c4156c95ec9813269470ddca464cb8ab610d2451b173037f4b1e6dac45414e406e7adc7b5814c51279f4474d5d38140bbee542 + 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: 7d71fd58153de22fe8cd65b525f6958a80487bc9d0fbc32c71c328aeafe41fa259f989d2f1e0fa4fdfeaf83b8fcf9310d52ed9862987e46c2f2bfb9dd8cf9fc1 languageName: node linkType: hard @@ -7749,7 +8408,7 @@ __metadata: languageName: node linkType: hard -"@typechain/ethers-v6@npm:^0.5.0": +"@typechain/ethers-v6@npm:^0.5.1": version: 0.5.1 resolution: "@typechain/ethers-v6@npm:0.5.1" dependencies: @@ -7818,15 +8477,6 @@ __metadata: 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: 9ff3e7a1539a953c381c0d30ea2049162e3cab894cda91ee10f3a84d603f9afa2b2bc2a38fe9b427de94b6e2b7b77aefd217c1c7b07a10ae8d7499f9d6697a41 - languageName: node - linkType: hard - "@types/bn.js@npm:^5.1.0": version: 5.1.5 resolution: "@types/bn.js@npm:5.1.5" @@ -7864,13 +8514,20 @@ __metadata: languageName: node linkType: hard -"@types/chai@npm:*, @types/chai@npm:^4.2.0": +"@types/chai@npm:*": version: 4.3.11 resolution: "@types/chai@npm:4.3.11" checksum: c83a00359684bf06114d5ad0ffa62c78b2fbfe09a985eda56e55cd3c191fe176052aef6e297a8c8a3608efb8ea7a44598cf7e0ae1a3a9311af892417e95b0b28 languageName: node linkType: hard +"@types/chai@npm:^4.3.20": + version: 4.3.20 + resolution: "@types/chai@npm:4.3.20" + checksum: 94fd87036fb63f62c79caf58ccaec88e23cc109e4d41607d83adc609acd6b24eabc345feb7850095a53f76f99c470888251da9bd1b90849c8b2b5a813296bb19 + languageName: node + linkType: hard + "@types/concat-stream@npm:^1.6.0": version: 1.6.1 resolution: "@types/concat-stream@npm:1.6.1" @@ -8149,10 +8806,10 @@ __metadata: languageName: node linkType: hard -"@types/mocha@npm:^10.0.0": - version: 10.0.6 - resolution: "@types/mocha@npm:10.0.6" - checksum: fc73626e81e89c32d06b7ff9b72c4177b46d579cdd932f796614adc026852d84cb849d743473ba572cb4d9ea6d8c04e3749552d326c26495ec1c4b46e6e0a0c0 +"@types/mocha@npm:^10.0.10": + version: 10.0.10 + resolution: "@types/mocha@npm:10.0.10" + checksum: 4e3b61ed5112add86891a5dd3ebdd087714f5e1784a63d47a96424c0825058fd07074e85e43573462f751636c92808fc18a5f3862fe45e649ea98fdc5a3ee2ea languageName: node linkType: hard @@ -8188,13 +8845,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:18.15.13": - version: 18.15.13 - resolution: "@types/node@npm:18.15.13" - checksum: b9bbe923573797ef7c5fd2641a6793489e25d9369c32aeadcaa5c7c175c85b42eb12d6fe173f6781ab6f42eaa1ebd9576a419eeaa2a1ec810094adb8adaa9a54 - languageName: node - linkType: hard - "@types/node@npm:20.5.1": version: 20.5.1 resolution: "@types/node@npm:20.5.1" @@ -8202,6 +8852,15 @@ __metadata: languageName: node linkType: hard +"@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: e8ba102f8c1aa7623787d625389be68d64e54fcbb76d41f6c2c64e8cf4c9f4a2370e7ef5e5f1732f3c57529d3d26afdcb2edc0101c5e413a79081449825c57ac + languageName: node + linkType: hard + "@types/node@npm:^10.0.3": version: 10.17.60 resolution: "@types/node@npm:10.17.60" @@ -8209,17 +8868,17 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^12.12.54": +"@types/node@npm:^12.12.54, @types/node@npm:^12.7.1": version: 12.20.55 resolution: "@types/node@npm:12.20.55" checksum: 1f916a06fff02faadb09a16ed6e31820ce170798b202ef0b14fc244bfbd721938c54a3a99836e185e4414ca461fe96c5bb5c67c3d248f153555b7e6347f061dd languageName: node linkType: hard -"@types/node@npm:^16.0.0": - version: 16.18.75 - resolution: "@types/node@npm:16.18.75" - checksum: 76e6bdcb11d524ac0399c7e7e9c0e4cca999aa9f84c79ec68f568420268d4b3a349f37550dbde5d7a98e59f776dcdf2000e9a926cf499a06de172af87e5f4935 +"@types/node@npm:^16.18.126": + version: 16.18.126 + resolution: "@types/node@npm:16.18.126" + checksum: 33e0fa9209a4a96459a8fdf6b078ca9590eb67a8d51899180cfac8afecb9aa133c755d1c38a8b947b9f384f2faa184cabf4e567f5f6dded285be1b31588ec199 languageName: node linkType: hard @@ -8336,16 +8995,6 @@ __metadata: languageName: node linkType: hard -"@types/readable-stream@npm:^2.3.13": - version: 2.3.15 - resolution: "@types/readable-stream@npm:2.3.15" - dependencies: - "@types/node": "npm:*" - safe-buffer: "npm:~5.1.1" - checksum: 49b51e56f9cc401cb31c72973a7565ef4208d7e2465a789843104ec0fcbe609727b0b5bf4682fbec773c7f7bd14858e5dba739fd85e14d8a85e41185d65984d3 - languageName: node - linkType: hard - "@types/resolve@npm:1.17.1": version: 1.17.1 resolution: "@types/resolve@npm:1.17.1" @@ -9884,6 +10533,13 @@ __metadata: languageName: node linkType: hard +"@yarnpkg/lockfile@npm:^1.1.0": + version: 1.1.0 + resolution: "@yarnpkg/lockfile@npm:1.1.0" + checksum: cd19e1114aaf10a05126aeea8833ef4ca8af8a46e88e12884f8359d19333fd19711036dbc2698dbe937f81f037070cf9a8da45c2e8c6ca19cafd7d15659094ed + languageName: node + linkType: hard + "@yornaath/batshit-devtools@npm:^1.6.0": version: 1.6.0 resolution: "@yornaath/batshit-devtools@npm:1.6.0" @@ -9900,6 +10556,13 @@ __metadata: languageName: node linkType: hard +"@zksync/contracts@git+https://github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9": + version: 0.1.0 + resolution: "@zksync/contracts@https://github.com/matter-labs/era-contracts.git#commit=446d391d34bdb48255d5f8fef8a8248925fc98b9" + checksum: 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" @@ -10050,21 +10713,6 @@ __metadata: languageName: node linkType: hard -"abstract-level@npm:^1.0.0, abstract-level@npm:^1.0.2, abstract-level@npm:^1.0.3": - version: 1.0.4 - resolution: "abstract-level@npm:1.0.4" - dependencies: - buffer: "npm:^6.0.3" - catering: "npm:^2.1.0" - is-buffer: "npm:^2.0.5" - level-supports: "npm:^4.0.0" - level-transcoder: "npm:^1.0.1" - module-error: "npm:^1.0.1" - queue-microtask: "npm:^1.2.3" - checksum: 8edf4cf55b7b66b653296f53a643bcf1501074be099d8c44351595cd33f769b7b2aed216d5fffe1c99ebea4acf14f5ae093e98baa60ea1d236ea8a3387350ebb - 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" @@ -10285,6 +10933,15 @@ __metadata: 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: 4c7e8b6a10eaf18874ecee964b5db62ac86d0b9266ad4987b3a1efcb5d11a9e12c881ee40d14951833135a8966f10a3efe43f9c78286a6e632f53d85ad28b9c0 + languageName: node + linkType: hard + "ansi-colors@npm:4.1.1": version: 4.1.1 resolution: "ansi-colors@npm:4.1.1" @@ -10292,7 +10949,7 @@ __metadata: languageName: node linkType: hard -"ansi-colors@npm:^4.1.1": +"ansi-colors@npm:^4.1.1, ansi-colors@npm:^4.1.3": version: 4.1.3 resolution: "ansi-colors@npm:4.1.3" checksum: 43d6e2fc7b1c6e4dc373de708ee76311ec2e0433e7e8bd3194e7ff123ea6a747428fc61afdcf5969da5be3a5f0fd054602bec56fc0ebe249ce2fcde6e649e3c2 @@ -11169,6 +11826,15 @@ __metadata: 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: 5392dbe04e7fe68b944eb37961d9dfa147aaac3ee9ee3f6e13d42e2c9fbe949e68d16e896c14ee9016fa5f8e6e53ec7fd8b5f01b50a32067a7d94ac9cfb9a050 + languageName: node + linkType: hard + "bfj@npm:^7.0.2": version: 7.1.0 resolution: "bfj@npm:7.1.0" @@ -11196,13 +11862,6 @@ __metadata: languageName: node linkType: hard -"bigint-crypto-utils@npm:^3.0.23": - version: 3.3.0 - resolution: "bigint-crypto-utils@npm:3.3.0" - checksum: 94d10ac9db66b093c7c2beace833ac167b57188c8ac784a7e207ea4f585cf9c2066e5d1f5a1b26cb6ccb7f7be8e38687c79f049b87df07cfdc7bd484aee2390d - languageName: node - linkType: hard - "bignumber.js@npm:9.1.2": version: 9.1.2 resolution: "bignumber.js@npm:9.1.2" @@ -11210,6 +11869,13 @@ __metadata: languageName: node linkType: hard +"bignumber.js@npm:^9.1.2": + version: 9.2.1 + resolution: "bignumber.js@npm:9.2.1" + checksum: dc0b979aea8e35b00281f675c96185d512548cf90be097f84b9e831729d2c60eef50792006075878c029b57881e5c5e9cc0d5283e0fa69aad144dc6f4ac77216 + languageName: node + linkType: hard + "binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" @@ -11287,7 +11953,7 @@ __metadata: 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": +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" checksum: 10f8db196d3da5adfc3207d35d0a42aa29033eb33685f20ba2c36cadfe2de63dad05df0a20ab5aae01b418d1c4b3d4d205273085262fa020d17e93ff32b67527 @@ -11356,6 +12022,22 @@ __metadata: 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: bc3d3d88d77dc8cabb0811844acdbd4805e8ca8011222345330817737042bf6f86d93eb74a3f7e0cab634e64ef69db03cf52b480761ed90a965de0c8ff1bea8c + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -11400,18 +12082,6 @@ __metadata: languageName: node linkType: hard -"browser-level@npm:^1.0.1": - version: 1.0.1 - resolution: "browser-level@npm:1.0.1" - dependencies: - abstract-level: "npm:^1.0.2" - catering: "npm:^2.1.1" - module-error: "npm:^1.0.2" - run-parallel-limit: "npm:^1.1.0" - checksum: e712569111782da76853fecf648b43ff878ff2301c2830a9e7399685b646824a85f304dea5f023e02ee41a63a972f9aad734bd411069095adc9c79784fc649a5 - languageName: node - linkType: hard - "browser-process-hrtime@npm:^1.0.0": version: 1.0.0 resolution: "browser-process-hrtime@npm:1.0.0" @@ -11635,6 +12305,13 @@ __metadata: languageName: node linkType: hard +"bufio@npm:^1.0.7": + version: 1.2.3 + resolution: "bufio@npm:1.2.3" + checksum: 9a79112cdba23d1a319c688b4a53af75dcae27e462915536883ec458a45e6b589f5bb01693e09eba2def1e5f89005d11084d6dcf733d2d5f96007a6d95a42c58 + languageName: node + linkType: hard + "builtin-modules@npm:^3.1.0": version: 3.3.0 resolution: "builtin-modules@npm:3.3.0" @@ -11873,13 +12550,6 @@ __metadata: languageName: node linkType: hard -"case@npm:^1.6.3": - version: 1.6.3 - resolution: "case@npm:1.6.3" - checksum: 2fc1df75bbb4118339e06141b9a54aba95cc62460ac92730290144fbec6b6a04f5bf7abf6a6486a1338f5821bd184402f216cec8cea0472451759c27e20fc332 - languageName: node - linkType: hard - "caseless@npm:^0.12.0, caseless@npm:~0.12.0": version: 0.12.0 resolution: "caseless@npm:0.12.0" @@ -11887,10 +12557,12 @@ __metadata: languageName: node linkType: hard -"catering@npm:^2.1.0, catering@npm:^2.1.1": - version: 2.1.1 - resolution: "catering@npm:2.1.1" - checksum: 4669c9fa5f3a73273535fb458a964d8aba12dc5102d8487049cf03623bef3cdff4b5d9f92ff04c00f1001057a7cc7df6e700752ac622c2a7baf7bcff34166683 +"cbor@npm:^10.0.0": + version: 10.0.3 + resolution: "cbor@npm:10.0.3" + dependencies: + nofilter: "npm:^3.0.2" + checksum: ff33c3404c3acc8afc448163a7b32eea39f4f99d641ac496352a6830256617a0b1d49b2862746b6b150e8931b6f6da10572d78c28af3a64b6836881c33c5d942 languageName: node linkType: hard @@ -11955,6 +12627,21 @@ __metadata: languageName: node linkType: hard +"chai@npm:^4.3.4": + 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: cde341aee15b0a51559c7cfc20788dcfb4d586a498cfb93b937bb568fd45c777b73b1461274be6092b6bf868adb4e3a63f3fec13c89f7d8fb194f84c6fa42d5f + languageName: node + linkType: hard + "chalk@npm:5.3.0, chalk@npm:^5.0.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" @@ -12096,7 +12783,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:3.5.3, chokidar@npm:^3.4.0, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": +"chokidar@npm:3.5.3, 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: @@ -12124,6 +12811,15 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^4.0.0": + version: 4.0.3 + resolution: "chokidar@npm:4.0.3" + dependencies: + readdirp: "npm:^4.0.1" + checksum: bf2a575ea5596000e88f5db95461a9d59ad2047e939d5a4aac59dd472d126be8f1c1ff3c7654b477cf532d18f42a97279ef80ee847972fd2a25410bf00b80b59 + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -12145,7 +12841,7 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.2.0": +"ci-info@npm:^3.2.0, ci-info@npm:^3.7.0": version: 3.9.0 resolution: "ci-info@npm:3.9.0" checksum: 75bc67902b4d1c7b435497adeb91598f6d52a3389398e44294f6601b20cfef32cf2176f7be0eb961d9e085bb333a8a5cae121cb22f81cf238ae7f58eb80e9397 @@ -12178,20 +12874,6 @@ __metadata: languageName: node linkType: hard -"classic-level@npm:^1.2.0": - version: 1.4.1 - resolution: "classic-level@npm:1.4.1" - dependencies: - abstract-level: "npm:^1.0.2" - catering: "npm:^2.1.0" - module-error: "npm:^1.0.1" - napi-macros: "npm:^2.2.2" - node-gyp: "npm:latest" - node-gyp-build: "npm:^4.3.0" - checksum: 11f9362301477cb5cf3b147e5846754e0e4296231e265145101403f4a5cb797a685b6a9b6b4c880a42b05772f846a222a5a7a563262ca15b5ca03e25e9a805db - 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.5.1 resolution: "classnames@npm:2.5.1" @@ -12224,6 +12906,13 @@ __metadata: languageName: node linkType: hard +"cli-boxes@npm:^2.2.1": + version: 2.2.1 + resolution: "cli-boxes@npm:2.2.1" + checksum: be79f8ec23a558b49e01311b39a1ea01243ecee30539c880cf14bf518a12e223ef40c57ead0cb44f509bffdffc5c129c746cd50d863ab879385370112af4f585 + languageName: node + linkType: hard + "cli-cursor@npm:^3.1.0": version: 3.1.0 resolution: "cli-cursor@npm:3.1.0" @@ -12524,13 +13213,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:3.0.2": - version: 3.0.2 - resolution: "commander@npm:3.0.2" - checksum: f42053569f5954498246783465b39139917a51284bf3361574c9f731fea27a4bd6452dbb1755cc2d923c7b47dfea67930037c7b7e862288f2c397cec9a74da87 - languageName: node - linkType: hard - "commander@npm:^10.0.0": version: 10.0.1 resolution: "commander@npm:10.0.1" @@ -12559,7 +13241,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^8.3.0": +"commander@npm:^8.1.0, commander@npm:^8.3.0": version: 8.3.0 resolution: "commander@npm:8.3.0" checksum: 6b7b5d334483ce24bd73c5dac2eab901a7dbb25fd983ea24a1eeac6e7166bb1967f641546e8abf1920afbde86a45fbfe5812fbc69d0dc451bb45ca416a12a3a3 @@ -12606,6 +13288,13 @@ __metadata: languageName: node linkType: hard +"compare-versions@npm:^6.0.0": + version: 6.1.1 + resolution: "compare-versions@npm:6.1.1" + checksum: 9325c0fadfba81afa0ec17e6fc2ef823ba785c693089698b8d9374e5460509f1916a88591644d4cb4045c9a58e47fafbcc0724fe8bf446d2a875a3d6eeddf165 + languageName: node + linkType: hard + "compressible@npm:~2.0.16": version: 2.0.18 resolution: "compressible@npm:2.0.18" @@ -13216,6 +13905,30 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^6.0.5": + version: 6.0.6 + resolution: "cross-spawn@npm:6.0.6" + 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: 7abf6137b23293103a22bfeaf320f2d63faae70d97ddb4b58597237501d2efdd84cdc69a30246977e0c5f68216593894d41a7f122915dd4edf448db14c74171b + languageName: node + linkType: hard + +"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: 0d52657d7ae36eb130999dffff1168ec348687b48dd38e2ff59992ed916c88d328cf1d07ff4a4a10bc78de5e1c23f04b306d569e42f7a2293915c081e4dfee86 + languageName: node + linkType: hard + "crypt@npm:>= 0.0.1": version: 0.0.2 resolution: "crypt@npm:0.0.2" @@ -13603,6 +14316,13 @@ __metadata: languageName: node linkType: hard +"dataloader@npm:^1.4.0": + version: 1.4.0 + resolution: "dataloader@npm:1.4.0" + checksum: 8dc2181f7fc243f657aa97b5aa51b9e0da88dee9a59a689bab50d4bac826c27ae0457db8d9a5d59559d636f6b997f419303ccfde595cc26191f37ab9c792fe01 + languageName: node + linkType: hard + "dataloader@npm:^2.2.2": version: 2.2.2 resolution: "dataloader@npm:2.2.2" @@ -13670,7 +14390,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:4.3.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, debug@npm:4.3.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.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -14349,6 +15069,13 @@ __metadata: languageName: node linkType: hard +"dotenv@npm:^8.1.0": + version: 8.6.0 + resolution: "dotenv@npm:8.6.0" + checksum: 31d7b5c010cebb80046ba6853d703f9573369b00b15129536494f04b0af4ea0060ce8646e3af58b455af2f6f1237879dd261a5831656410ec92561ae1ea44508 + languageName: node + linkType: hard + "dset@npm:^3.1.2": version: 3.1.3 resolution: "dset@npm:3.1.3" @@ -14457,7 +15184,7 @@ __metadata: languageName: node linkType: hard -"elliptic@npm:6.5.4, elliptic@npm:^6.5.2, elliptic@npm:^6.5.4": +"elliptic@npm:6.5.4, elliptic@npm:^6.5.4": version: 6.5.4 resolution: "elliptic@npm:6.5.4" dependencies: @@ -14615,7 +15342,7 @@ __metadata: languageName: node linkType: hard -"enquirer@npm:^2.3.0, enquirer@npm:^2.3.6": +"enquirer@npm:^2.3.0, enquirer@npm:^2.3.6, enquirer@npm:^2.4.1": version: 2.4.1 resolution: "enquirer@npm:2.4.1" dependencies: @@ -15733,7 +16460,7 @@ __metadata: languageName: node linkType: hard -"ethereum-cryptography@npm:0.1.3, ethereum-cryptography@npm:^0.1.3": +"ethereum-cryptography@npm:^0.1.3": version: 0.1.3 resolution: "ethereum-cryptography@npm:0.1.3" dependencies: @@ -15780,32 +16507,19 @@ __metadata: languageName: node linkType: hard -"ethereumjs-abi@npm:^0.6.8": - 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: d4633ca30048b53c0f900ba5d7d6013ca228822055fbd93f975befc41f5c3054e0fffc27562d78050f164170e546af66c20e9ca1d35e67ea861df07d59a65a91 - languageName: node - linkType: hard - -"ethereumjs-util@npm:^6.0.0, ethereumjs-util@npm:^6.2.1": - version: 6.2.1 - resolution: "ethereumjs-util@npm:6.2.1" +"ethereum-cryptography@npm:^2.2.1": + version: 2.2.1 + resolution: "ethereum-cryptography@npm:2.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: dedc8a623e21d1864b09c47f28851fc0fca6233cdefa4755a308507822ce75c893bbb2c3ba422109d1247986ec757941718f06574437e41b0d68604108b03fd0 + "@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: ab123bbfe843500ac2d645ce9edc4bc814962ffb598db6bf8bf01fbecac656e6c81ff4cf2472f1734844bbcbad2bf658d8b699cb7248d768e0f06ae13ecf43b8 languageName: node linkType: hard -"ethereumjs-util@npm:^7.1.4": +"ethereumjs-util@npm:^7.0.3, ethereumjs-util@npm:^7.1.4": version: 7.1.5 resolution: "ethereumjs-util@npm:7.1.5" dependencies: @@ -15818,7 +16532,7 @@ __metadata: languageName: node linkType: hard -"ethers@npm:^5.7.0, ethers@npm:^5.7.1, ethers@npm:^5.7.2": +"ethers@npm:^5.7.0, ethers@npm:^5.7.2, ethers@npm:~5.7.0": version: 5.7.2 resolution: "ethers@npm:5.7.2" dependencies: @@ -15856,18 +16570,18 @@ __metadata: languageName: node linkType: hard -"ethers@npm:^6.10.0": - version: 6.10.0 - resolution: "ethers@npm:6.10.0" +"ethers@npm:^6.13.6": + version: 6.13.6 + resolution: "ethers@npm:6.13.6" dependencies: - "@adraffy/ens-normalize": "npm:1.10.0" + "@adraffy/ens-normalize": "npm:1.10.1" "@noble/curves": "npm:1.2.0" "@noble/hashes": "npm:1.3.2" - "@types/node": "npm:18.15.13" + "@types/node": "npm:22.7.5" aes-js: "npm:4.0.0-beta.5" - tslib: "npm:2.4.0" - ws: "npm:8.5.0" - checksum: 04fdd3f76ea93a8b45b2fe4d9c8e2bd0d688823faba672897dd19cc3303c202a166902fe6058004562f13aaecf9f77a9f70ff113f995e94107efef2457b016dd + tslib: "npm:2.7.0" + ws: "npm:8.17.1" + checksum: 271ea38276d28b0f8ed0a52c3c5c6f0efc3b2a9e17b29454ec3248d248c0b4793781d91e5fbf784781906afa30ec5b8bd670a9b0e71af271b1d3bcc0177e63df languageName: node linkType: hard @@ -15881,16 +16595,6 @@ __metadata: languageName: node linkType: hard -"ethjs-util@npm:0.1.6, 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: 02e1d37f743a78742651a11be35461dfe8ed653f113d630435aada8036e1e199691c2cfffbbf1e800bfdeb14bb34c7ed69fab5d3c727058c1daf3effc6bf6f69 - languageName: node - linkType: hard - "event-target-shim@npm:^5.0.0": version: 5.0.1 resolution: "event-target-shim@npm:5.0.1" @@ -16084,6 +16788,13 @@ __metadata: languageName: node linkType: hard +"extendable-error@npm:^0.1.5": + version: 0.1.7 + resolution: "extendable-error@npm:0.1.7" + checksum: 80478be7429a1675d2085f701239796bab3230ed6f2fb1b138fbabec24bea6516b7c5ceb6e9c209efcc9c089948d93715703845653535f8e8a49655066a9255e + languageName: node + linkType: hard + "extension-port-stream@npm:^3.0.0": version: 3.0.0 resolution: "extension-port-stream@npm:3.0.0" @@ -16324,6 +17035,18 @@ __metadata: languageName: node linkType: hard +"fdir@npm:^6.4.3": + version: 6.4.3 + resolution: "fdir@npm:6.4.3" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 8e6d20f4590dc168de1374a9cadaa37e20ca6e0b822aa247c230e7ea1d9e9674a68cd816146435e4ecc98f9285091462ab7e5e56eebc9510931a1794e4db68b2 + languageName: node + linkType: hard + "fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": version: 3.2.0 resolution: "fetch-blob@npm:3.2.0" @@ -16450,7 +17173,7 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^2.0.0, find-up@npm:^2.1.0": +"find-up@npm:^2.0.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" dependencies: @@ -16488,6 +17211,15 @@ __metadata: 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: 7fa7942849eef4d5385ee96a0a9a5a9afe885836fd72ed6a4280312a38690afea275e7d09b343fe97daf0412d833f8ac4b78c17fc756386d9ebebf0759d707a7 + languageName: node + linkType: hard + "flat-cache@npm:^3.0.4": version: 3.2.0 resolution: "flat-cache@npm:3.2.0" @@ -16672,19 +17404,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^0.30.0": - version: 0.30.0 - resolution: "fs-extra@npm:0.30.0" - dependencies: - graceful-fs: "npm:^4.1.2" - jsonfile: "npm:^2.1.0" - klaw: "npm:^1.0.0" - path-is-absolute: "npm:^1.0.0" - rimraf: "npm:^2.2.8" - checksum: bfdd95f598a36a3f24b02db840c1dc54facba2793dea06355c75a6ed823f92e4033589e287f2b91a02a9980c3fb44099e3f00fce5230f045c87431f69be26084 - languageName: node - linkType: hard - "fs-extra@npm:^10.0.0, fs-extra@npm:^10.1.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" @@ -16817,13 +17536,6 @@ __metadata: languageName: node linkType: hard -"functional-red-black-tree@npm:^1.0.1": - version: 1.0.1 - resolution: "functional-red-black-tree@npm:1.0.1" - checksum: debe73e92204341d1fa5f89614e44284d3add26dee660722978d8c50829170f87d1c74768f68c251d215ae461c11db7bac13101c77f4146ff051da75466f7a12 - languageName: node - linkType: hard - "functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" @@ -17219,83 +17931,43 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.3, globby@npm:^11.0.4, globby@npm:^11.1.0": +"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: 288e95e310227bbe037076ea81b7c2598ccbc3122d87abc6dab39e1eec309aa14f0e366a98cdc45237ffcfcbad3db597778c0068217dcb1950fef6249104e1b1 - languageName: node - linkType: hard - -"globby@npm:^13.1.3": - version: 13.2.2 - resolution: "globby@npm:13.2.2" - dependencies: - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.3.0" - ignore: "npm:^5.2.4" - merge2: "npm:^1.4.1" - slash: "npm:^4.0.0" - checksum: 4494a9d2162a7e4d327988b26be66d8eab87d7f59a83219e74b065e2c3ced23698f68fb10482bf9337133819281803fb886d6ae06afbb2affa743623eb0b1949 - languageName: node - linkType: hard - -"globrex@npm:^0.1.2": - version: 0.1.2 - resolution: "globrex@npm:0.1.2" - checksum: 81ce62ee6f800d823d6b7da7687f841676d60ee8f51f934ddd862e4057316d26665c4edc0358d4340a923ac00a514f8b67c787e28fe693aae16350f4e60d55e9 - languageName: node - linkType: hard - -"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: 931f08d76430290679c8cdda98ca689d6df7a6639c36f98078b77dbe882aa9b728a6a14b5b30205c48d02efbb5d872ebf3751b129e0c0b9c88f6f1a10da15901 + 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: 288e95e310227bbe037076ea81b7c2598ccbc3122d87abc6dab39e1eec309aa14f0e366a98cdc45237ffcfcbad3db597778c0068217dcb1950fef6249104e1b1 languageName: node linkType: hard -"gluegun@npm:^5.1.2": - version: 5.1.6 - resolution: "gluegun@npm:5.1.6" +"globby@npm:^13.1.3": + version: 13.2.2 + resolution: "globby@npm:13.2.2" + dependencies: + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.3.0" + ignore: "npm:^5.2.4" + merge2: "npm:^1.4.1" + slash: "npm:^4.0.0" + checksum: 4494a9d2162a7e4d327988b26be66d8eab87d7f59a83219e74b065e2c3ced23698f68fb10482bf9337133819281803fb886d6ae06afbb2affa743623eb0b1949 + languageName: node + linkType: hard + +"globrex@npm:^0.1.2": + version: 0.1.2 + resolution: "globrex@npm:0.1.2" + checksum: 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" @@ -17329,7 +18001,7 @@ __metadata: yargs-parser: "npm:^21.0.0" bin: gluegun: bin/gluegun - checksum: b6a9938307611e200b799158fca3d3631c194dc0d74e708211d21d894550a8de55ce4d15711d8ac746ea8d4a5538231e96abd1e0bac299f5c0fbd09a0763c433 + checksum: 931f08d76430290679c8cdda98ca689d6df7a6639c36f98078b77dbe882aa9b728a6a14b5b30205c48d02efbb5d872ebf3751b129e0c0b9c88f6f1a10da15901 languageName: node linkType: hard @@ -17349,7 +18021,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"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.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: bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 @@ -17511,20 +18183,20 @@ __metadata: languageName: node linkType: hard -"hardhat-deploy-ethers@npm:^0.4.1": - version: 0.4.1 - resolution: "hardhat-deploy-ethers@npm:0.4.1" +"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.11.34 - checksum: e52f6c8e6c800c0676f8e7ccd465be06c855bce1d8d20ab733261ec832c319f95f688e09a9dcd2eee41ed53e1a3a668295b57bf10c46166a27c7369f572c6f5c + hardhat-deploy: ^0.12.0 + checksum: 22efb24ba44ae3c1d20c09781cf7ec72b4dfd6f069eb00ce1a461fe6cf8523260050d6572d26ad718279161b74b7205e4307aeb20e45f6cbbbdccaf7b3b8c10b languageName: node linkType: hard -"hardhat-deploy@npm:^0.11.45": - version: 0.11.45 - resolution: "hardhat-deploy@npm:0.11.45" +"hardhat-deploy@npm:^1.0.2": + version: 1.0.2 + resolution: "hardhat-deploy@npm:1.0.2" dependencies: "@ethersproject/abi": "npm:^5.7.0" "@ethersproject/abstract-signer": "npm:^5.7.0" @@ -17549,8 +18221,8 @@ __metadata: match-all: "npm:^1.2.6" murmur-128: "npm:^0.2.1" qs: "npm:^6.9.4" - zksync-web3: "npm:^0.14.3" - checksum: 84acb88da991805b4adb8707450884af6be632b359b209ddf13afb71acb0abfb53bfad02ca5b1b00f0f1e437969f197c00c36d80ce6b1d33f7fdc86ed5fe7255 + zksync-ethers: "npm:^5.0.0" + checksum: 76882b56fa6103ebe080077f00eb75a04914c7c2f931b2ecec02922d5105a01d3cd1dec3238b4050c9be88f2e45034035d208f4aa2ab7789cccbba414feb972d languageName: node linkType: hard @@ -17571,16 +18243,16 @@ __metadata: languageName: node linkType: hard -"hardhat-gas-reporter@npm:^1.0.8": - version: 1.0.9 - resolution: "hardhat-gas-reporter@npm:1.0.9" +"hardhat-gas-reporter@npm:^1.0.10": + version: 1.0.10 + resolution: "hardhat-gas-reporter@npm:1.0.10" dependencies: array-uniq: "npm:1.0.3" eth-gas-reporter: "npm:^0.2.25" sha1: "npm:^1.1.1" peerDependencies: hardhat: ^2.0.2 - checksum: c18af3b6ca9e26480679703453c769c10cc7fe290b6dfdd673010112b22be1bd5872ce74c02b71275cc5e0f99fc3c47fadec912bababe7564393191aab6a3f64 + checksum: ad6df4f87ebddea967d02243a728f824cd02a486bc400a0b5fb0bfc55b24eb08d445d4c2650e8d53fa622050f6f4a971e954179bb2ac02f2bbaba97f4464d33f languageName: node linkType: hard @@ -17595,22 +18267,13 @@ __metadata: languageName: node linkType: hard -"hardhat@npm:^2.19.0": - version: 2.19.4 - resolution: "hardhat@npm:2.19.4" +"hardhat@npm:^2.23.0": + version: 2.23.0 + resolution: "hardhat@npm:2.23.0" dependencies: + "@ethereumjs/util": "npm:^9.1.0" "@ethersproject/abi": "npm:^5.1.2" - "@metamask/eth-sig-util": "npm:^4.0.0" - "@nomicfoundation/ethereumjs-block": "npm:5.0.2" - "@nomicfoundation/ethereumjs-blockchain": "npm:7.0.2" - "@nomicfoundation/ethereumjs-common": "npm:4.0.2" - "@nomicfoundation/ethereumjs-evm": "npm:2.0.2" - "@nomicfoundation/ethereumjs-rlp": "npm:5.0.2" - "@nomicfoundation/ethereumjs-statemanager": "npm:2.0.2" - "@nomicfoundation/ethereumjs-trie": "npm:6.0.2" - "@nomicfoundation/ethereumjs-tx": "npm:5.0.2" - "@nomicfoundation/ethereumjs-util": "npm:9.0.2" - "@nomicfoundation/ethereumjs-vm": "npm:7.0.2" + "@nomicfoundation/edr": "npm:^0.10.0" "@nomicfoundation/solidity-analyzer": "npm:^0.1.0" "@sentry/node": "npm:^5.18.1" "@types/bn.js": "npm:^5.1.0" @@ -17618,31 +18281,33 @@ __metadata: adm-zip: "npm:^0.4.16" aggregate-error: "npm:^3.0.0" ansi-escapes: "npm:^4.3.0" - chalk: "npm:^2.4.2" - chokidar: "npm:^3.4.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" - ethereumjs-abi: "npm:^0.6.8" - find-up: "npm:^2.1.0" + find-up: "npm:^5.0.0" fp-ts: "npm:1.19.3" fs-extra: "npm:^7.0.1" - glob: "npm:7.2.0" 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.7.3" + 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" @@ -17657,7 +18322,7 @@ __metadata: optional: true bin: hardhat: internal/cli/bootstrap.js - checksum: f8548a32c6d81af40a0377d4e7cfffbdae22c1c5ac1d8f106ec14d98d219ce8c8d67799abbd609f69e9593a43820c98c4fc8bc1273d995d43692f272b54da58c + checksum: 1feb1a8ed62e237b0197ad64217c2cc5dade9875adc9ec3ccb859141801173729a5b2ee0a8f5d1dcb8fca20bd38b53b819020f93c80af8d441648cecf8a32539 languageName: node linkType: hard @@ -18138,6 +18803,13 @@ __metadata: languageName: node linkType: hard +"human-id@npm:^1.0.2": + version: 1.0.2 + resolution: "human-id@npm:1.0.2" + checksum: 16b116ef68c3fc3f65c90b32a338abd0f9ee656a6257baa92c4d7e1154c66469bb6bd4ee840018c35e972aa817f5ae3f0cbabffb78f2ac90aaf02d88a299a371 + languageName: node + linkType: hard + "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" @@ -18578,7 +19250,7 @@ __metadata: languageName: node linkType: hard -"is-buffer@npm:^2.0.0, is-buffer@npm:^2.0.5": +"is-buffer@npm:^2.0.0": version: 2.0.5 resolution: "is-buffer@npm:2.0.5" checksum: 3261a8b858edcc6c9566ba1694bf829e126faa88911d1c0a747ea658c5d81b14b6955e3a702d59dabadd58fdd440c01f321aa71d6547105fd21d03f94d0597e7 @@ -18592,6 +19264,17 @@ __metadata: 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: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 + languageName: node + linkType: hard + "is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.5.0": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" @@ -18927,6 +19610,15 @@ __metadata: 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: 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" @@ -19019,14 +19711,14 @@ __metadata: languageName: node linkType: hard -"is-windows@npm:^1.0.1": +"is-windows@npm:^1.0.0, is-windows@npm:^1.0.1": version: 1.0.2 resolution: "is-windows@npm:1.0.2" checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 languageName: node linkType: hard -"is-wsl@npm:^2.2.0": +"is-wsl@npm:^2.1.1, is-wsl@npm:^2.2.0": version: 2.2.0 resolution: "is-wsl@npm:2.2.0" dependencies: @@ -19965,13 +20657,6 @@ __metadata: languageName: node linkType: hard -"js-sdsl@npm:^4.1.4": - version: 4.4.2 - resolution: "js-sdsl@npm:4.4.2" - checksum: 806ab7aea38c15c323c6993b65abfad559d35de7d41ad1e2bf21498f1d4961ef863ac14cecbe667be3ada565dafe7a701096a6f49a275c5190eb1a1732430226 - 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" @@ -19986,7 +20671,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:3.x, js-yaml@npm:^3.13.1": +"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: @@ -20166,6 +20851,13 @@ __metadata: languageName: node linkType: hard +"json-stream-stringify@npm:^3.1.4": + version: 3.1.6 + resolution: "json-stream-stringify@npm:3.1.6" + checksum: d52919465b4a31d7a0b5720ca0e6268f757fc1515486d5c77cfb75f7a9e4b58e13a73a2f811d6d322b9a101750d3961b48a68ee9d9b299ac3846ef2921a62a81 + languageName: node + linkType: hard + "json-stringify-safe@npm:^5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" @@ -20219,18 +20911,6 @@ __metadata: languageName: node linkType: hard -"jsonfile@npm:^2.1.0": - version: 2.4.0 - resolution: "jsonfile@npm:2.4.0" - dependencies: - graceful-fs: "npm:^4.1.6" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 517656e0a7c4eda5a90341dd0ec9e9b7590d0c77d66d8aad0162615dfc7c5f219c82565b927cc4cc774ca93e484d118a274ef0def74279a3d8afb4ff2f4e4800 - languageName: node - linkType: hard - "jsonfile@npm:^4.0.0": version: 4.0.0 resolution: "jsonfile@npm:4.0.0" @@ -20349,15 +21029,12 @@ __metadata: languageName: node linkType: hard -"klaw@npm:^1.0.0": - version: 1.3.1 - resolution: "klaw@npm:1.3.1" +"klaw-sync@npm:^6.0.0": + version: 6.0.0 + resolution: "klaw-sync@npm:6.0.0" dependencies: - graceful-fs: "npm:^4.1.9" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 68b8ccb89f222dca60805df2b0e0fa0b3e4203ca1928b8facc0afac660e3e362809fe00f868ac877f495ebf89e376bb9ac9275508a132b5573e7382bed3ab006 + graceful-fs: "npm:^4.1.11" + checksum: 0da397f8961313c3ef8f79fb63af9002cde5a8fb2aeb1a37351feff0dd6006129c790400c3f5c3b4e757bedcabb13d21ec0a5eaef5a593d59515d4f2c291e475 languageName: node linkType: hard @@ -20449,33 +21126,6 @@ __metadata: languageName: node linkType: hard -"level-supports@npm:^4.0.0": - version: 4.0.1 - resolution: "level-supports@npm:4.0.1" - checksum: e2f177af813a25af29d15406a14240e2e10e5efb1c35b03643c885ac5931af760b9337826506b6395f98cf6b1e68ba294bfc345a248a1ae3f9c69e08e81824b2 - languageName: node - linkType: hard - -"level-transcoder@npm:^1.0.1": - version: 1.0.1 - resolution: "level-transcoder@npm:1.0.1" - dependencies: - buffer: "npm:^6.0.3" - module-error: "npm:^1.0.1" - checksum: 2fb41a1d8037fc279f851ead8cdc3852b738f1f935ac2895183cd606aae3e57008e085c7c2bd2b2d43cfd057333108cfaed604092e173ac2abdf5ab1b8333f9e - languageName: node - linkType: hard - -"level@npm:^8.0.0": - version: 8.0.0 - resolution: "level@npm:8.0.0" - dependencies: - browser-level: "npm:^1.0.1" - classic-level: "npm:^1.2.0" - checksum: 1e7df97fe80fb158c8c1d6feeb651ee1381fd8e45af773b2bb02d3dd020fefd4f48a69d260b2d0ce9c4245ee9d8d40b8a9c49275b0b1ef6e1d4158feb5c39081 - languageName: node - linkType: hard - "leven@npm:^3.1.0": version: 3.1.0 resolution: "leven@npm:3.1.0" @@ -21291,13 +21941,6 @@ __metadata: languageName: node linkType: hard -"mcl-wasm@npm:^0.7.1": - version: 0.7.9 - resolution: "mcl-wasm@npm:0.7.9" - checksum: eb689cf0e2422ef7b98e8b040ed601821aea839718c876cd734e9148ca7013adf1c869bbc9495aac351e645d314ec3bd3d3612c91f60c499c5aea8d3dd2a7e38 - languageName: node - linkType: hard - "md5.js@npm:^1.3.4": version: 1.3.5 resolution: "md5.js@npm:1.3.5" @@ -21395,17 +22038,6 @@ __metadata: languageName: node linkType: hard -"memory-level@npm:^1.0.0": - version: 1.0.0 - resolution: "memory-level@npm:1.0.0" - dependencies: - abstract-level: "npm:^1.0.0" - functional-red-black-tree: "npm:^1.0.1" - module-error: "npm:^1.0.1" - checksum: e3293d8c67ebc0aa4b29982c5f8e3d139c5b1b04b97fa3ae98f940f91c7bdfefec9ff189742943734ebb6c7efa85fed6a4d559407b2d5751106b24cac17a23a6 - languageName: node - linkType: hard - "memorystream@npm:^0.3.1": version: 0.3.1 resolution: "memorystream@npm:0.3.1" @@ -21502,6 +22134,17 @@ __metadata: 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: de9fb0262253c22f280dc6fae18b61950ac2bf0e086d9ca60e3dd150f64b922ca9073e7566ebfc71be773507f3979ebdccee8bc9bb1162697b7e0eeec1dbd691 + languageName: node + linkType: hard + "micro-ftch@npm:^0.3.1": version: 0.3.1 resolution: "micro-ftch@npm:0.3.1" @@ -21509,6 +22152,15 @@ __metadata: languageName: node linkType: hard +"micro-packed@npm:~0.7.2": + version: 0.7.2 + resolution: "micro-packed@npm:0.7.2" + dependencies: + "@scure/base": "npm:~1.2.2" + checksum: dfda401ff3ba196447cb8a4bdf4e280cb2ef681d1d69b49cc3dc4172337c56efb325ba0c89c5028fc0729880836283b66ba9eded0456c9603e332680cd486b2d + languageName: node + linkType: hard + "micromark-core-commonmark@npm:^1.0.1": version: 1.1.0 resolution: "micromark-core-commonmark@npm:1.1.0" @@ -21938,7 +22590,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": +"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: 908491b6cc15a6c440ba5b22780a0ba89b9810e1aea684e253e43c4e3b8d56ec1dcdd7ea96dde119c29df59c936cde16062159eae4225c691e19c70b432b6e6f @@ -22128,13 +22780,6 @@ __metadata: languageName: node linkType: hard -"module-error@npm:^1.0.1, module-error@npm:^1.0.2": - version: 1.0.2 - resolution: "module-error@npm:1.0.2" - checksum: 5d653e35bd55b3e95f8aee2cdac108082ea892e71b8f651be92cde43e4ee86abee4fa8bd7fc3fe5e68b63926d42f63c54cd17b87a560c31f18739295575a3962 - languageName: node - linkType: hard - "moment@npm:^2.30.1": version: 2.30.1 resolution: "moment@npm:2.30.1" @@ -22324,13 +22969,6 @@ __metadata: languageName: node linkType: hard -"napi-macros@npm:^2.2.2": - version: 2.2.2 - resolution: "napi-macros@npm:2.2.2" - checksum: 2cdb9c40ad4b424b14fbe5e13c5329559e2b511665acf41cdcda172fd2270202dc747a2d288b687c72bc70f654c797bc24a93adb67631128d62461588d7cc070 - languageName: node - linkType: hard - "napi-wasm@npm:^1.1.0": version: 1.1.0 resolution: "napi-wasm@npm:1.1.0" @@ -22375,6 +23013,13 @@ __metadata: languageName: node linkType: hard +"nice-try@npm:^1.0.4": + version: 1.0.5 + resolution: "nice-try@npm:1.0.5" + checksum: 0b4af3b5bb5d86c289f7a026303d192a7eb4417231fe47245c460baeabae7277bcd8fd9c728fb6bd62c30b3e15cd6620373e2cf33353b095d8b403d3e8a15aff + languageName: node + linkType: hard + "no-case@npm:^3.0.4": version: 3.0.4 resolution: "no-case@npm:3.0.4" @@ -22426,7 +23071,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7": +"node-fetch@npm:^2.5.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -22545,7 +23190,7 @@ __metadata: languageName: node linkType: hard -"nofilter@npm:^3.1.0": +"nofilter@npm:^3.0.2, nofilter@npm:^3.1.0": version: 3.1.0 resolution: "nofilter@npm:3.1.0" checksum: f63d87231dfda4b783db17d75b15aac948f78e65f4f1043096ef441147f6667ff74cd4b3f57ada5dbe240be282d3e9838558ac863a66cb04ef25fff7b2b4be4e @@ -22934,6 +23579,16 @@ __metadata: 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: 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" @@ -23043,6 +23698,13 @@ __metadata: languageName: node linkType: hard +"outdent@npm:^0.5.0": + version: 0.5.0 + resolution: "outdent@npm:0.5.0" + checksum: 7d94a7d93883afa32c99d84f33248b221f4eeeedbb571921fe0e5cf0bee32e64746c587e9606d98ec22762870c782d21dd4bc3a0edf442d347cb54aa107b198d + languageName: node + linkType: hard + "overlayscrollbars-react@npm:^0.5.3": version: 0.5.4 resolution: "overlayscrollbars-react@npm:0.5.4" @@ -23060,9 +23722,9 @@ __metadata: languageName: node linkType: hard -"ox@npm:0.6.7": - version: 0.6.7 - resolution: "ox@npm:0.6.7" +"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" @@ -23076,7 +23738,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 442fb31e1afb68922bf942025930d8cd6d8c677696e9a6de308008b3608669f22127cadbc0f77181e012d23d7b74318e5f85e63b06b16eecbc887d7fac32a6dc + checksum: 11ad9076b594dd424cd89d9763d4701e59e7ffc0733973947c82a14255a00a53483712e62fa9bbacd39efd35c6739bddb7728ef2211b47530f22036ab77cde69 languageName: node linkType: hard @@ -23104,6 +23766,15 @@ __metadata: 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: 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" @@ -23185,6 +23856,13 @@ __metadata: languageName: node linkType: hard +"p-map@npm:^2.0.0": + version: 2.1.0 + resolution: "p-map@npm:2.1.0" + checksum: 9e3ad3c9f6d75a5b5661bcad78c91f3a63849189737cd75e4f1225bf9ac205194e5c44aac2ef6f09562b1facdb9bd1425584d7ac375bfaa17b3f1a142dab936d + languageName: node + linkType: hard + "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" @@ -23242,6 +23920,15 @@ __metadata: languageName: node linkType: hard +"package-manager-detector@npm:^0.2.0": + version: 0.2.11 + resolution: "package-manager-detector@npm:0.2.11" + dependencies: + quansync: "npm:^0.2.7" + checksum: 2c1a8da0e5895f0be06a8e1f4b4336fb78a19167ca3932dbaeca7260f948e67cf53b32585a13f8108341e7a468b38b4f2a8afc7b11691cb2d856ecd759d570fb + languageName: node + linkType: hard + "pako@npm:~1.0.5": version: 1.0.11 resolution: "pako@npm:1.0.11" @@ -23360,6 +24047,30 @@ __metadata: 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: e15b3848f008da2cc659abd6d84dfeab6ed25a999ba25692071c13409f198dad28b6e451ecfebc2139a0847ad8e608575d6724bcc887c56169df8a733b849e79 + languageName: node + linkType: hard + "path-browserify@npm:^1.0.1": version: 1.0.1 resolution: "path-browserify@npm:1.0.1" @@ -23405,6 +24116,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^2.0.1": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: 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" @@ -23562,6 +24280,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.1.0": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 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" @@ -23576,6 +24301,13 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: ce617b8da36797d09c0baacb96ca8a44460452c89362d7cb8f70ca46b4158ba8bc3606912de7c818eb4a939f7f9015cef3c766ec8a0c6bfc725fdc078e39c717 + languageName: node + linkType: hard + "pidtree@npm:0.6.0": version: 0.6.0 resolution: "pidtree@npm:0.6.0" @@ -24701,7 +25433,7 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^1.18.2 || ^2.0.0, prettier@npm:^2.3.1, prettier@npm:^2.8.1, prettier@npm:^2.8.3, prettier@npm:^2.8.8": +"prettier@npm:^1.18.2 || ^2.0.0, prettier@npm:^2.3.1, prettier@npm:^2.7.1, prettier@npm:^2.8.1, prettier@npm:^2.8.3, prettier@npm:^2.8.8": version: 2.8.8 resolution: "prettier@npm:2.8.8" bin: @@ -24850,6 +25582,17 @@ __metadata: 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: 000a4875f543f591872b36ca94531af8a6463ddb0174f41c0b004d19e231d7445268b422ff1ea595e43d238655c702250cd3d27f408e7b9d97b56f1533ba26bf + languageName: node + linkType: hard + "property-information@npm:^6.0.0": version: 6.4.1 resolution: "property-information@npm:6.4.1" @@ -25022,6 +25765,13 @@ __metadata: languageName: node linkType: hard +"quansync@npm:^0.2.7": + version: 0.2.10 + resolution: "quansync@npm:0.2.10" + checksum: b54d955de867e104025f2666d52b2b67befe4e0f184a96acc9adcbdc572e46dce49c69d1e79f99413beae8a974a576383806a05f85f9a826865dc589ee1bcaf2 + languageName: node + linkType: hard + "query-string@npm:7.1.3": version: 7.1.3 resolution: "query-string@npm:7.1.3" @@ -25048,7 +25798,7 @@ __metadata: languageName: node linkType: hard -"queue-microtask@npm:^1.2.2, queue-microtask@npm:^1.2.3": +"queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" checksum: 72900df0616e473e824202113c3df6abae59150dfb73ed13273503127235320e9c8ca4aaaaccfd58cf417c6ca92a6e68ee9a5c3182886ae949a768639b388a7b @@ -25674,6 +26424,18 @@ __metadata: 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: 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" @@ -26015,7 +26777,7 @@ __metadata: languageName: node linkType: hard -"require-from-string@npm:^2.0.0, require-from-string@npm:^2.0.2": +"require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" checksum: 839a3a890102a658f4cb3e7b2aa13a1f80a3a976b512020c3d1efc418491c48a886b6e481ea56afc6c4cb5eef678f23b2a4e70575e7534eccadf5e30ed2e56eb @@ -26242,7 +27004,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^2.2.8, rimraf@npm:^2.6.3": +"rimraf@npm:^2.6.3": version: 2.7.1 resolution: "rimraf@npm:2.7.1" dependencies: @@ -26274,7 +27036,7 @@ __metadata: languageName: node linkType: hard -"rlp@npm:^2.2.3, rlp@npm:^2.2.4": +"rlp@npm:^2.2.4": version: 2.2.7 resolution: "rlp@npm:2.2.7" dependencies: @@ -26399,15 +27161,6 @@ __metadata: languageName: node linkType: hard -"run-parallel-limit@npm:^1.1.0": - version: 1.1.0 - resolution: "run-parallel-limit@npm:1.1.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 672c3b87e7f939c684b9965222b361421db0930223ed1e43ebf0e7e48ccc1a022ea4de080bef4d5468434e2577c33b7681e3f03b7593fdc49ad250a55381123c - languageName: node - linkType: hard - "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -26417,13 +27170,6 @@ __metadata: languageName: node linkType: hard -"rustbn.js@npm:~0.2.0": - version: 0.2.0 - resolution: "rustbn.js@npm:0.2.0" - checksum: 2d7d09f6bea2b5fb05142724f5cfc65c8d96b6e57a29874060733d041789aabbd236617c05d8569a43a2997eea850b4323527e92368c46d04a671ef0b2319fe9 - languageName: node - linkType: hard - "rxjs@npm:^7.5.5": version: 7.8.1 resolution: "rxjs@npm:7.8.1" @@ -26703,7 +27449,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0": +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0, semver@npm:^5.6.0": version: 5.7.2 resolution: "semver@npm:5.7.2" bin: @@ -26958,6 +27704,15 @@ __metadata: 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: 9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -26967,6 +27722,13 @@ __metadata: languageName: node linkType: hard +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 + languageName: node + linkType: hard + "shebang-regex@npm:^3.0.0": version: 3.0.0 resolution: "shebang-regex@npm:3.0.0" @@ -27090,6 +27852,13 @@ __metadata: languageName: node linkType: hard +"slash@npm:^2.0.0": + version: 2.0.0 + resolution: "slash@npm:2.0.0" + checksum: 512d4350735375bd11647233cb0e2f93beca6f53441015eea241fe784d8068281c3987fbaa93e7ef1c38df68d9c60013045c92837423c69115297d6169aa85e6 + languageName: node + linkType: hard + "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -27225,22 +27994,20 @@ __metadata: languageName: node linkType: hard -"solc@npm:0.7.3": - version: 0.7.3 - resolution: "solc@npm:0.7.3" +"solc@npm:0.8.26": + version: 0.8.26 + resolution: "solc@npm:0.8.26" dependencies: command-exists: "npm:^1.2.8" - commander: "npm:3.0.2" + commander: "npm:^8.1.0" follow-redirects: "npm:^1.12.1" - fs-extra: "npm:^0.30.0" js-sha3: "npm:0.8.0" memorystream: "npm:^0.3.1" - require-from-string: "npm:^2.0.0" semver: "npm:^5.5.0" tmp: "npm:0.0.33" bin: - solcjs: solcjs - checksum: 68bb783765d1aacf6ebe151ddbffff4c17f679046f2f83a2abae99c57cc0e7dbbcebd62b31861892df18fde272697c37c7a7518f1a9b1219de80217f0c780f0b + solcjs: solc.js + checksum: 30ef9c2687f727eb5bdd685c77b1a0b354e7d6ba7a080cfcdce5a89f25a1399ff7949fecef47768088d825588da230da0044b46f056fc36f3959c0e3d3c9a82b languageName: node linkType: hard @@ -27275,6 +28042,13 @@ __metadata: languageName: node linkType: hard +"solidity-ast@npm:^0.4.60": + version: 0.4.60 + resolution: "solidity-ast@npm:0.4.60" + checksum: 1811d4f5c3b767875819127a9eed125700840124d4d958a09f77cca33f224b4d075567344e366d12569fc6a1974798a30359fb817abf7cbaf320fbd7891e95bd + languageName: node + linkType: hard + "solidity-comments-extractor@npm:^0.0.8": version: 0.0.8 resolution: "solidity-comments-extractor@npm:0.0.8" @@ -27429,6 +28203,16 @@ __metadata: 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: 47d88a7f1e5691e13e435eddc3d34123c2f7746e2853e91bfac5ea7c6e3bb4b1d1995223b25f7a8745871510d92f63ecd3c9fa02aa2896ac0c79fb618eb08bbe + languageName: node + linkType: hard + "spdx-correct@npm:^3.0.0": version: 3.2.0 resolution: "spdx-correct@npm:3.2.0" @@ -27769,7 +28553,7 @@ __metadata: 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.3": +"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: @@ -28368,6 +29152,13 @@ __metadata: languageName: node linkType: hard +"term-size@npm:^2.1.0": + version: 2.2.1 + resolution: "term-size@npm:2.2.1" + checksum: f96aca2d4139c91e3359f5949ffb86f0a58f8c254ab7fe4a64b65126974939c782db6aaa91bf51a56d0344e505e22f9a0186f2f689e23ac9382b54606603c537 + languageName: node + linkType: hard + "terminal-link@npm:^2.0.0": version: 2.1.1 resolution: "terminal-link@npm:2.1.1" @@ -28564,6 +29355,16 @@ __metadata: languageName: node linkType: hard +"tinyglobby@npm:^0.2.6": + version: 0.2.12 + resolution: "tinyglobby@npm:0.2.12" + dependencies: + fdir: "npm:^6.4.3" + picomatch: "npm:^4.0.2" + checksum: 4ad28701fa9118b32ef0e27f409e0a6c5741e8b02286d50425c1f6f71e6d6c6ded9dd5bbbbb714784b08623c4ec4d150151f1d3d996cfabe0495f908ab4f7002 + languageName: node + linkType: hard + "title-case@npm:^3.0.3": version: 3.0.3 resolution: "title-case@npm:3.0.3" @@ -28837,13 +29638,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.4.0": - version: 2.4.0 - resolution: "tslib@npm:2.4.0" - checksum: d8379e68b36caf082c1905ec25d17df8261e1d68ddc1abfd6c91158a064f6e4402039ae7c02cf4c81d12e3a2a2c7cd8ea2f57b233eb80136a2e3e7279daf2911 - languageName: node - linkType: hard - "tslib@npm:2.6.2, 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.1, tslib@npm:^2.6.2, tslib@npm:~2.6.0": version: 2.6.2 resolution: "tslib@npm:2.6.2" @@ -28851,6 +29645,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:2.7.0": + version: 2.7.0 + resolution: "tslib@npm:2.7.0" + checksum: 9a5b47ddac65874fa011c20ff76db69f97cf90c78cff5934799ab8894a5342db2d17b4e7613a087046bc1d133d21547ddff87ac558abeec31ffa929c88b7fce6 + languageName: node + linkType: hard + "tslib@npm:^2.6.0, tslib@npm:^2.6.3": version: 2.8.1 resolution: "tslib@npm:2.8.1" @@ -28892,20 +29693,6 @@ __metadata: languageName: node linkType: hard -"tweetnacl-util@npm:^0.15.1": - version: 0.15.1 - resolution: "tweetnacl-util@npm:0.15.1" - checksum: ae6aa8a52cdd21a95103a4cc10657d6a2040b36c7a6da7b9d3ab811c6750a2d5db77e8c36969e75fdee11f511aa2b91c552496c6e8e989b6e490e54aca2864fc - languageName: node - linkType: hard - -"tweetnacl@npm:^1.0.3": - version: 1.0.3 - resolution: "tweetnacl@npm:1.0.3" - checksum: ca122c2f86631f3c0f6d28efb44af2a301d4a557a62a3e2460286b08e97567b258c2212e4ad1cfa22bd6a57edcdc54ba76ebe946847450ab0999e6d48ccae332 - 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" @@ -28931,6 +29718,13 @@ __metadata: languageName: node linkType: hard +"type-detect@npm:^4.1.0": + version: 4.1.0 + resolution: "type-detect@npm:4.1.0" + checksum: e363bf0352427a79301f26a7795a27718624c49c576965076624eb5495d87515030b207217845f7018093adcbe169b2d119bb9b7f1a31a92bfbb1ab9639ca8dd + languageName: node + linkType: hard + "type-fest@npm:^0.16.0": version: 0.16.0 resolution: "type-fest@npm:0.16.0" @@ -28997,7 +29791,7 @@ __metadata: languageName: node linkType: hard -"typechain@npm:^8.3.0": +"typechain@npm:^8.3.2": version: 8.3.2 resolution: "typechain@npm:8.3.2" dependencies: @@ -29245,6 +30039,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~6.19.2": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: cf0b48ed4fc99baf56584afa91aaffa5010c268b8842f62e02f752df209e3dea138b372a60a963b3b2576ed932f32329ce7ddb9cb5f27a6c83040d8cd74b7a70 + languageName: node + linkType: hard + "undici@npm:7.2.3": version: 7.2.3 resolution: "undici@npm:7.2.3" @@ -29895,9 +30696,9 @@ __metadata: languageName: node linkType: hard -"viem@npm:^2.22.22": - version: 2.22.22 - resolution: "viem@npm:2.22.22" +"viem@npm:^2.24.1, viem@npm:^2.27.2": + version: 2.27.2 + resolution: "viem@npm:2.27.2" dependencies: "@noble/curves": "npm:1.8.1" "@noble/hashes": "npm:1.7.1" @@ -29905,14 +30706,14 @@ __metadata: "@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" + ox: "npm:0.6.9" + ws: "npm:8.18.1" peerDependencies: typescript: ">=5.0.4" peerDependenciesMeta: typescript: optional: true - checksum: 6dd22b5491a76ec459bb4adefddf47aab3e8b371e0f5dbf62644d33828f3eb7e34a25999c302fece7f2473fc692b064954b1af35ada7b7230eda4274aafe2b8a + checksum: c468c49969df005af85b2c68345db6f1f16d533e3488186a238699df378a3bce687deff4a7fc55cd2b0671e56a408ef5b2c1b5aa67df1a11668919c4f83bb23e languageName: node linkType: hard @@ -30630,7 +31431,7 @@ __metadata: languageName: node linkType: hard -"which@npm:^1.1.1, which@npm:^1.3.1": +"which@npm:^1.1.1, which@npm:^1.2.9, which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" dependencies: @@ -31018,18 +31819,18 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.5.0": - version: 8.5.0 - resolution: "ws@npm:8.5.0" +"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 + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - checksum: f0ee700970a0bf925b1ec213ca3691e84fb8b435a91461fe3caf52f58c6cec57c99ed5890fbf6978824c932641932019aafc55d864cad38ac32577496efd5d3a + checksum: 3f38e9594f2af5b6324138e86b74df7d77bbb8e310bf8188679dd80bac0d1f47e51536a1923ac3365f31f3d8b25ea0b03e4ade466aa8292a86cd5defca64b19b languageName: node linkType: hard @@ -31307,12 +32108,14 @@ __metadata: languageName: node linkType: hard -"zksync-web3@npm:^0.14.3": - version: 0.14.4 - resolution: "zksync-web3@npm:0.14.4" +"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: a1566a2a2ba34a3026680f3b4000ffa02593e02d9c73a4dd143bde929b5e39b09544d429bccad0479070670cfdad5f6836cb686c4b8d7954b4d930826be91c92 + ethers: ~5.7.0 + checksum: 826719e2e40731e1104cf8a0c16c758526de6ca9e907d0483eb5bd80b635f02e3cce012115b75d68976a8dd746d63d4f83d576cc3bddc18a02a49d2bc023347f languageName: node linkType: hard From 530bbb92f477e89d7e71c385c27e496dd3240dc3 Mon Sep 17 00:00:00 2001 From: jaybuidl Date: Thu, 17 Apr 2025 19:36:00 +0100 Subject: [PATCH 2/3] chore: contracts redeployed --- contracts/README.md | 6 +- .../arbitrumSepoliaDevnet/CurateFactory.json | 44 ++--- .../arbitrumSepoliaDevnet/CurateV2.json | 162 +++++++++--------- .../arbitrumSepoliaDevnet/CurateView.json | 30 ++-- contracts/scripts/setDisputeTemplate.ts | 2 +- templates/index.ts | 2 +- 6 files changed, 123 insertions(+), 123 deletions(-) diff --git a/contracts/README.md b/contracts/README.md index 78e0ad5..73dbb81 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -16,9 +16,9 @@ Refresh the list of deployed contracts by running `./scripts/generateDeployments #### Arbitrum Sepolia -- [CurateFactory](https://sepolia.arbiscan.io/address/0x1d7AEdcBBD73EE03313Ff6Ba32743d365b9A8a38) -- [CurateV2](https://sepolia.arbiscan.io/address/0xd7f802cBccF319e43F58676d2717eEB0337B28D1) -- [CurateView](https://sepolia.arbiscan.io/address/0x0A86bC3D20a0205733383F3bB08166D5C6608f9E) +- [CurateFactory](https://sepolia.arbiscan.io/address/0x6f824A72d67bcF76f6F55C12F6E8FcAF531818bD) +- [CurateV2](https://sepolia.arbiscan.io/address/0xed1f06a9963D2B2D5f2176b2dFFaaf03FC909531) +- [CurateView](https://sepolia.arbiscan.io/address/0x61DAadc87f1e0889407d2Fd725eAEB79E2B5cF80) #### Sepolia diff --git a/contracts/deployments/arbitrumSepoliaDevnet/CurateFactory.json b/contracts/deployments/arbitrumSepoliaDevnet/CurateFactory.json index 3847404..f981f61 100644 --- a/contracts/deployments/arbitrumSepoliaDevnet/CurateFactory.json +++ b/contracts/deployments/arbitrumSepoliaDevnet/CurateFactory.json @@ -1,5 +1,5 @@ { - "address": "0x1d7AEdcBBD73EE03313Ff6Ba32743d365b9A8a38", + "address": "0x6f824A72d67bcF76f6F55C12F6E8FcAF531818bD", "abi": [ { "inputs": [ @@ -146,30 +146,30 @@ "type": "function" } ], - "transactionHash": "0xfc3a2c117de56442c007f54c29fe0e73244a18c914624db03bf369e322ac9341", + "transactionHash": "0x4a5577465d50003ca872cb8a67269b4b0bfc5730c8fe1735eb4dff7da5d6161f", "receipt": { "to": null, - "from": "0xD37888F19e669874cfcCF519bf267280d70498C7", - "contractAddress": "0x1d7AEdcBBD73EE03313Ff6Ba32743d365b9A8a38", - "transactionIndex": 1, - "gasUsed": "514922", + "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", + "contractAddress": "0x6f824A72d67bcF76f6F55C12F6E8FcAF531818bD", + "transactionIndex": 3, + "gasUsed": "514910", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x02632484148f34bba724c1630aaa6fc2e9d0c6c8c64ad6bc17effdd2eee1b205", - "transactionHash": "0xfc3a2c117de56442c007f54c29fe0e73244a18c914624db03bf369e322ac9341", + "blockHash": "0x14b8bd078212b1afb8439c0346fa4506425b05f62e63c9c7985cf6d34ccc7ed3", + "transactionHash": "0x4a5577465d50003ca872cb8a67269b4b0bfc5730c8fe1735eb4dff7da5d6161f", "logs": [], - "blockNumber": 34231352, - "cumulativeGasUsed": "514922", + "blockNumber": 143682381, + "cumulativeGasUsed": "793084", "status": 1, "byzantium": true }, "args": [ - "0xd7f802cBccF319e43F58676d2717eEB0337B28D1" + "0xed1f06a9963D2B2D5f2176b2dFFaaf03FC909531" ], - "numDeployments": 1, - "solcInputHash": "f9af6975b5d788ca655644467f8fb5a2", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_curate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract CurateV2\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"NewList\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"curate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract EvidenceModule\",\"name\":\"_evidenceModule\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_connectedList\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"templateRegistry\",\"type\":\"address\"},{\"internalType\":\"string[2]\",\"name\":\"registrationTemplateParameters\",\"type\":\"string[2]\"},{\"internalType\":\"string[2]\",\"name\":\"removalTemplateParameters\",\"type\":\"string[2]\"}],\"internalType\":\"struct CurateV2.TemplateRegistryParams\",\"name\":\"_templateRegistryParams\",\"type\":\"tuple\"},{\"internalType\":\"uint256[4]\",\"name\":\"_baseDeposits\",\"type\":\"uint256[4]\"},{\"internalType\":\"uint256\",\"name\":\"_challengePeriodDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_relayerContract\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_listMetadata\",\"type\":\"string\"}],\"name\":\"deploy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"instances\",\"outputs\":[{\"internalType\":\"contract CurateV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"NewList(address)\":{\"details\":\"Emitted when a new Curate contract is deployed using this factory.\",\"params\":{\"_address\":\"The address of the newly deployed Curate contract.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"_curate\":\"Address of the Curate contract that is going to be used for each new deployment.\"}},\"count()\":{\"returns\":{\"_0\":\"The number of deployed Curate contracts using this factory.\"}},\"deploy(address,address,bytes,address,address,(address,string[2],string[2]),uint256[4],uint256,address,string)\":{\"details\":\"Deploy the arbitrable curated registry.\",\"params\":{\"_arbitrator\":\"Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\",\"_arbitratorExtraData\":\"Extra data for the trusted arbitrator contract.\",\"_baseDeposits\":\"The base deposits for requests/challenges as follows: - The base deposit to submit an item. - The base deposit to remove an item. - The base deposit to challenge a submission. - The base deposit to challenge a removal request.\",\"_challengePeriodDuration\":\"The time in seconds parties have to challenge a request.\",\"_connectedList\":\"The address of the Curate contract that stores related Curate addresses. This parameter can be left empty.\",\"_evidenceModule\":\"The evidence contract for the arbitrator.\",\"_governor\":\"The trusted governor of this contract.\",\"_listMetadata\":\"Stringified JSON object containing list metadata (title, description, isListOfLists, etc.). Example at :- https://cloudflare-ipfs.com/ipfs/QmekLsbXtQfm2jJjdeC5TF1cJcr5qxarZ9bhKmCS9s3ebK/list-metadata.json\",\"_relayerContract\":\"The address of the relay contract to add/remove items directly.\",\"_templateRegistryParams\":\"The dispute template registry. - templateRegistry : The dispute template registry. - registrationTemplateParameters : Template and data mappings json for registration requests. - removalTemplateParameters : Template and data mappings json for removal requests.\"}}},\"title\":\"CurateFactory This contract acts as a registry for Curate instances.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/CurateFactory.sol\":\"CurateFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@kleros/kleros-v2-contracts/arbitration/evidence/EvidenceModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @fnanni-0]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n/// @custom:tools: []\\n\\npragma solidity 0.8.18;\\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 // ************************************* //\\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 /// @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 function initialize(address _governor) external reinitializer(1) {\\n governor = _governor;\\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 IPFS path to evidence, example: '/ipfs/Qmarwkf7C9RuzDEJNnarT3WZ7kem5bk8DZAzx78acJjMFH/evidence.json'.\\n function submitEvidence(uint256 _externalDisputeID, string calldata _evidence) external {\\n emit Evidence(_externalDisputeID, msg.sender, _evidence);\\n }\\n}\\n\",\"keccak256\":\"0x32d2c14255a266083094597f009f557e2db62727fb8a8fa9cf3f1760be58300c\",\"license\":\"MIT\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\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\":\"0x88b0038d226532e6cf862a485d162f7bca61ac3d361d6801146b55a240f091ac\",\"license\":\"MIT\"},\"@kleros/kleros-v2-contracts/arbitration/interfaces/IEvidence.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\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 IPFS path to evidence, example: '/ipfs/Qmarwkf7C9RuzDEJNnarT3WZ7kem5bk8DZAzx78acJjMFH/evidence.json'\\n event Evidence(uint256 indexed _externalDisputeID, address indexed _party, string _evidence);\\n}\\n\",\"keccak256\":\"0x3350da62267a5dad4616dafd9916fe3bfa4cdabfce124709ac3b7d087361e8c4\",\"license\":\"MIT\"},\"@kleros/kleros-v2-contracts/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 * ```\\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\":\"0xcfffacf78b92e89a0123aff2c86188abc5327bb59b223f04e1cc1267234bd828\",\"license\":\"MIT\"},\"@kleros/kleros-v2-contracts/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\":\"0xbac7476deeee8ebbfc895a42e8b50a01c7549164a48ee2ddb0e2307946ee35f9\",\"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/CurateFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@mtsalenc, @unknownunknown1]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport {CurateV2, IArbitratorV2, EvidenceModule} from \\\"./CurateV2.sol\\\";\\n\\n/// @title CurateFactory\\n/// This contract acts as a registry for Curate instances.\\ncontract CurateFactory {\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a new Curate contract is deployed using this factory.\\n /// @param _address The address of the newly deployed Curate contract.\\n event NewList(CurateV2 indexed _address);\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n CurateV2[] public instances;\\n address public curate;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor.\\n /// @param _curate Address of the Curate contract that is going to be used for each new deployment.\\n constructor(address _curate) {\\n curate = _curate;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Deploy the arbitrable curated registry.\\n /// @param _governor The trusted governor of this contract.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence contract for the arbitrator.\\n /// @param _connectedList The address of the Curate contract that stores related Curate addresses. This parameter can be left empty.\\n /// @param _templateRegistryParams The dispute template registry.\\n /// - templateRegistry : The dispute template registry.\\n /// - registrationTemplateParameters : Template and data mappings json for registration requests.\\n /// - removalTemplateParameters : Template and data mappings json for removal requests.\\n /// @param _baseDeposits The base deposits for requests/challenges as follows:\\n /// - The base deposit to submit an item.\\n /// - The base deposit to remove an item.\\n /// - The base deposit to challenge a submission.\\n /// - The base deposit to challenge a removal request.\\n /// @param _challengePeriodDuration The time in seconds parties have to challenge a request.\\n /// @param _relayerContract The address of the relay contract to add/remove items directly.\\n /// @param _listMetadata Stringified JSON object containing list metadata (title, description, isListOfLists, etc.). Example at :- https://cloudflare-ipfs.com/ipfs/QmekLsbXtQfm2jJjdeC5TF1cJcr5qxarZ9bhKmCS9s3ebK/list-metadata.json\\n function deploy(\\n address _governor,\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule,\\n address _connectedList,\\n CurateV2.TemplateRegistryParams calldata _templateRegistryParams,\\n uint256[4] calldata _baseDeposits,\\n uint256 _challengePeriodDuration,\\n address _relayerContract,\\n string memory _listMetadata\\n ) public {\\n CurateV2 instance = clone(curate);\\n instance.initialize(\\n _governor,\\n _arbitrator,\\n _arbitratorExtraData,\\n _evidenceModule,\\n _connectedList,\\n CurateV2.TemplateRegistryParams(\\n _templateRegistryParams.templateRegistry,\\n _templateRegistryParams.registrationTemplateParameters,\\n _templateRegistryParams.removalTemplateParameters\\n ),\\n _baseDeposits,\\n _challengePeriodDuration,\\n _relayerContract,\\n _listMetadata\\n );\\n instances.push(instance);\\n emit NewList(instance);\\n }\\n\\n /// @notice Adaptation of https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/Clones.sol.\\n /// @dev Deploys and returns the address of a clone that mimics the behaviour of `curate`.\\n /// @param _implementation Address of the contract to clone.\\n /// This function uses the create opcode, which should never revert.\\n function clone(address _implementation) internal returns (CurateV2 instance) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n // Cleans the upper 96 bits of the `_implementation` word, then packs the first 3 bytes\\n // of the `_implementation` address with the bytecode before the address.\\n mstore(0x00, or(shr(0xe8, shl(0x60, _implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))\\n // Packs the remaining 17 bytes of `_implementation` with the bytecode after the address.\\n mstore(0x20, or(shl(0x78, _implementation), 0x5af43d82803e903d91602b57fd5bf3))\\n instance := create(0, 0x09, 0x37)\\n }\\n require(instance != CurateV2(address(0)), \\\"ERC1167: create failed\\\");\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @return The number of deployed Curate contracts using this factory.\\n function count() external view returns (uint256) {\\n return instances.length;\\n }\\n}\\n\",\"keccak256\":\"0x1781f897d9b72c532ee2c7906a277969dd035b79cabca360512c158ae281805b\",\"license\":\"MIT\"},\"src/CurateV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @mtsalenc, @hbarcelos]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"@kleros/kleros-v2-contracts/arbitration/interfaces/IArbitrableV2.sol\\\";\\nimport {EvidenceModule} from \\\"@kleros/kleros-v2-contracts/arbitration/evidence/EvidenceModule.sol\\\";\\nimport \\\"@kleros/kleros-v2-contracts/arbitration/interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\n/// @title Curate\\n/// Curated registry contract compatible with V2. The V1 version is here https://github.com/kleros/tcr/blob/master/contracts/LightGeneralizedTCR.sol\\ncontract CurateV2 is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Status {\\n Absent, // The item is not in the registry.\\n Registered, // The item is in the registry.\\n RegistrationRequested, // The item has a request to be added to the registry.\\n ClearingRequested // The item has a request to be removed from the registry.\\n }\\n\\n enum Party {\\n None, // Party per default when there is no challenger or requester. Also used for unconclusive ruling.\\n Requester, // Party that made the request to change a status.\\n Challenger // Party that challenges the request to change a status.\\n }\\n\\n enum RequestType {\\n Registration, // Identifies a request to register an item to the registry.\\n Clearing // Identifies a request to remove an item from the registry.\\n }\\n\\n enum DisputeStatus {\\n None, // No dispute was created.\\n AwaitingRuling, // Dispute was created, but the final ruling was not given yet.\\n Resolved // Dispute was ruled.\\n }\\n\\n struct Item {\\n Status status; // The current status of the item.\\n uint256 sumDeposit; // The total deposit made by the requester and the challenger (if any).\\n uint256 requestCount; // The number of requests.\\n mapping(uint256 => Request) requests; // List of status change requests made for the item in the form requests[requestID].\\n }\\n\\n struct Request {\\n RequestType requestType;\\n uint64 submissionTime; // Time when the request was made. Used to track when the challenge period ends.\\n uint24 arbitrationParamsIndex; // The index for the arbitration params for the request.\\n address payable requester; // Address of the requester.\\n // Pack the requester together with the other parameters, as they are written in the same request.\\n address payable challenger; // Address of the challenger, if any.\\n // TODO: store templateRegistry in case it's changed?\\n }\\n\\n struct DisputeData {\\n uint256 disputeID; // The ID of the dispute on the arbitrator.\\n DisputeStatus status; // The current status of the dispute.\\n Party ruling; // The ruling given to a dispute.\\n }\\n\\n struct ArbitrationParams {\\n IArbitratorV2 arbitrator; // The arbitrator trusted to solve disputes for this request.\\n bytes arbitratorExtraData; // The extra data for the trusted arbitrator of this request.\\n EvidenceModule evidenceModule; // The evidence module for the arbitrator.\\n }\\n\\n struct TemplateRegistryParams {\\n address templateRegistry; // Dispute Template registry address\\n string[2] registrationTemplateParameters; // Template and data mappings json for registration requests.\\n string[2] removalTemplateParameters; // Template and data mappings json for removal requests.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n bool private initialized;\\n uint256 public constant RULING_OPTIONS = 2; // The amount of non 0 choices the arbitrator can give.\\n address public relayerContract; // The contract that is used to add or remove items directly to speed up the interchain communication.\\n address public governor; // The address that can make changes to the parameters of the contract.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n uint256 public templateIdRegistration; // The current dispute template identifier for registration requests.\\n uint256 public templateIdRemoval; // The current dispute template identifier for removal requests.\\n uint256 public submissionBaseDeposit; // The base deposit to submit an item.\\n uint256 public removalBaseDeposit; // The base deposit to remove an item.\\n uint256 public submissionChallengeBaseDeposit; // The base deposit to challenge a submission.\\n uint256 public removalChallengeBaseDeposit; // The base deposit to challenge a removal request.\\n uint256 public challengePeriodDuration; // The time after which a request becomes executable if not challenged.\\n\\n mapping(bytes32 => Item) public items; // Maps the item ID to its data in the form items[_itemID].\\n mapping(address => mapping(uint256 => bytes32)) public arbitratorDisputeIDToItemID; // Maps a dispute ID to the ID of the item with the disputed request in the form arbitratorDisputeIDToItemID[arbitrator][disputeID].\\n mapping(bytes32 => mapping(uint256 => DisputeData)) public requestsDisputeData; // Maps an item and a request to the data of the dispute related to them. requestsDisputeData[itemID][requestIndex]\\n ArbitrationParams[] public arbitrationParamsChanges;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyGovernor() {\\n require(msg.sender == governor, \\\"The caller must be the governor.\\\");\\n _;\\n }\\n\\n modifier onlyRelayer() {\\n require(msg.sender == relayerContract, \\\"The caller must be the relay.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a party makes a request, raises a dispute or when a request is resolved.\\n /// @param _itemID The ID of the affected item.\\n /// @param _updatedDirectly Whether this was emitted in either `addItemDirectly` or `removeItemDirectly`. This is used in the subgraph.\\n event ItemStatusChange(bytes32 indexed _itemID, bool _updatedDirectly);\\n\\n /// @dev Emitted when someone submits an item for the first time.\\n /// @param _itemID The ID of the new item.\\n /// @param _data Stringified JSON Object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json.\\n /// @param _addedDirectly Whether the item was added via `addItemDirectly`.\\n event NewItem(bytes32 indexed _itemID, string _data, bool _addedDirectly);\\n\\n /// @dev Emitted when someone submits a request.\\n /// @param _itemID The ID of the affected item.\\n /// @param _requestID Unique dispute identifier within this contract.\\n event RequestSubmitted(bytes32 indexed _itemID, uint256 _requestID);\\n\\n /// @dev Emitted when the address of the connected Curate contract is set. The Curate is an instance of the Curate contract where each item is the address of a Curate contract related to this one.\\n /// @param _connectedList The address of the connected Curate.\\n event ConnectedListSet(address indexed _connectedList);\\n\\n /// @dev Emitted when the list metadata ipfs uri is updated.\\n /// @param _listMetadata Ipfs uri to list metadata.\\n event ListMetadataSet(string _listMetadata);\\n\\n // ************************************* //\\n // * Initializer * //\\n // ************************************* //\\n\\n /// @dev Initialize the arbitrable curated registry.\\n /// @param _governor The trusted governor of this contract.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence contract for the arbitrator.\\n /// @param _connectedList The address of the Curate contract that stores related Curate addresses. This parameter can be left empty.\\n /// @param _templateRegistryParams The dispute template registry.\\n /// - templateRegistry : The dispute template registry.\\n /// - registrationTemplateParameters : Template and data mappings json for registration requests.\\n /// - removalTemplateParameters : Template and data mappings json for removal requests.\\n /// @param _baseDeposits The base deposits for requests/challenges as follows:\\n /// - The base deposit to submit an item.\\n /// - The base deposit to remove an item.\\n /// - The base deposit to challenge a submission.\\n /// - The base deposit to challenge a removal request.\\n /// @param _challengePeriodDuration The time in seconds parties have to challenge a request.\\n /// @param _relayerContract The address of the relayer contract to add/remove items directly.\\n /// @param _listMetadata Stringified JSON object containing list metadata (title, description, isListOfLists, etc.). Example at :- https://cloudflare-ipfs.com/ipfs/QmekLsbXtQfm2jJjdeC5TF1cJcr5qxarZ9bhKmCS9s3ebK/list-metadata.json\\n function initialize(\\n address _governor,\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule,\\n address _connectedList,\\n TemplateRegistryParams calldata _templateRegistryParams,\\n uint256[4] calldata _baseDeposits,\\n uint256 _challengePeriodDuration,\\n address _relayerContract,\\n string calldata _listMetadata\\n ) external {\\n require(!initialized, \\\"Already initialized.\\\");\\n initialized = true;\\n\\n governor = _governor;\\n submissionBaseDeposit = _baseDeposits[0];\\n removalBaseDeposit = _baseDeposits[1];\\n submissionChallengeBaseDeposit = _baseDeposits[2];\\n removalChallengeBaseDeposit = _baseDeposits[3];\\n challengePeriodDuration = _challengePeriodDuration;\\n relayerContract = _relayerContract;\\n\\n templateRegistry = IDisputeTemplateRegistry(_templateRegistryParams.templateRegistry);\\n templateIdRegistration = templateRegistry.setDisputeTemplate(\\n \\\"Registration\\\",\\n _templateRegistryParams.registrationTemplateParameters[0],\\n _templateRegistryParams.registrationTemplateParameters[1]\\n );\\n templateIdRemoval = templateRegistry.setDisputeTemplate(\\n \\\"Removal\\\",\\n _templateRegistryParams.removalTemplateParameters[0],\\n _templateRegistryParams.removalTemplateParameters[1]\\n );\\n\\n arbitrationParamsChanges.push(\\n ArbitrationParams({\\n arbitrator: _arbitrator,\\n arbitratorExtraData: _arbitratorExtraData,\\n evidenceModule: _evidenceModule\\n })\\n );\\n\\n if (_connectedList != address(0)) {\\n emit ConnectedListSet(_connectedList);\\n }\\n\\n emit ListMetadataSet(_listMetadata);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Change the duration of the challenge period.\\n /// @param _challengePeriodDuration The new duration of the challenge period.\\n function changeChallengePeriodDuration(uint256 _challengePeriodDuration) external onlyGovernor {\\n challengePeriodDuration = _challengePeriodDuration;\\n }\\n\\n /// @dev Change the base amount required as a deposit to submit an item.\\n /// @param _submissionBaseDeposit The new base amount of wei required to submit an item.\\n function changeSubmissionBaseDeposit(uint256 _submissionBaseDeposit) external onlyGovernor {\\n submissionBaseDeposit = _submissionBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to remove an item.\\n /// @param _removalBaseDeposit The new base amount of wei required to remove an item.\\n function changeRemovalBaseDeposit(uint256 _removalBaseDeposit) external onlyGovernor {\\n removalBaseDeposit = _removalBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to challenge a submission.\\n /// @param _submissionChallengeBaseDeposit The new base amount of wei required to challenge a submission.\\n function changeSubmissionChallengeBaseDeposit(uint256 _submissionChallengeBaseDeposit) external onlyGovernor {\\n submissionChallengeBaseDeposit = _submissionChallengeBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to challenge a removal request.\\n /// @param _removalChallengeBaseDeposit The new base amount of wei required to challenge a removal request.\\n function changeRemovalChallengeBaseDeposit(uint256 _removalChallengeBaseDeposit) external onlyGovernor {\\n removalChallengeBaseDeposit = _removalChallengeBaseDeposit;\\n }\\n\\n /// @dev Change the governor of the curated registry.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external onlyGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Change the address of connectedList, the Curate instance that stores addresses of Curate contracts related to this one.\\n /// @param _connectedList The address of the connectedList contract to use.\\n function changeConnectedList(address _connectedList) external onlyGovernor {\\n emit ConnectedListSet(_connectedList);\\n }\\n\\n /// @dev Update list metadata ipfs uri.\\n /// @param _listMetadata Ipfs uri to list metadata\\n function changeListMetadata(string calldata _listMetadata) external onlyGovernor {\\n emit ListMetadataSet(_listMetadata);\\n }\\n\\n /// @dev Change the address of the relay contract.\\n /// @param _relayerContract The new address of the relay contract.\\n function changeRelayerContract(address _relayerContract) external onlyGovernor {\\n relayerContract = _relayerContract;\\n }\\n\\n /// @dev Changes the address of Template Registry contract.\\n /// @param _templateRegistry The new template registry.\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external onlyGovernor {\\n templateRegistry = _templateRegistry;\\n // TODO: automatically set templates upon changing the registry.\\n }\\n\\n /// @dev Changes the dispute template for registration requests.\\n /// @param _templateData The new template data for registration requests.\\n /// @param _templateDataMappings The new data mappings json for registration requests.\\n function changeRegistrationDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyGovernor {\\n templateIdRegistration = templateRegistry.setDisputeTemplate(\\n \\\"Registration\\\",\\n _templateData,\\n _templateDataMappings\\n );\\n }\\n\\n /// @dev Changes the dispute template for removal requests.\\n /// @param _templateData The new template data for removal requests.\\n /// @param _templateDataMappings The new data mappings json for removal requests.\\n function changeRemovalDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyGovernor {\\n templateIdRemoval = templateRegistry.setDisputeTemplate(\\\"Removal\\\", _templateData, _templateDataMappings);\\n }\\n\\n /// @notice Changes the params related to arbitration.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence module for the arbitrator.\\n function changeArbitrationParams(\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule\\n ) external onlyGovernor {\\n arbitrationParamsChanges.push(\\n ArbitrationParams({\\n arbitrator: _arbitrator,\\n arbitratorExtraData: _arbitratorExtraData,\\n evidenceModule: _evidenceModule\\n })\\n );\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Directly add an item to the list bypassing request-challenge. Can only be used by the relayer contract.\\n /// @param _item Stringified JSON Object containing Item data\\n function addItemDirectly(string calldata _item) external onlyRelayer {\\n bytes32 itemID = keccak256(abi.encodePacked(_item));\\n Item storage item = items[itemID];\\n require(item.status == Status.Absent, \\\"Item must be absent to be added.\\\");\\n\\n // Note that if the item is added directly once, the next time it is added it will emit this event again.\\n if (item.requestCount == 0) {\\n emit NewItem(itemID, _item, true);\\n }\\n\\n item.status = Status.Registered;\\n\\n emit ItemStatusChange(itemID, true);\\n }\\n\\n /// @dev Directly remove an item from the list bypassing request-challenge. Can only be used by the relayer contract.\\n /// @param _itemID The ID of the item to remove. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\\n function removeItemDirectly(bytes32 _itemID) external onlyRelayer {\\n Item storage item = items[_itemID];\\n require(item.status == Status.Registered, \\\"Item must be registered to be removed.\\\");\\n\\n item.status = Status.Absent;\\n\\n emit ItemStatusChange(_itemID, true);\\n }\\n\\n /// @dev Submit a request to register an item. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _item Stringified JSON object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\\n function addItem(string calldata _item) external payable {\\n bytes32 itemID = keccak256(abi.encodePacked(_item));\\n Item storage item = items[itemID];\\n\\n require(item.status == Status.Absent, \\\"Item must be absent to be added.\\\");\\n\\n // Note that if the item was added previously using `addItemDirectly`, the event will be emitted again here.\\n if (item.requestCount == 0) {\\n emit NewItem(itemID, _item, false);\\n }\\n\\n Request storage request = item.requests[item.requestCount++];\\n uint256 arbitrationParamsIndex = arbitrationParamsChanges.length - 1;\\n IArbitratorV2 arbitrator = arbitrationParamsChanges[arbitrationParamsIndex].arbitrator;\\n bytes storage arbitratorExtraData = arbitrationParamsChanges[arbitrationParamsIndex].arbitratorExtraData;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitratorExtraData);\\n uint256 totalCost = arbitrationCost + submissionBaseDeposit;\\n require(msg.value >= totalCost, \\\"You must fully fund the request.\\\");\\n\\n item.sumDeposit = totalCost;\\n item.status = Status.RegistrationRequested;\\n\\n request.requestType = RequestType.Registration;\\n request.submissionTime = uint64(block.timestamp);\\n request.arbitrationParamsIndex = uint24(arbitrationParamsIndex);\\n request.requester = payable(msg.sender);\\n\\n emit RequestSubmitted(itemID, getRequestID(itemID, item.requestCount - 1));\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Submit a request to remove an item from the list. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _itemID The ID of the item to remove.\\n /// @param _evidence A link to evidence using its URI.\\n function removeItem(bytes32 _itemID, string calldata _evidence) external payable {\\n Item storage item = items[_itemID];\\n\\n require(item.status == Status.Registered, \\\"Item must be registered to be removed.\\\");\\n\\n Request storage request = item.requests[item.requestCount++];\\n uint256 arbitrationParamsIndex = arbitrationParamsChanges.length - 1;\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[arbitrationParamsIndex];\\n IArbitratorV2 arbitrator = arbitrationParams.arbitrator;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitrationParams.arbitratorExtraData);\\n uint256 totalCost = arbitrationCost + removalBaseDeposit;\\n require(msg.value >= totalCost, \\\"You must fully fund the request.\\\");\\n\\n item.sumDeposit = totalCost;\\n item.status = Status.ClearingRequested;\\n\\n request.submissionTime = uint64(block.timestamp);\\n request.arbitrationParamsIndex = uint24(arbitrationParamsIndex);\\n request.requester = payable(msg.sender);\\n request.requestType = RequestType.Clearing;\\n\\n uint256 requestID = getRequestID(_itemID, item.requestCount - 1);\\n emit RequestSubmitted(_itemID, requestID);\\n\\n // Emit evidence if it was provided.\\n if (bytes(_evidence).length > 0) {\\n arbitrationParams.evidenceModule.submitEvidence(requestID, _evidence); // TODO: add a msg.sender parameter to submitEvidence.\\n }\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Challenges the request of the item. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _itemID The ID of the item which request to challenge.\\n /// @param _evidence A link to evidence using its URI.\\n function challengeRequest(bytes32 _itemID, string calldata _evidence) external payable {\\n Item storage item = items[_itemID];\\n require(item.status > Status.Registered, \\\"The item must have a pending request.\\\");\\n\\n uint256 lastRequestIndex = item.requestCount - 1;\\n Request storage request = item.requests[lastRequestIndex];\\n require(\\n block.timestamp - request.submissionTime <= challengePeriodDuration,\\n \\\"Challenges must occur during the challenge period.\\\"\\n );\\n\\n DisputeData storage disputeData = requestsDisputeData[_itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.None, \\\"The request should not have already been disputed.\\\");\\n\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n IArbitratorV2 arbitrator = arbitrationParams.arbitrator;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitrationParams.arbitratorExtraData);\\n uint256 totalCost;\\n {\\n uint256 challengerBaseDeposit = item.status == Status.RegistrationRequested\\n ? submissionChallengeBaseDeposit\\n : removalChallengeBaseDeposit;\\n totalCost = arbitrationCost + challengerBaseDeposit;\\n }\\n require(msg.value >= totalCost, \\\"You must fully fund the challenge.\\\");\\n\\n item.sumDeposit = item.sumDeposit + totalCost - arbitrationCost;\\n\\n request.challenger = payable(msg.sender);\\n\\n // Raise a dispute.\\n disputeData.disputeID = arbitrator.createDispute{value: arbitrationCost}(\\n RULING_OPTIONS,\\n arbitrationParams.arbitratorExtraData\\n );\\n disputeData.status = DisputeStatus.AwaitingRuling;\\n\\n arbitratorDisputeIDToItemID[address(arbitrator)][disputeData.disputeID] = _itemID;\\n\\n uint256 requestID = getRequestID(_itemID, lastRequestIndex);\\n uint256 templateId = request.requestType == RequestType.Registration\\n ? templateIdRegistration\\n : templateIdRemoval;\\n emit DisputeRequest(arbitrator, disputeData.disputeID, requestID, templateId, \\\"\\\");\\n\\n // Emit evidence if it was provided.\\n if (bytes(_evidence).length > 0) {\\n arbitrationParams.evidenceModule.submitEvidence(requestID, _evidence); // TODO: add a msg.sender parameter to submitEvidence.\\n }\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Executes an unchallenged request if the challenge period has passed.\\n /// @param _itemID The ID of the item to execute.\\n function executeRequest(bytes32 _itemID) external {\\n Item storage item = items[_itemID];\\n uint256 lastRequestIndex = items[_itemID].requestCount - 1;\\n\\n Request storage request = item.requests[lastRequestIndex];\\n require(\\n block.timestamp - request.submissionTime > challengePeriodDuration,\\n \\\"Time to challenge the request must pass.\\\"\\n );\\n\\n DisputeData storage disputeData = requestsDisputeData[_itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.None, \\\"The request should not be disputed.\\\");\\n\\n if (item.status == Status.RegistrationRequested) {\\n item.status = Status.Registered;\\n } else if (item.status == Status.ClearingRequested) {\\n item.status = Status.Absent;\\n } else {\\n revert(\\\"There must be a request.\\\");\\n }\\n\\n emit ItemStatusChange(_itemID, false);\\n\\n uint256 sumDeposit = item.sumDeposit;\\n item.sumDeposit = 0;\\n\\n if (sumDeposit > 0) {\\n // reimburse the requester\\n request.requester.send(sumDeposit);\\n }\\n }\\n\\n /// @dev Give a ruling for a dispute. Can only be called by the arbitrator. TRUSTED.\\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 \\\"Refused to arbitrate\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external {\\n require(_ruling <= RULING_OPTIONS, \\\"Invalid ruling option\\\");\\n\\n bytes32 itemID = arbitratorDisputeIDToItemID[msg.sender][_disputeID];\\n Item storage item = items[itemID];\\n uint256 lastRequestIndex = items[itemID].requestCount - 1;\\n Request storage request = item.requests[lastRequestIndex];\\n\\n DisputeData storage disputeData = requestsDisputeData[itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.AwaitingRuling, \\\"The request must not be resolved.\\\");\\n\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n require(address(arbitrationParams.arbitrator) == msg.sender, \\\"Only the arbitrator can give a ruling\\\");\\n\\n emit Ruling(IArbitratorV2(msg.sender), _disputeID, _ruling);\\n\\n Party winner = Party(_ruling);\\n\\n disputeData.status = DisputeStatus.Resolved;\\n disputeData.ruling = winner;\\n\\n uint256 sumDeposit = item.sumDeposit;\\n item.sumDeposit = 0;\\n\\n if (winner == Party.None) {\\n // If the arbitrator refuse to rule, then the item status should be the same it was before the request.\\n // Regarding item.status this is equivalent to the challenger winning the dispute.\\n item.status = item.status == Status.RegistrationRequested ? Status.Absent : Status.Registered;\\n\\n // Since nobody has won, then we reimburse both parties equally.\\n // If item.sumDeposit is odd, 1 wei will remain in the contract balance.\\n uint256 halfSumDeposit = sumDeposit / 2;\\n\\n request.requester.send(halfSumDeposit);\\n request.challenger.send(halfSumDeposit);\\n } else if (winner == Party.Requester) {\\n item.status = item.status == Status.RegistrationRequested ? Status.Registered : Status.Absent;\\n\\n request.requester.send(sumDeposit);\\n } else {\\n item.status = item.status == Status.RegistrationRequested ? Status.Absent : Status.Registered;\\n\\n request.challenger.send(sumDeposit);\\n }\\n\\n emit ItemStatusChange(itemID, false);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @notice Gets the local dispute ID for a given item and request.\\n /// @param _itemID The ID of the item.\\n /// @param _requestID The ID of the request.\\n /// @return Local dispute ID.\\n function getRequestID(bytes32 _itemID, uint256 _requestID) public pure returns (uint256) {\\n return uint256(keccak256(abi.encodePacked(_itemID, _requestID)));\\n }\\n\\n /// @notice Gets the arbitrator for new requests.\\n /// @dev Gets the latest value in arbitrationParamsChanges.\\n /// @return The arbitrator address.\\n function getArbitrator() external view returns (IArbitratorV2) {\\n return arbitrationParamsChanges[arbitrationParamsChanges.length - 1].arbitrator;\\n }\\n\\n /// @notice Gets the arbitratorExtraData for new requests.\\n /// @dev Gets the latest value in arbitrationParamsChanges.\\n /// @return The arbitrator extra data.\\n function getArbitratorExtraData() external view returns (bytes memory) {\\n return arbitrationParamsChanges[arbitrationParamsChanges.length - 1].arbitratorExtraData;\\n }\\n\\n /// @dev Returns item's information. Includes the total number of requests for the item\\n /// @param _itemID The ID of the queried item.\\n /// @return status The current status of the item.\\n /// @return numberOfRequests Total number of requests for the item.\\n /// @return sumDeposit The total deposit made by the requester and the challenger (if any)\\n function getItemInfo(\\n bytes32 _itemID\\n ) external view returns (Status status, uint256 numberOfRequests, uint256 sumDeposit) {\\n Item storage item = items[_itemID];\\n return (item.status, item.requestCount, item.sumDeposit);\\n }\\n\\n /// @dev Gets information on a request made for the item.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return disputed True if a dispute was raised.\\n /// @return disputeID ID of the dispute, if any.\\n /// @return submissionTime Time when the request was made.\\n /// @return resolved True if the request was executed and/or any raised disputes were resolved.\\n /// @return parties Address of requester and challenger, if any.\\n /// @return ruling The final ruling given, if any.\\n /// @return requestArbitrator The arbitrator trusted to solve disputes for this request.\\n /// @return requestArbitratorExtraData The extra data for the trusted arbitrator of this request.\\n function getRequestInfo(\\n bytes32 _itemID,\\n uint256 _requestID\\n )\\n external\\n view\\n returns (\\n bool disputed,\\n uint256 disputeID,\\n uint256 submissionTime,\\n bool resolved,\\n address payable[3] memory parties,\\n Party ruling,\\n IArbitratorV2 requestArbitrator,\\n bytes memory requestArbitratorExtraData\\n )\\n {\\n Item storage item = items[_itemID];\\n require(item.requestCount > _requestID, \\\"Request does not exist.\\\");\\n\\n Request storage request = items[_itemID].requests[_requestID];\\n\\n submissionTime = request.submissionTime;\\n parties[uint256(Party.Requester)] = request.requester;\\n parties[uint256(Party.Challenger)] = request.challenger;\\n\\n (disputed, disputeID, ruling) = getRequestDisputeData(_itemID, _requestID);\\n\\n (requestArbitrator, requestArbitratorExtraData) = getRequestArbitrationParams(_itemID, _requestID);\\n resolved = getRequestResolvedStatus(_itemID, _requestID);\\n }\\n\\n /// @dev Gets the dispute data relative to a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return disputed True if a dispute was raised.\\n /// @return disputeID ID of the dispute, if any.\\n /// @return ruling The final ruling given, if any.\\n function getRequestDisputeData(\\n bytes32 _itemID,\\n uint256 _requestID\\n ) internal view returns (bool disputed, uint256 disputeID, Party ruling) {\\n DisputeData storage disputeData = requestsDisputeData[_itemID][_requestID];\\n\\n return (disputeData.status >= DisputeStatus.AwaitingRuling, disputeData.disputeID, disputeData.ruling);\\n }\\n\\n /// @dev Gets the arbitration params relative to a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return arbitrator The arbitrator trusted to solve disputes for this request.\\n /// @return arbitratorExtraData The extra data for the trusted arbitrator of this request.\\n function getRequestArbitrationParams(\\n bytes32 _itemID,\\n uint256 _requestID\\n ) internal view returns (IArbitratorV2 arbitrator, bytes memory arbitratorExtraData) {\\n Request storage request = items[_itemID].requests[_requestID];\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n\\n return (arbitrationParams.arbitrator, arbitrationParams.arbitratorExtraData);\\n }\\n\\n /// @dev Gets the resovled status of a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return resolved True if the request was executed and/or any raised disputes were resolved.\\n function getRequestResolvedStatus(bytes32 _itemID, uint256 _requestID) internal view returns (bool resolved) {\\n Item storage item = items[_itemID];\\n\\n if (item.requestCount == 0) {\\n return false;\\n }\\n\\n if (_requestID < item.requestCount - 1) {\\n // It was resolved because it is not the last request.\\n return true;\\n }\\n\\n return item.sumDeposit == 0;\\n }\\n}\\n\",\"keccak256\":\"0x85407d640f7d486fdfde79a42d97a9fb6877022bf57b835157423ce597686e8a\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161087c38038061087c83398101604081905261002f91610054565b600180546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6107e9806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806306661abd146100515780630f9373ad14610067578063a2f7b3a514610092578063a63b115b146100a5575b600080fd5b6000546040519081526020015b60405180910390f35b60015461007a906001600160a01b031681565b6040516001600160a01b03909116815260200161005e565b61007a6100a03660046102f4565b6100ba565b6100b86100b336600461044b565b6100e4565b005b600081815481106100ca57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546000906100fc906001600160a01b0316610256565b9050806001600160a01b03166325b98b838d8d8d8d8d8d60405180606001604052808f60000160208101906101319190610550565b6001600160a01b031681526020018f806020019061014f9190610574565b61015890610594565b81526020018f806040019061016d9190610574565b61017690610594565b8152508d8d8d8d6040518c63ffffffff1660e01b81526004016101a39b9a999897969594939291906106ed565b600060405180830381600087803b1580156101bd57600080fd5b505af11580156101d1573d6000803e3d6000fd5b5050600080546001810182558180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b0386169081179091556040519093507f425208e08bf94a09380d60ae4ba2c26cdf95fb1e9e6a0e3e284b99a5f27bde7f9250a2505050505050505050505050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166102ef5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640160405180910390fd5b919050565b60006020828403121561030657600080fd5b5035919050565b6001600160a01b038116811461032257600080fd5b50565b80356102ef8161030d565b60008083601f84011261034257600080fd5b50813567ffffffffffffffff81111561035a57600080fd5b60208301915083602082850101111561037257600080fd5b9250929050565b60006060828403121561038b57600080fd5b50919050565b80608081018310156103a257600080fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126103cf57600080fd5b813567ffffffffffffffff808211156103ea576103ea6103a8565b604051601f8301601f19908116603f01168101908282118183101715610412576104126103a8565b8160405283815286602085880101111561042b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060008060008060008060006101a08c8e03121561046d57600080fd5b6104768c610325565b9a5061048460208d01610325565b995067ffffffffffffffff8060408e013511156104a057600080fd5b6104b08e60408f01358f01610330565b909a5098506104c160608e01610325565b97506104cf60808e01610325565b96508060a08e013511156104e257600080fd5b6104f28e60a08f01358f01610379565b95506105018e60c08f01610391565b94506101408d013593506105186101608e01610325565b9250806101808e0135111561052c57600080fd5b5061053e8d6101808e01358e016103be565b90509295989b509295989b9093969950565b60006020828403121561056257600080fd5b813561056d8161030d565b9392505050565b60008235603e1983360301811261058a57600080fd5b9190910192915050565b60006040516040810167ffffffffffffffff82821081831117156105ba576105ba6103a8565b604091825282918501368111156105d057600080fd5b855b81811015610605578035838111156105ea5760008081fd5b6105f636828a016103be565b855250602093840193016105d2565b509295945050505050565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b506000602082860101526020601f19601f83011685010191505092915050565b600082604081018360005b600281101561069057838303875261067a838351610610565b6020978801979093509190910190600101610661565b509095945050505050565b60018060a01b03815116825260006020820151606060208501526106c26060850182610656565b9050604083015184820360408601526106db8282610656565b95945050505050565b60808183375050565b6001600160a01b038c811682528b1660208201526101a060408201819052810189905260006101c08a8c8285013760008b84018201526001600160a01b038a166060840152601f19601f8c011683016001600160a01b038a166080850152818482030160a08501526107618282018a61069b565b91505061077160c08401886106e4565b8561014084015261078e6101608401866001600160a01b03169052565b8281036101808401526107a18185610610565b9e9d505050505050505050505050505056fea264697066735822122054afffe7f62694492abc44c91c5128acf80e4362e91f3dcebd0fd123b02b7d8c64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806306661abd146100515780630f9373ad14610067578063a2f7b3a514610092578063a63b115b146100a5575b600080fd5b6000546040519081526020015b60405180910390f35b60015461007a906001600160a01b031681565b6040516001600160a01b03909116815260200161005e565b61007a6100a03660046102f4565b6100ba565b6100b86100b336600461044b565b6100e4565b005b600081815481106100ca57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546000906100fc906001600160a01b0316610256565b9050806001600160a01b03166325b98b838d8d8d8d8d8d60405180606001604052808f60000160208101906101319190610550565b6001600160a01b031681526020018f806020019061014f9190610574565b61015890610594565b81526020018f806040019061016d9190610574565b61017690610594565b8152508d8d8d8d6040518c63ffffffff1660e01b81526004016101a39b9a999897969594939291906106ed565b600060405180830381600087803b1580156101bd57600080fd5b505af11580156101d1573d6000803e3d6000fd5b5050600080546001810182558180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b0386169081179091556040519093507f425208e08bf94a09380d60ae4ba2c26cdf95fb1e9e6a0e3e284b99a5f27bde7f9250a2505050505050505050505050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166102ef5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640160405180910390fd5b919050565b60006020828403121561030657600080fd5b5035919050565b6001600160a01b038116811461032257600080fd5b50565b80356102ef8161030d565b60008083601f84011261034257600080fd5b50813567ffffffffffffffff81111561035a57600080fd5b60208301915083602082850101111561037257600080fd5b9250929050565b60006060828403121561038b57600080fd5b50919050565b80608081018310156103a257600080fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126103cf57600080fd5b813567ffffffffffffffff808211156103ea576103ea6103a8565b604051601f8301601f19908116603f01168101908282118183101715610412576104126103a8565b8160405283815286602085880101111561042b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060008060008060008060006101a08c8e03121561046d57600080fd5b6104768c610325565b9a5061048460208d01610325565b995067ffffffffffffffff8060408e013511156104a057600080fd5b6104b08e60408f01358f01610330565b909a5098506104c160608e01610325565b97506104cf60808e01610325565b96508060a08e013511156104e257600080fd5b6104f28e60a08f01358f01610379565b95506105018e60c08f01610391565b94506101408d013593506105186101608e01610325565b9250806101808e0135111561052c57600080fd5b5061053e8d6101808e01358e016103be565b90509295989b509295989b9093969950565b60006020828403121561056257600080fd5b813561056d8161030d565b9392505050565b60008235603e1983360301811261058a57600080fd5b9190910192915050565b60006040516040810167ffffffffffffffff82821081831117156105ba576105ba6103a8565b604091825282918501368111156105d057600080fd5b855b81811015610605578035838111156105ea5760008081fd5b6105f636828a016103be565b855250602093840193016105d2565b509295945050505050565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b506000602082860101526020601f19601f83011685010191505092915050565b600082604081018360005b600281101561069057838303875261067a838351610610565b6020978801979093509190910190600101610661565b509095945050505050565b60018060a01b03815116825260006020820151606060208501526106c26060850182610656565b9050604083015184820360408601526106db8282610656565b95945050505050565b60808183375050565b6001600160a01b038c811682528b1660208201526101a060408201819052810189905260006101c08a8c8285013760008b84018201526001600160a01b038a166060840152601f19601f8c011683016001600160a01b038a166080850152818482030160a08501526107618282018a61069b565b91505061077160c08401886106e4565b8561014084015261078e6101608401866001600160a01b03169052565b8281036101808401526107a18185610610565b9e9d505050505050505050505050505056fea264697066735822122054afffe7f62694492abc44c91c5128acf80e4362e91f3dcebd0fd123b02b7d8c64736f6c63430008120033", + "numDeployments": 2, + "solcInputHash": "43d22c659b0bfc53d1499e270ad9a93b", + "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_curate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract CurateV2\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"NewList\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"curate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"},{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract EvidenceModule\",\"name\":\"_evidenceModule\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_connectedList\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"templateRegistry\",\"type\":\"address\"},{\"internalType\":\"string[2]\",\"name\":\"registrationTemplateParameters\",\"type\":\"string[2]\"},{\"internalType\":\"string[2]\",\"name\":\"removalTemplateParameters\",\"type\":\"string[2]\"}],\"internalType\":\"struct CurateV2.TemplateRegistryParams\",\"name\":\"_templateRegistryParams\",\"type\":\"tuple\"},{\"internalType\":\"uint256[4]\",\"name\":\"_baseDeposits\",\"type\":\"uint256[4]\"},{\"internalType\":\"uint256\",\"name\":\"_challengePeriodDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_relayerContract\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_listMetadata\",\"type\":\"string\"}],\"name\":\"deploy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"instances\",\"outputs\":[{\"internalType\":\"contract CurateV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"NewList(address)\":{\"details\":\"Emitted when a new Curate contract is deployed using this factory.\",\"params\":{\"_address\":\"The address of the newly deployed Curate contract.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"_curate\":\"Address of the Curate contract that is going to be used for each new deployment.\"}},\"count()\":{\"returns\":{\"_0\":\"The number of deployed Curate contracts using this factory.\"}},\"deploy(address,address,bytes,address,address,(address,string[2],string[2]),uint256[4],uint256,address,string)\":{\"details\":\"Deploy the arbitrable curated registry.\",\"params\":{\"_arbitrator\":\"Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\",\"_arbitratorExtraData\":\"Extra data for the trusted arbitrator contract.\",\"_baseDeposits\":\"The base deposits for requests/challenges as follows: - The base deposit to submit an item. - The base deposit to remove an item. - The base deposit to challenge a submission. - The base deposit to challenge a removal request.\",\"_challengePeriodDuration\":\"The time in seconds parties have to challenge a request.\",\"_connectedList\":\"The address of the Curate contract that stores related Curate addresses. This parameter can be left empty.\",\"_evidenceModule\":\"The evidence contract for the arbitrator.\",\"_governor\":\"The trusted governor of this contract.\",\"_listMetadata\":\"Stringified JSON object containing list metadata (title, description, isListOfLists, etc.). Example at :- https://cloudflare-ipfs.com/ipfs/QmekLsbXtQfm2jJjdeC5TF1cJcr5qxarZ9bhKmCS9s3ebK/list-metadata.json\",\"_relayerContract\":\"The address of the relay contract to add/remove items directly.\",\"_templateRegistryParams\":\"The dispute template registry. - templateRegistry : The dispute template registry. - registrationTemplateParameters : Template and data mappings json for registration requests. - removalTemplateParameters : Template and data mappings json for removal requests.\"}}},\"title\":\"CurateFactory This contract acts as a registry for Curate instances.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/CurateFactory.sol\":\"CurateFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.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 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 /**\\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\",\"keccak256\":\"0xbbc8ac883ac3c0078ce5ad3e288fbb3ffcc8a30c3a98c0fda0114d64fc44fca2\",\"license\":\"MIT\"},\"src/CurateFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@mtsalenc, @unknownunknown1]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport {CurateV2, IArbitratorV2, EvidenceModule} from \\\"./CurateV2.sol\\\";\\n\\n/// @title CurateFactory\\n/// This contract acts as a registry for Curate instances.\\ncontract CurateFactory {\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a new Curate contract is deployed using this factory.\\n /// @param _address The address of the newly deployed Curate contract.\\n event NewList(CurateV2 indexed _address);\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n CurateV2[] public instances;\\n address public curate;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /// @dev Constructor.\\n /// @param _curate Address of the Curate contract that is going to be used for each new deployment.\\n constructor(address _curate) {\\n curate = _curate;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Deploy the arbitrable curated registry.\\n /// @param _governor The trusted governor of this contract.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence contract for the arbitrator.\\n /// @param _connectedList The address of the Curate contract that stores related Curate addresses. This parameter can be left empty.\\n /// @param _templateRegistryParams The dispute template registry.\\n /// - templateRegistry : The dispute template registry.\\n /// - registrationTemplateParameters : Template and data mappings json for registration requests.\\n /// - removalTemplateParameters : Template and data mappings json for removal requests.\\n /// @param _baseDeposits The base deposits for requests/challenges as follows:\\n /// - The base deposit to submit an item.\\n /// - The base deposit to remove an item.\\n /// - The base deposit to challenge a submission.\\n /// - The base deposit to challenge a removal request.\\n /// @param _challengePeriodDuration The time in seconds parties have to challenge a request.\\n /// @param _relayerContract The address of the relay contract to add/remove items directly.\\n /// @param _listMetadata Stringified JSON object containing list metadata (title, description, isListOfLists, etc.). Example at :- https://cloudflare-ipfs.com/ipfs/QmekLsbXtQfm2jJjdeC5TF1cJcr5qxarZ9bhKmCS9s3ebK/list-metadata.json\\n function deploy(\\n address _governor,\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule,\\n address _connectedList,\\n CurateV2.TemplateRegistryParams calldata _templateRegistryParams,\\n uint256[4] calldata _baseDeposits,\\n uint256 _challengePeriodDuration,\\n address _relayerContract,\\n string memory _listMetadata\\n ) public {\\n CurateV2 instance = clone(curate);\\n instance.initialize(\\n _governor,\\n _arbitrator,\\n _arbitratorExtraData,\\n _evidenceModule,\\n _connectedList,\\n CurateV2.TemplateRegistryParams(\\n _templateRegistryParams.templateRegistry,\\n _templateRegistryParams.registrationTemplateParameters,\\n _templateRegistryParams.removalTemplateParameters\\n ),\\n _baseDeposits,\\n _challengePeriodDuration,\\n _relayerContract,\\n _listMetadata\\n );\\n instances.push(instance);\\n emit NewList(instance);\\n }\\n\\n /// @notice Adaptation of https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/Clones.sol.\\n /// @dev Deploys and returns the address of a clone that mimics the behaviour of `curate`.\\n /// @param _implementation Address of the contract to clone.\\n /// This function uses the create opcode, which should never revert.\\n function clone(address _implementation) internal returns (CurateV2 instance) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n // Cleans the upper 96 bits of the `_implementation` word, then packs the first 3 bytes\\n // of the `_implementation` address with the bytecode before the address.\\n mstore(0x00, or(shr(0xe8, shl(0x60, _implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))\\n // Packs the remaining 17 bytes of `_implementation` with the bytecode after the address.\\n mstore(0x20, or(shl(0x78, _implementation), 0x5af43d82803e903d91602b57fd5bf3))\\n instance := create(0, 0x09, 0x37)\\n }\\n require(instance != CurateV2(address(0)), \\\"ERC1167: create failed\\\");\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @return The number of deployed Curate contracts using this factory.\\n function count() external view returns (uint256) {\\n return instances.length;\\n }\\n}\\n\",\"keccak256\":\"0x52a539b8fe3827d37372307af4672dd637d83930decd6c2e00166dd466789b04\",\"license\":\"MIT\"},\"src/CurateV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @mtsalenc, @hbarcelos]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"@kleros/kleros-v2-contracts/arbitration/interfaces/IArbitrableV2.sol\\\";\\nimport {EvidenceModule} from \\\"@kleros/kleros-v2-contracts/arbitration/evidence/EvidenceModule.sol\\\";\\nimport \\\"@kleros/kleros-v2-contracts/arbitration/interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\n/// @title Curate\\n/// Curated registry contract compatible with V2. The V1 version is here https://github.com/kleros/tcr/blob/master/contracts/LightGeneralizedTCR.sol\\ncontract CurateV2 is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Status {\\n Absent, // The item is not in the registry.\\n Registered, // The item is in the registry.\\n RegistrationRequested, // The item has a request to be added to the registry.\\n ClearingRequested // The item has a request to be removed from the registry.\\n }\\n\\n enum Party {\\n None, // Party per default when there is no challenger or requester. Also used for unconclusive ruling.\\n Requester, // Party that made the request to change a status.\\n Challenger // Party that challenges the request to change a status.\\n }\\n\\n enum RequestType {\\n Registration, // Identifies a request to register an item to the registry.\\n Clearing // Identifies a request to remove an item from the registry.\\n }\\n\\n enum DisputeStatus {\\n None, // No dispute was created.\\n AwaitingRuling, // Dispute was created, but the final ruling was not given yet.\\n Resolved // Dispute was ruled.\\n }\\n\\n struct Item {\\n Status status; // The current status of the item.\\n uint256 sumDeposit; // The total deposit made by the requester and the challenger (if any).\\n uint256 requestCount; // The number of requests.\\n mapping(uint256 => Request) requests; // List of status change requests made for the item in the form requests[requestID].\\n }\\n\\n struct Request {\\n RequestType requestType;\\n uint64 submissionTime; // Time when the request was made. Used to track when the challenge period ends.\\n uint24 arbitrationParamsIndex; // The index for the arbitration params for the request.\\n address payable requester; // Address of the requester.\\n // Pack the requester together with the other parameters, as they are written in the same request.\\n address payable challenger; // Address of the challenger, if any.\\n // TODO: store templateRegistry in case it's changed?\\n }\\n\\n struct DisputeData {\\n uint256 disputeID; // The ID of the dispute on the arbitrator.\\n DisputeStatus status; // The current status of the dispute.\\n Party ruling; // The ruling given to a dispute.\\n }\\n\\n struct ArbitrationParams {\\n IArbitratorV2 arbitrator; // The arbitrator trusted to solve disputes for this request.\\n bytes arbitratorExtraData; // The extra data for the trusted arbitrator of this request.\\n EvidenceModule evidenceModule; // The evidence module for the arbitrator.\\n }\\n\\n struct TemplateRegistryParams {\\n address templateRegistry; // Dispute Template registry address\\n string[2] registrationTemplateParameters; // Template and data mappings json for registration requests.\\n string[2] removalTemplateParameters; // Template and data mappings json for removal requests.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n bool private initialized;\\n uint256 public constant RULING_OPTIONS = 2; // The amount of non 0 choices the arbitrator can give.\\n address public relayerContract; // The contract that is used to add or remove items directly to speed up the interchain communication.\\n address public governor; // The address that can make changes to the parameters of the contract.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n uint256 public templateIdRegistration; // The current dispute template identifier for registration requests.\\n uint256 public templateIdRemoval; // The current dispute template identifier for removal requests.\\n uint256 public submissionBaseDeposit; // The base deposit to submit an item.\\n uint256 public removalBaseDeposit; // The base deposit to remove an item.\\n uint256 public submissionChallengeBaseDeposit; // The base deposit to challenge a submission.\\n uint256 public removalChallengeBaseDeposit; // The base deposit to challenge a removal request.\\n uint256 public challengePeriodDuration; // The time after which a request becomes executable if not challenged.\\n\\n mapping(bytes32 => Item) public items; // Maps the item ID to its data in the form items[_itemID].\\n mapping(address => mapping(uint256 => bytes32)) public arbitratorDisputeIDToItemID; // Maps a dispute ID to the ID of the item with the disputed request in the form arbitratorDisputeIDToItemID[arbitrator][disputeID].\\n mapping(bytes32 => mapping(uint256 => DisputeData)) public requestsDisputeData; // Maps an item and a request to the data of the dispute related to them. requestsDisputeData[itemID][requestIndex]\\n ArbitrationParams[] public arbitrationParamsChanges;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyGovernor() {\\n require(msg.sender == governor, \\\"The caller must be the governor.\\\");\\n _;\\n }\\n\\n modifier onlyRelayer() {\\n require(msg.sender == relayerContract, \\\"The caller must be the relay.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a party makes a request, raises a dispute or when a request is resolved.\\n /// @param _itemID The ID of the affected item.\\n /// @param _updatedDirectly Whether this was emitted in either `addItemDirectly` or `removeItemDirectly`. This is used in the subgraph.\\n event ItemStatusChange(bytes32 indexed _itemID, bool _updatedDirectly);\\n\\n /// @dev Emitted when someone submits an item for the first time.\\n /// @param _itemID The ID of the new item.\\n /// @param _data Stringified JSON Object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json.\\n /// @param _addedDirectly Whether the item was added via `addItemDirectly`.\\n event NewItem(bytes32 indexed _itemID, string _data, bool _addedDirectly);\\n\\n /// @dev Emitted when someone submits a request.\\n /// @param _itemID The ID of the affected item.\\n /// @param _requestID Unique dispute identifier within this contract.\\n event RequestSubmitted(bytes32 indexed _itemID, uint256 _requestID);\\n\\n /// @dev Emitted when the address of the connected Curate contract is set. The Curate is an instance of the Curate contract where each item is the address of a Curate contract related to this one.\\n /// @param _connectedList The address of the connected Curate.\\n event ConnectedListSet(address indexed _connectedList);\\n\\n /// @dev Emitted when the list metadata ipfs uri is updated.\\n /// @param _listMetadata Ipfs uri to list metadata.\\n event ListMetadataSet(string _listMetadata);\\n\\n // ************************************* //\\n // * Initializer * //\\n // ************************************* //\\n\\n /// @dev Initialize the arbitrable curated registry.\\n /// @param _governor The trusted governor of this contract.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence contract for the arbitrator.\\n /// @param _connectedList The address of the Curate contract that stores related Curate addresses. This parameter can be left empty.\\n /// @param _templateRegistryParams The dispute template registry.\\n /// - templateRegistry : The dispute template registry.\\n /// - registrationTemplateParameters : Template and data mappings json for registration requests.\\n /// - removalTemplateParameters : Template and data mappings json for removal requests.\\n /// @param _baseDeposits The base deposits for requests/challenges as follows:\\n /// - The base deposit to submit an item.\\n /// - The base deposit to remove an item.\\n /// - The base deposit to challenge a submission.\\n /// - The base deposit to challenge a removal request.\\n /// @param _challengePeriodDuration The time in seconds parties have to challenge a request.\\n /// @param _relayerContract The address of the relayer contract to add/remove items directly.\\n /// @param _listMetadata Stringified JSON object containing list metadata (title, description, isListOfLists, etc.). Example at :- https://cloudflare-ipfs.com/ipfs/QmekLsbXtQfm2jJjdeC5TF1cJcr5qxarZ9bhKmCS9s3ebK/list-metadata.json\\n function initialize(\\n address _governor,\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule,\\n address _connectedList,\\n TemplateRegistryParams calldata _templateRegistryParams,\\n uint256[4] calldata _baseDeposits,\\n uint256 _challengePeriodDuration,\\n address _relayerContract,\\n string calldata _listMetadata\\n ) external {\\n require(!initialized, \\\"Already initialized.\\\");\\n initialized = true;\\n\\n governor = _governor;\\n submissionBaseDeposit = _baseDeposits[0];\\n removalBaseDeposit = _baseDeposits[1];\\n submissionChallengeBaseDeposit = _baseDeposits[2];\\n removalChallengeBaseDeposit = _baseDeposits[3];\\n challengePeriodDuration = _challengePeriodDuration;\\n relayerContract = _relayerContract;\\n\\n templateRegistry = IDisputeTemplateRegistry(_templateRegistryParams.templateRegistry);\\n templateIdRegistration = templateRegistry.setDisputeTemplate(\\n \\\"Registration\\\",\\n _templateRegistryParams.registrationTemplateParameters[0],\\n _templateRegistryParams.registrationTemplateParameters[1]\\n );\\n templateIdRemoval = templateRegistry.setDisputeTemplate(\\n \\\"Removal\\\",\\n _templateRegistryParams.removalTemplateParameters[0],\\n _templateRegistryParams.removalTemplateParameters[1]\\n );\\n\\n arbitrationParamsChanges.push(\\n ArbitrationParams({\\n arbitrator: _arbitrator,\\n arbitratorExtraData: _arbitratorExtraData,\\n evidenceModule: _evidenceModule\\n })\\n );\\n\\n if (_connectedList != address(0)) {\\n emit ConnectedListSet(_connectedList);\\n }\\n\\n emit ListMetadataSet(_listMetadata);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Change the duration of the challenge period.\\n /// @param _challengePeriodDuration The new duration of the challenge period.\\n function changeChallengePeriodDuration(uint256 _challengePeriodDuration) external onlyGovernor {\\n challengePeriodDuration = _challengePeriodDuration;\\n }\\n\\n /// @dev Change the base amount required as a deposit to submit an item.\\n /// @param _submissionBaseDeposit The new base amount of wei required to submit an item.\\n function changeSubmissionBaseDeposit(uint256 _submissionBaseDeposit) external onlyGovernor {\\n submissionBaseDeposit = _submissionBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to remove an item.\\n /// @param _removalBaseDeposit The new base amount of wei required to remove an item.\\n function changeRemovalBaseDeposit(uint256 _removalBaseDeposit) external onlyGovernor {\\n removalBaseDeposit = _removalBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to challenge a submission.\\n /// @param _submissionChallengeBaseDeposit The new base amount of wei required to challenge a submission.\\n function changeSubmissionChallengeBaseDeposit(uint256 _submissionChallengeBaseDeposit) external onlyGovernor {\\n submissionChallengeBaseDeposit = _submissionChallengeBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to challenge a removal request.\\n /// @param _removalChallengeBaseDeposit The new base amount of wei required to challenge a removal request.\\n function changeRemovalChallengeBaseDeposit(uint256 _removalChallengeBaseDeposit) external onlyGovernor {\\n removalChallengeBaseDeposit = _removalChallengeBaseDeposit;\\n }\\n\\n /// @dev Change the governor of the curated registry.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external onlyGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Change the address of connectedList, the Curate instance that stores addresses of Curate contracts related to this one.\\n /// @param _connectedList The address of the connectedList contract to use.\\n function changeConnectedList(address _connectedList) external onlyGovernor {\\n emit ConnectedListSet(_connectedList);\\n }\\n\\n /// @dev Update list metadata ipfs uri.\\n /// @param _listMetadata Ipfs uri to list metadata\\n function changeListMetadata(string calldata _listMetadata) external onlyGovernor {\\n emit ListMetadataSet(_listMetadata);\\n }\\n\\n /// @dev Change the address of the relay contract.\\n /// @param _relayerContract The new address of the relay contract.\\n function changeRelayerContract(address _relayerContract) external onlyGovernor {\\n relayerContract = _relayerContract;\\n }\\n\\n /// @dev Changes the address of Template Registry contract.\\n /// @param _templateRegistry The new template registry.\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external onlyGovernor {\\n templateRegistry = _templateRegistry;\\n // TODO: automatically set templates upon changing the registry.\\n }\\n\\n /// @dev Changes the dispute template for registration requests.\\n /// @param _templateData The new template data for registration requests.\\n /// @param _templateDataMappings The new data mappings json for registration requests.\\n function changeRegistrationDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyGovernor {\\n templateIdRegistration = templateRegistry.setDisputeTemplate(\\n \\\"Registration\\\",\\n _templateData,\\n _templateDataMappings\\n );\\n }\\n\\n /// @dev Changes the dispute template for removal requests.\\n /// @param _templateData The new template data for removal requests.\\n /// @param _templateDataMappings The new data mappings json for removal requests.\\n function changeRemovalDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyGovernor {\\n templateIdRemoval = templateRegistry.setDisputeTemplate(\\\"Removal\\\", _templateData, _templateDataMappings);\\n }\\n\\n /// @notice Changes the params related to arbitration.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence module for the arbitrator.\\n function changeArbitrationParams(\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule\\n ) external onlyGovernor {\\n arbitrationParamsChanges.push(\\n ArbitrationParams({\\n arbitrator: _arbitrator,\\n arbitratorExtraData: _arbitratorExtraData,\\n evidenceModule: _evidenceModule\\n })\\n );\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Directly add an item to the list bypassing request-challenge. Can only be used by the relayer contract.\\n /// @param _item Stringified JSON Object containing Item data\\n function addItemDirectly(string calldata _item) external onlyRelayer {\\n bytes32 itemID = keccak256(abi.encodePacked(_item));\\n Item storage item = items[itemID];\\n require(item.status == Status.Absent, \\\"Item must be absent to be added.\\\");\\n\\n // Note that if the item is added directly once, the next time it is added it will emit this event again.\\n if (item.requestCount == 0) {\\n emit NewItem(itemID, _item, true);\\n }\\n\\n item.status = Status.Registered;\\n\\n emit ItemStatusChange(itemID, true);\\n }\\n\\n /// @dev Directly remove an item from the list bypassing request-challenge. Can only be used by the relayer contract.\\n /// @param _itemID The ID of the item to remove. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\\n function removeItemDirectly(bytes32 _itemID) external onlyRelayer {\\n Item storage item = items[_itemID];\\n require(item.status == Status.Registered, \\\"Item must be registered to be removed.\\\");\\n\\n item.status = Status.Absent;\\n\\n emit ItemStatusChange(_itemID, true);\\n }\\n\\n /// @dev Submit a request to register an item. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _item Stringified JSON object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\\n function addItem(string calldata _item) external payable {\\n bytes32 itemID = keccak256(abi.encodePacked(_item));\\n Item storage item = items[itemID];\\n\\n require(item.status == Status.Absent, \\\"Item must be absent to be added.\\\");\\n\\n // Note that if the item was added previously using `addItemDirectly`, the event will be emitted again here.\\n if (item.requestCount == 0) {\\n emit NewItem(itemID, _item, false);\\n }\\n\\n Request storage request = item.requests[item.requestCount++];\\n uint256 arbitrationParamsIndex = arbitrationParamsChanges.length - 1;\\n IArbitratorV2 arbitrator = arbitrationParamsChanges[arbitrationParamsIndex].arbitrator;\\n bytes storage arbitratorExtraData = arbitrationParamsChanges[arbitrationParamsIndex].arbitratorExtraData;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitratorExtraData);\\n uint256 totalCost = arbitrationCost + submissionBaseDeposit;\\n require(msg.value >= totalCost, \\\"You must fully fund the request.\\\");\\n\\n item.sumDeposit = totalCost;\\n item.status = Status.RegistrationRequested;\\n\\n request.requestType = RequestType.Registration;\\n request.submissionTime = uint64(block.timestamp);\\n request.arbitrationParamsIndex = uint24(arbitrationParamsIndex);\\n request.requester = payable(msg.sender);\\n\\n emit RequestSubmitted(itemID, getRequestID(itemID, item.requestCount - 1));\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Submit a request to remove an item from the list. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _itemID The ID of the item to remove.\\n /// @param _evidence Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\\n function removeItem(bytes32 _itemID, string calldata _evidence) external payable {\\n Item storage item = items[_itemID];\\n\\n require(item.status == Status.Registered, \\\"Item must be registered to be removed.\\\");\\n\\n Request storage request = item.requests[item.requestCount++];\\n uint256 arbitrationParamsIndex = arbitrationParamsChanges.length - 1;\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[arbitrationParamsIndex];\\n IArbitratorV2 arbitrator = arbitrationParams.arbitrator;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitrationParams.arbitratorExtraData);\\n uint256 totalCost = arbitrationCost + removalBaseDeposit;\\n require(msg.value >= totalCost, \\\"You must fully fund the request.\\\");\\n\\n item.sumDeposit = totalCost;\\n item.status = Status.ClearingRequested;\\n\\n request.submissionTime = uint64(block.timestamp);\\n request.arbitrationParamsIndex = uint24(arbitrationParamsIndex);\\n request.requester = payable(msg.sender);\\n request.requestType = RequestType.Clearing;\\n\\n uint256 requestID = getRequestID(_itemID, item.requestCount - 1);\\n emit RequestSubmitted(_itemID, requestID);\\n\\n // Emit evidence if it was provided.\\n if (bytes(_evidence).length > 0) {\\n arbitrationParams.evidenceModule.submitEvidence(requestID, _evidence); // TODO: add a msg.sender parameter to submitEvidence.\\n }\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Challenges the request of the item. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _itemID The ID of the item which request to challenge.\\n /// @param _evidence Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\\n function challengeRequest(bytes32 _itemID, string calldata _evidence) external payable {\\n Item storage item = items[_itemID];\\n require(item.status > Status.Registered, \\\"The item must have a pending request.\\\");\\n\\n uint256 lastRequestIndex = item.requestCount - 1;\\n Request storage request = item.requests[lastRequestIndex];\\n require(\\n block.timestamp - request.submissionTime <= challengePeriodDuration,\\n \\\"Challenges must occur during the challenge period.\\\"\\n );\\n\\n DisputeData storage disputeData = requestsDisputeData[_itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.None, \\\"The request should not have already been disputed.\\\");\\n\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n IArbitratorV2 arbitrator = arbitrationParams.arbitrator;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitrationParams.arbitratorExtraData);\\n uint256 totalCost;\\n {\\n uint256 challengerBaseDeposit = item.status == Status.RegistrationRequested\\n ? submissionChallengeBaseDeposit\\n : removalChallengeBaseDeposit;\\n totalCost = arbitrationCost + challengerBaseDeposit;\\n }\\n require(msg.value >= totalCost, \\\"You must fully fund the challenge.\\\");\\n\\n item.sumDeposit = item.sumDeposit + totalCost - arbitrationCost;\\n\\n request.challenger = payable(msg.sender);\\n\\n // Raise a dispute.\\n disputeData.disputeID = arbitrator.createDispute{value: arbitrationCost}(\\n RULING_OPTIONS,\\n arbitrationParams.arbitratorExtraData\\n );\\n disputeData.status = DisputeStatus.AwaitingRuling;\\n\\n arbitratorDisputeIDToItemID[address(arbitrator)][disputeData.disputeID] = _itemID;\\n\\n uint256 requestID = getRequestID(_itemID, lastRequestIndex);\\n uint256 templateId = request.requestType == RequestType.Registration\\n ? templateIdRegistration\\n : templateIdRemoval;\\n emit DisputeRequest(arbitrator, disputeData.disputeID, requestID, templateId, \\\"\\\");\\n\\n // Emit evidence if it was provided.\\n if (bytes(_evidence).length > 0) {\\n arbitrationParams.evidenceModule.submitEvidence(requestID, _evidence); // TODO: add a msg.sender parameter to submitEvidence.\\n }\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Executes an unchallenged request if the challenge period has passed.\\n /// @param _itemID The ID of the item to execute.\\n function executeRequest(bytes32 _itemID) external {\\n Item storage item = items[_itemID];\\n uint256 lastRequestIndex = items[_itemID].requestCount - 1;\\n\\n Request storage request = item.requests[lastRequestIndex];\\n require(\\n block.timestamp - request.submissionTime > challengePeriodDuration,\\n \\\"Time to challenge the request must pass.\\\"\\n );\\n\\n DisputeData storage disputeData = requestsDisputeData[_itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.None, \\\"The request should not be disputed.\\\");\\n\\n if (item.status == Status.RegistrationRequested) {\\n item.status = Status.Registered;\\n } else if (item.status == Status.ClearingRequested) {\\n item.status = Status.Absent;\\n } else {\\n revert(\\\"There must be a request.\\\");\\n }\\n\\n emit ItemStatusChange(_itemID, false);\\n\\n uint256 sumDeposit = item.sumDeposit;\\n item.sumDeposit = 0;\\n\\n if (sumDeposit > 0) {\\n // reimburse the requester\\n request.requester.send(sumDeposit);\\n }\\n }\\n\\n /// @dev Give a ruling for a dispute. Can only be called by the arbitrator. TRUSTED.\\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 \\\"Refused to arbitrate\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external {\\n require(_ruling <= RULING_OPTIONS, \\\"Invalid ruling option\\\");\\n\\n bytes32 itemID = arbitratorDisputeIDToItemID[msg.sender][_disputeID];\\n Item storage item = items[itemID];\\n uint256 lastRequestIndex = items[itemID].requestCount - 1;\\n Request storage request = item.requests[lastRequestIndex];\\n\\n DisputeData storage disputeData = requestsDisputeData[itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.AwaitingRuling, \\\"The request must not be resolved.\\\");\\n\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n require(address(arbitrationParams.arbitrator) == msg.sender, \\\"Only the arbitrator can give a ruling\\\");\\n\\n emit Ruling(IArbitratorV2(msg.sender), _disputeID, _ruling);\\n\\n Party winner = Party(_ruling);\\n\\n disputeData.status = DisputeStatus.Resolved;\\n disputeData.ruling = winner;\\n\\n uint256 sumDeposit = item.sumDeposit;\\n item.sumDeposit = 0;\\n\\n if (winner == Party.None) {\\n // If the arbitrator refuse to rule, then the item status should be the same it was before the request.\\n // Regarding item.status this is equivalent to the challenger winning the dispute.\\n item.status = item.status == Status.RegistrationRequested ? Status.Absent : Status.Registered;\\n\\n // Since nobody has won, then we reimburse both parties equally.\\n // If item.sumDeposit is odd, 1 wei will remain in the contract balance.\\n uint256 halfSumDeposit = sumDeposit / 2;\\n\\n request.requester.send(halfSumDeposit);\\n request.challenger.send(halfSumDeposit);\\n } else if (winner == Party.Requester) {\\n item.status = item.status == Status.RegistrationRequested ? Status.Registered : Status.Absent;\\n\\n request.requester.send(sumDeposit);\\n } else {\\n item.status = item.status == Status.RegistrationRequested ? Status.Absent : Status.Registered;\\n\\n request.challenger.send(sumDeposit);\\n }\\n\\n emit ItemStatusChange(itemID, false);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @notice Gets the local dispute ID for a given item and request.\\n /// @param _itemID The ID of the item.\\n /// @param _requestID The ID of the request.\\n /// @return Local dispute ID.\\n function getRequestID(bytes32 _itemID, uint256 _requestID) public pure returns (uint256) {\\n return uint256(keccak256(abi.encodePacked(_itemID, _requestID)));\\n }\\n\\n /// @notice Gets the arbitrator for new requests.\\n /// @dev Gets the latest value in arbitrationParamsChanges.\\n /// @return The arbitrator address.\\n function getArbitrator() external view returns (IArbitratorV2) {\\n return arbitrationParamsChanges[arbitrationParamsChanges.length - 1].arbitrator;\\n }\\n\\n /// @notice Gets the arbitratorExtraData for new requests.\\n /// @dev Gets the latest value in arbitrationParamsChanges.\\n /// @return The arbitrator extra data.\\n function getArbitratorExtraData() external view returns (bytes memory) {\\n return arbitrationParamsChanges[arbitrationParamsChanges.length - 1].arbitratorExtraData;\\n }\\n\\n /// @dev Returns item's information. Includes the total number of requests for the item\\n /// @param _itemID The ID of the queried item.\\n /// @return status The current status of the item.\\n /// @return numberOfRequests Total number of requests for the item.\\n /// @return sumDeposit The total deposit made by the requester and the challenger (if any)\\n function getItemInfo(\\n bytes32 _itemID\\n ) external view returns (Status status, uint256 numberOfRequests, uint256 sumDeposit) {\\n Item storage item = items[_itemID];\\n return (item.status, item.requestCount, item.sumDeposit);\\n }\\n\\n /// @dev Gets information on a request made for the item.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return disputed True if a dispute was raised.\\n /// @return disputeID ID of the dispute, if any.\\n /// @return submissionTime Time when the request was made.\\n /// @return resolved True if the request was executed and/or any raised disputes were resolved.\\n /// @return parties Address of requester and challenger, if any.\\n /// @return ruling The final ruling given, if any.\\n /// @return requestArbitrator The arbitrator trusted to solve disputes for this request.\\n /// @return requestArbitratorExtraData The extra data for the trusted arbitrator of this request.\\n function getRequestInfo(\\n bytes32 _itemID,\\n uint256 _requestID\\n )\\n external\\n view\\n returns (\\n bool disputed,\\n uint256 disputeID,\\n uint256 submissionTime,\\n bool resolved,\\n address payable[3] memory parties,\\n Party ruling,\\n IArbitratorV2 requestArbitrator,\\n bytes memory requestArbitratorExtraData\\n )\\n {\\n Item storage item = items[_itemID];\\n require(item.requestCount > _requestID, \\\"Request does not exist.\\\");\\n\\n Request storage request = items[_itemID].requests[_requestID];\\n\\n submissionTime = request.submissionTime;\\n parties[uint256(Party.Requester)] = request.requester;\\n parties[uint256(Party.Challenger)] = request.challenger;\\n\\n (disputed, disputeID, ruling) = getRequestDisputeData(_itemID, _requestID);\\n\\n (requestArbitrator, requestArbitratorExtraData) = getRequestArbitrationParams(_itemID, _requestID);\\n resolved = getRequestResolvedStatus(_itemID, _requestID);\\n }\\n\\n /// @dev Gets the dispute data relative to a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return disputed True if a dispute was raised.\\n /// @return disputeID ID of the dispute, if any.\\n /// @return ruling The final ruling given, if any.\\n function getRequestDisputeData(\\n bytes32 _itemID,\\n uint256 _requestID\\n ) internal view returns (bool disputed, uint256 disputeID, Party ruling) {\\n DisputeData storage disputeData = requestsDisputeData[_itemID][_requestID];\\n\\n return (disputeData.status >= DisputeStatus.AwaitingRuling, disputeData.disputeID, disputeData.ruling);\\n }\\n\\n /// @dev Gets the arbitration params relative to a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return arbitrator The arbitrator trusted to solve disputes for this request.\\n /// @return arbitratorExtraData The extra data for the trusted arbitrator of this request.\\n function getRequestArbitrationParams(\\n bytes32 _itemID,\\n uint256 _requestID\\n ) internal view returns (IArbitratorV2 arbitrator, bytes memory arbitratorExtraData) {\\n Request storage request = items[_itemID].requests[_requestID];\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n\\n return (arbitrationParams.arbitrator, arbitrationParams.arbitratorExtraData);\\n }\\n\\n /// @dev Gets the resovled status of a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return resolved True if the request was executed and/or any raised disputes were resolved.\\n function getRequestResolvedStatus(bytes32 _itemID, uint256 _requestID) internal view returns (bool resolved) {\\n Item storage item = items[_itemID];\\n\\n if (item.requestCount == 0) {\\n return false;\\n }\\n\\n if (_requestID < item.requestCount - 1) {\\n // It was resolved because it is not the last request.\\n return true;\\n }\\n\\n return item.sumDeposit == 0;\\n }\\n}\\n\",\"keccak256\":\"0x211ef2de660f69b273898c15fb693cee468fc134354c07545aea6eec2560e709\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405161087c38038061087c83398101604081905261002f91610054565b600180546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6107e9806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806306661abd146100515780630f9373ad14610067578063a2f7b3a514610092578063a63b115b146100a5575b600080fd5b6000546040519081526020015b60405180910390f35b60015461007a906001600160a01b031681565b6040516001600160a01b03909116815260200161005e565b61007a6100a03660046102f4565b6100ba565b6100b86100b336600461044b565b6100e4565b005b600081815481106100ca57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546000906100fc906001600160a01b0316610256565b9050806001600160a01b03166325b98b838d8d8d8d8d8d60405180606001604052808f60000160208101906101319190610550565b6001600160a01b031681526020018f806020019061014f9190610574565b61015890610594565b81526020018f806040019061016d9190610574565b61017690610594565b8152508d8d8d8d6040518c63ffffffff1660e01b81526004016101a39b9a999897969594939291906106ed565b600060405180830381600087803b1580156101bd57600080fd5b505af11580156101d1573d6000803e3d6000fd5b5050600080546001810182558180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b0386169081179091556040519093507f425208e08bf94a09380d60ae4ba2c26cdf95fb1e9e6a0e3e284b99a5f27bde7f9250a2505050505050505050505050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166102ef5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640160405180910390fd5b919050565b60006020828403121561030657600080fd5b5035919050565b6001600160a01b038116811461032257600080fd5b50565b80356102ef8161030d565b60008083601f84011261034257600080fd5b50813567ffffffffffffffff81111561035a57600080fd5b60208301915083602082850101111561037257600080fd5b9250929050565b60006060828403121561038b57600080fd5b50919050565b80608081018310156103a257600080fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126103cf57600080fd5b813567ffffffffffffffff808211156103ea576103ea6103a8565b604051601f8301601f19908116603f01168101908282118183101715610412576104126103a8565b8160405283815286602085880101111561042b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060008060008060008060006101a08c8e03121561046d57600080fd5b6104768c610325565b9a5061048460208d01610325565b995067ffffffffffffffff8060408e013511156104a057600080fd5b6104b08e60408f01358f01610330565b909a5098506104c160608e01610325565b97506104cf60808e01610325565b96508060a08e013511156104e257600080fd5b6104f28e60a08f01358f01610379565b95506105018e60c08f01610391565b94506101408d013593506105186101608e01610325565b9250806101808e0135111561052c57600080fd5b5061053e8d6101808e01358e016103be565b90509295989b509295989b9093969950565b60006020828403121561056257600080fd5b813561056d8161030d565b9392505050565b60008235603e1983360301811261058a57600080fd5b9190910192915050565b60006040516040810167ffffffffffffffff82821081831117156105ba576105ba6103a8565b604091825282918501368111156105d057600080fd5b855b81811015610605578035838111156105ea5760008081fd5b6105f636828a016103be565b855250602093840193016105d2565b509295945050505050565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b506000602082860101526020601f19601f83011685010191505092915050565b600082604081018360005b600281101561069057838303875261067a838351610610565b6020978801979093509190910190600101610661565b509095945050505050565b60018060a01b03815116825260006020820151606060208501526106c26060850182610656565b9050604083015184820360408601526106db8282610656565b95945050505050565b60808183375050565b6001600160a01b038c811682528b1660208201526101a060408201819052810189905260006101c08a8c8285013760008b84018201526001600160a01b038a166060840152601f19601f8c011683016001600160a01b038a166080850152818482030160a08501526107618282018a61069b565b91505061077160c08401886106e4565b8561014084015261078e6101608401866001600160a01b03169052565b8281036101808401526107a18185610610565b9e9d505050505050505050505050505056fea26469706673582212205cbfacd8b077ce163eae9cb489744d00fd679b2af08ca31db79cda945ef9f6b964736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806306661abd146100515780630f9373ad14610067578063a2f7b3a514610092578063a63b115b146100a5575b600080fd5b6000546040519081526020015b60405180910390f35b60015461007a906001600160a01b031681565b6040516001600160a01b03909116815260200161005e565b61007a6100a03660046102f4565b6100ba565b6100b86100b336600461044b565b6100e4565b005b600081815481106100ca57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546000906100fc906001600160a01b0316610256565b9050806001600160a01b03166325b98b838d8d8d8d8d8d60405180606001604052808f60000160208101906101319190610550565b6001600160a01b031681526020018f806020019061014f9190610574565b61015890610594565b81526020018f806040019061016d9190610574565b61017690610594565b8152508d8d8d8d6040518c63ffffffff1660e01b81526004016101a39b9a999897969594939291906106ed565b600060405180830381600087803b1580156101bd57600080fd5b505af11580156101d1573d6000803e3d6000fd5b5050600080546001810182558180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b0386169081179091556040519093507f425208e08bf94a09380d60ae4ba2c26cdf95fb1e9e6a0e3e284b99a5f27bde7f9250a2505050505050505050505050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166102ef5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640160405180910390fd5b919050565b60006020828403121561030657600080fd5b5035919050565b6001600160a01b038116811461032257600080fd5b50565b80356102ef8161030d565b60008083601f84011261034257600080fd5b50813567ffffffffffffffff81111561035a57600080fd5b60208301915083602082850101111561037257600080fd5b9250929050565b60006060828403121561038b57600080fd5b50919050565b80608081018310156103a257600080fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126103cf57600080fd5b813567ffffffffffffffff808211156103ea576103ea6103a8565b604051601f8301601f19908116603f01168101908282118183101715610412576104126103a8565b8160405283815286602085880101111561042b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060008060008060008060006101a08c8e03121561046d57600080fd5b6104768c610325565b9a5061048460208d01610325565b995067ffffffffffffffff8060408e013511156104a057600080fd5b6104b08e60408f01358f01610330565b909a5098506104c160608e01610325565b97506104cf60808e01610325565b96508060a08e013511156104e257600080fd5b6104f28e60a08f01358f01610379565b95506105018e60c08f01610391565b94506101408d013593506105186101608e01610325565b9250806101808e0135111561052c57600080fd5b5061053e8d6101808e01358e016103be565b90509295989b509295989b9093969950565b60006020828403121561056257600080fd5b813561056d8161030d565b9392505050565b60008235603e1983360301811261058a57600080fd5b9190910192915050565b60006040516040810167ffffffffffffffff82821081831117156105ba576105ba6103a8565b604091825282918501368111156105d057600080fd5b855b81811015610605578035838111156105ea5760008081fd5b6105f636828a016103be565b855250602093840193016105d2565b509295945050505050565b6000815180845260005b818110156106365760208185018101518683018201520161061a565b506000602082860101526020601f19601f83011685010191505092915050565b600082604081018360005b600281101561069057838303875261067a838351610610565b6020978801979093509190910190600101610661565b509095945050505050565b60018060a01b03815116825260006020820151606060208501526106c26060850182610656565b9050604083015184820360408601526106db8282610656565b95945050505050565b60808183375050565b6001600160a01b038c811682528b1660208201526101a060408201819052810189905260006101c08a8c8285013760008b84018201526001600160a01b038a166060840152601f19601f8c011683016001600160a01b038a166080850152818482030160a08501526107618282018a61069b565b91505061077160c08401886106e4565b8561014084015261078e6101608401866001600160a01b03169052565b8281036101808401526107a18185610610565b9e9d505050505050505050505050505056fea26469706673582212205cbfacd8b077ce163eae9cb489744d00fd679b2af08ca31db79cda945ef9f6b964736f6c63430008180033", "devdoc": { "events": { "NewList(address)": { @@ -219,15 +219,15 @@ "storageLayout": { "storage": [ { - "astId": 740, + "astId": 758, "contract": "src/CurateFactory.sol:CurateFactory", "label": "instances", "offset": 0, "slot": "0", - "type": "t_array(t_contract(CurateV2)2716)dyn_storage" + "type": "t_array(t_contract(CurateV2)2734)dyn_storage" }, { - "astId": 742, + "astId": 760, "contract": "src/CurateFactory.sol:CurateFactory", "label": "curate", "offset": 0, @@ -241,13 +241,13 @@ "label": "address", "numberOfBytes": "20" }, - "t_array(t_contract(CurateV2)2716)dyn_storage": { - "base": "t_contract(CurateV2)2716", + "t_array(t_contract(CurateV2)2734)dyn_storage": { + "base": "t_contract(CurateV2)2734", "encoding": "dynamic_array", "label": "contract CurateV2[]", "numberOfBytes": "32" }, - "t_contract(CurateV2)2716": { + "t_contract(CurateV2)2734": { "encoding": "inplace", "label": "contract CurateV2", "numberOfBytes": "20" diff --git a/contracts/deployments/arbitrumSepoliaDevnet/CurateV2.json b/contracts/deployments/arbitrumSepoliaDevnet/CurateV2.json index 2770256..3d412eb 100644 --- a/contracts/deployments/arbitrumSepoliaDevnet/CurateV2.json +++ b/contracts/deployments/arbitrumSepoliaDevnet/CurateV2.json @@ -1,5 +1,5 @@ { - "address": "0xd7f802cBccF319e43F58676d2717eEB0337B28D1", + "address": "0xed1f06a9963D2B2D5f2176b2dFFaaf03FC909531", "abi": [ { "anonymous": false, @@ -26,7 +26,7 @@ { "indexed": true, "internalType": "uint256", - "name": "_arbitrableDisputeID", + "name": "_arbitratorDisputeID", "type": "uint256" }, { @@ -920,28 +920,28 @@ "type": "function" } ], - "transactionHash": "0x01eb7ce08261bab0f5a192b24a0ad5e411dfe5263c24dea742513038d16da13f", + "transactionHash": "0x98301482eae60772e77e6a5717fdb403aa1d5abe3100da6ca7643360eebb4001", "receipt": { "to": null, - "from": "0xD37888F19e669874cfcCF519bf267280d70498C7", - "contractAddress": "0xd7f802cBccF319e43F58676d2717eEB0337B28D1", - "transactionIndex": 2, - "gasUsed": "2938198", + "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", + "contractAddress": "0xed1f06a9963D2B2D5f2176b2dFFaaf03FC909531", + "transactionIndex": 1, + "gasUsed": "2938834", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xb7669e8a3991e4cfd4246723801fef37fb7f655d7584305245b8cbbe39d3455d", - "transactionHash": "0x01eb7ce08261bab0f5a192b24a0ad5e411dfe5263c24dea742513038d16da13f", + "blockHash": "0xfaff7094005b81f69b871f77aafaa1cdbaf29c457b9eb6eb6d0565609b501d8c", + "transactionHash": "0x98301482eae60772e77e6a5717fdb403aa1d5abe3100da6ca7643360eebb4001", "logs": [], - "blockNumber": 34231326, - "cumulativeGasUsed": "3063038", + "blockNumber": 143682364, + "cumulativeGasUsed": "2938834", "status": 1, "byzantium": true }, "args": [], - "numDeployments": 1, - "solcInputHash": "f9af6975b5d788ca655644467f8fb5a2", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_connectedList\",\"type\":\"address\"}],\"name\":\"ConnectedListSet\",\"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\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_updatedDirectly\",\"type\":\"bool\"}],\"name\":\"ItemStatusChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_listMetadata\",\"type\":\"string\"}],\"name\":\"ListMetadataSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_data\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_addedDirectly\",\"type\":\"bool\"}],\"name\":\"NewItem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"RequestSubmitted\",\"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\":\"RULING_OPTIONS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_item\",\"type\":\"string\"}],\"name\":\"addItem\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_item\",\"type\":\"string\"}],\"name\":\"addItemDirectly\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"arbitrationParamsChanges\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract EvidenceModule\",\"name\":\"evidenceModule\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"arbitratorDisputeIDToItemID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengePeriodDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"_evidence\",\"type\":\"string\"}],\"name\":\"challengeRequest\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract EvidenceModule\",\"name\":\"_evidenceModule\",\"type\":\"address\"}],\"name\":\"changeArbitrationParams\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengePeriodDuration\",\"type\":\"uint256\"}],\"name\":\"changeChallengePeriodDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_connectedList\",\"type\":\"address\"}],\"name\":\"changeConnectedList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_listMetadata\",\"type\":\"string\"}],\"name\":\"changeListMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"changeRegistrationDisputeTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayerContract\",\"type\":\"address\"}],\"name\":\"changeRelayerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_removalBaseDeposit\",\"type\":\"uint256\"}],\"name\":\"changeRemovalBaseDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_removalChallengeBaseDeposit\",\"type\":\"uint256\"}],\"name\":\"changeRemovalChallengeBaseDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"changeRemovalDisputeTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_submissionBaseDeposit\",\"type\":\"uint256\"}],\"name\":\"changeSubmissionBaseDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_submissionChallengeBaseDeposit\",\"type\":\"uint256\"}],\"name\":\"changeSubmissionChallengeBaseDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"name\":\"changeTemplateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"executeRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getArbitrator\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getArbitratorExtraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"getItemInfo\",\"outputs\":[{\"internalType\":\"enum CurateV2.Status\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRequests\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sumDeposit\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"getRequestID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"getRequestInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"disputed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"submissionTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"resolved\",\"type\":\"bool\"},{\"internalType\":\"address payable[3]\",\"name\":\"parties\",\"type\":\"address[3]\"},{\"internalType\":\"enum CurateV2.Party\",\"name\":\"ruling\",\"type\":\"uint8\"},{\"internalType\":\"contract IArbitratorV2\",\"name\":\"requestArbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"requestArbitratorExtraData\",\"type\":\"bytes\"}],\"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 IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract EvidenceModule\",\"name\":\"_evidenceModule\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_connectedList\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"templateRegistry\",\"type\":\"address\"},{\"internalType\":\"string[2]\",\"name\":\"registrationTemplateParameters\",\"type\":\"string[2]\"},{\"internalType\":\"string[2]\",\"name\":\"removalTemplateParameters\",\"type\":\"string[2]\"}],\"internalType\":\"struct CurateV2.TemplateRegistryParams\",\"name\":\"_templateRegistryParams\",\"type\":\"tuple\"},{\"internalType\":\"uint256[4]\",\"name\":\"_baseDeposits\",\"type\":\"uint256[4]\"},{\"internalType\":\"uint256\",\"name\":\"_challengePeriodDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_relayerContract\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_listMetadata\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"items\",\"outputs\":[{\"internalType\":\"enum CurateV2.Status\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"sumDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"relayerContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removalBaseDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removalChallengeBaseDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"_evidence\",\"type\":\"string\"}],\"name\":\"removeItem\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"removeItemDirectly\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"requestsDisputeData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"},{\"internalType\":\"enum CurateV2.DisputeStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"enum CurateV2.Party\",\"name\":\"ruling\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submissionBaseDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submissionChallengeBaseDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateIdRegistration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateIdRemoval\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateRegistry\",\"outputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"ConnectedListSet(address)\":{\"details\":\"Emitted when the address of the connected Curate contract is set. The Curate is an instance of the Curate contract where each item is the address of a Curate contract related to this one.\",\"params\":{\"_connectedList\":\"The address of the connected Curate.\"}},\"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.\"}},\"ItemStatusChange(bytes32,bool)\":{\"details\":\"Emitted when a party makes a request, raises a dispute or when a request is resolved.\",\"params\":{\"_itemID\":\"The ID of the affected item.\",\"_updatedDirectly\":\"Whether this was emitted in either `addItemDirectly` or `removeItemDirectly`. This is used in the subgraph.\"}},\"ListMetadataSet(string)\":{\"details\":\"Emitted when the list metadata ipfs uri is updated.\",\"params\":{\"_listMetadata\":\"Ipfs uri to list metadata.\"}},\"NewItem(bytes32,string,bool)\":{\"details\":\"Emitted when someone submits an item for the first time.\",\"params\":{\"_addedDirectly\":\"Whether the item was added via `addItemDirectly`.\",\"_data\":\"Stringified JSON Object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json.\",\"_itemID\":\"The ID of the new item.\"}},\"RequestSubmitted(bytes32,uint256)\":{\"details\":\"Emitted when someone submits a request.\",\"params\":{\"_itemID\":\"The ID of the affected item.\",\"_requestID\":\"Unique dispute identifier within this contract.\"}},\"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\":{\"addItem(string)\":{\"details\":\"Submit a request to register an item. Accepts enough ETH to cover the deposit, reimburses the rest.\",\"params\":{\"_item\":\"Stringified JSON object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\"}},\"addItemDirectly(string)\":{\"details\":\"Directly add an item to the list bypassing request-challenge. Can only be used by the relayer contract.\",\"params\":{\"_item\":\"Stringified JSON Object containing Item data\"}},\"challengeRequest(bytes32,string)\":{\"details\":\"Challenges the request of the item. Accepts enough ETH to cover the deposit, reimburses the rest.\",\"params\":{\"_evidence\":\"A link to evidence using its URI.\",\"_itemID\":\"The ID of the item which request to challenge.\"}},\"changeArbitrationParams(address,bytes,address)\":{\"params\":{\"_arbitrator\":\"Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\",\"_arbitratorExtraData\":\"Extra data for the trusted arbitrator contract.\",\"_evidenceModule\":\"The evidence module for the arbitrator.\"}},\"changeChallengePeriodDuration(uint256)\":{\"details\":\"Change the duration of the challenge period.\",\"params\":{\"_challengePeriodDuration\":\"The new duration of the challenge period.\"}},\"changeConnectedList(address)\":{\"details\":\"Change the address of connectedList, the Curate instance that stores addresses of Curate contracts related to this one.\",\"params\":{\"_connectedList\":\"The address of the connectedList contract to use.\"}},\"changeGovernor(address)\":{\"details\":\"Change the governor of the curated registry.\",\"params\":{\"_governor\":\"The address of the new governor.\"}},\"changeListMetadata(string)\":{\"details\":\"Update list metadata ipfs uri.\",\"params\":{\"_listMetadata\":\"Ipfs uri to list metadata\"}},\"changeRegistrationDisputeTemplate(string,string)\":{\"details\":\"Changes the dispute template for registration requests.\",\"params\":{\"_templateData\":\"The new template data for registration requests.\",\"_templateDataMappings\":\"The new data mappings json for registration requests.\"}},\"changeRelayerContract(address)\":{\"details\":\"Change the address of the relay contract.\",\"params\":{\"_relayerContract\":\"The new address of the relay contract.\"}},\"changeRemovalBaseDeposit(uint256)\":{\"details\":\"Change the base amount required as a deposit to remove an item.\",\"params\":{\"_removalBaseDeposit\":\"The new base amount of wei required to remove an item.\"}},\"changeRemovalChallengeBaseDeposit(uint256)\":{\"details\":\"Change the base amount required as a deposit to challenge a removal request.\",\"params\":{\"_removalChallengeBaseDeposit\":\"The new base amount of wei required to challenge a removal request.\"}},\"changeRemovalDisputeTemplate(string,string)\":{\"details\":\"Changes the dispute template for removal requests.\",\"params\":{\"_templateData\":\"The new template data for removal requests.\",\"_templateDataMappings\":\"The new data mappings json for removal requests.\"}},\"changeSubmissionBaseDeposit(uint256)\":{\"details\":\"Change the base amount required as a deposit to submit an item.\",\"params\":{\"_submissionBaseDeposit\":\"The new base amount of wei required to submit an item.\"}},\"changeSubmissionChallengeBaseDeposit(uint256)\":{\"details\":\"Change the base amount required as a deposit to challenge a submission.\",\"params\":{\"_submissionChallengeBaseDeposit\":\"The new base amount of wei required to challenge a submission.\"}},\"changeTemplateRegistry(address)\":{\"details\":\"Changes the address of Template Registry contract.\",\"params\":{\"_templateRegistry\":\"The new template registry.\"}},\"executeRequest(bytes32)\":{\"details\":\"Executes an unchallenged request if the challenge period has passed.\",\"params\":{\"_itemID\":\"The ID of the item to execute.\"}},\"getArbitrator()\":{\"details\":\"Gets the latest value in arbitrationParamsChanges.\",\"returns\":{\"_0\":\"The arbitrator address.\"}},\"getArbitratorExtraData()\":{\"details\":\"Gets the latest value in arbitrationParamsChanges.\",\"returns\":{\"_0\":\"The arbitrator extra data.\"}},\"getItemInfo(bytes32)\":{\"details\":\"Returns item's information. Includes the total number of requests for the item\",\"params\":{\"_itemID\":\"The ID of the queried item.\"},\"returns\":{\"numberOfRequests\":\"Total number of requests for the item.\",\"status\":\"The current status of the item.\",\"sumDeposit\":\"The total deposit made by the requester and the challenger (if any)\"}},\"getRequestID(bytes32,uint256)\":{\"params\":{\"_itemID\":\"The ID of the item.\",\"_requestID\":\"The ID of the request.\"},\"returns\":{\"_0\":\"Local dispute ID.\"}},\"getRequestInfo(bytes32,uint256)\":{\"details\":\"Gets information on a request made for the item.\",\"params\":{\"_itemID\":\"The ID of the queried item.\",\"_requestID\":\"The request to be queried.\"},\"returns\":{\"disputeID\":\"ID of the dispute, if any.\",\"disputed\":\"True if a dispute was raised.\",\"parties\":\"Address of requester and challenger, if any.\",\"requestArbitrator\":\"The arbitrator trusted to solve disputes for this request.\",\"requestArbitratorExtraData\":\"The extra data for the trusted arbitrator of this request.\",\"resolved\":\"True if the request was executed and/or any raised disputes were resolved.\",\"ruling\":\"The final ruling given, if any.\",\"submissionTime\":\"Time when the request was made.\"}},\"initialize(address,address,bytes,address,address,(address,string[2],string[2]),uint256[4],uint256,address,string)\":{\"details\":\"Initialize the arbitrable curated registry.\",\"params\":{\"_arbitrator\":\"Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\",\"_arbitratorExtraData\":\"Extra data for the trusted arbitrator contract.\",\"_baseDeposits\":\"The base deposits for requests/challenges as follows: - The base deposit to submit an item. - The base deposit to remove an item. - The base deposit to challenge a submission. - The base deposit to challenge a removal request.\",\"_challengePeriodDuration\":\"The time in seconds parties have to challenge a request.\",\"_connectedList\":\"The address of the Curate contract that stores related Curate addresses. This parameter can be left empty.\",\"_evidenceModule\":\"The evidence contract for the arbitrator.\",\"_governor\":\"The trusted governor of this contract.\",\"_listMetadata\":\"Stringified JSON object containing list metadata (title, description, isListOfLists, etc.). Example at :- https://cloudflare-ipfs.com/ipfs/QmekLsbXtQfm2jJjdeC5TF1cJcr5qxarZ9bhKmCS9s3ebK/list-metadata.json\",\"_relayerContract\":\"The address of the relayer contract to add/remove items directly.\",\"_templateRegistryParams\":\"The dispute template registry. - templateRegistry : The dispute template registry. - registrationTemplateParameters : Template and data mappings json for registration requests. - removalTemplateParameters : Template and data mappings json for removal requests.\"}},\"removeItem(bytes32,string)\":{\"details\":\"Submit a request to remove an item from the list. Accepts enough ETH to cover the deposit, reimburses the rest.\",\"params\":{\"_evidence\":\"A link to evidence using its URI.\",\"_itemID\":\"The ID of the item to remove.\"}},\"removeItemDirectly(bytes32)\":{\"details\":\"Directly remove an item from the list bypassing request-challenge. Can only be used by the relayer contract.\",\"params\":{\"_itemID\":\"The ID of the item to remove. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\"}},\"rule(uint256,uint256)\":{\"details\":\"Give a ruling for a dispute. Can only be called by the arbitrator. TRUSTED.\",\"params\":{\"_disputeID\":\"ID of the dispute in the arbitrator contract.\",\"_ruling\":\"Ruling given by the arbitrator. Note that 0 is reserved for \\\"Refused to arbitrate\\\".\"}}},\"title\":\"Curate Curated registry contract compatible with V2. The V1 version is here https://github.com/kleros/tcr/blob/master/contracts/LightGeneralizedTCR.sol\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"changeArbitrationParams(address,bytes,address)\":{\"notice\":\"Changes the params related to arbitration.\"},\"getArbitrator()\":{\"notice\":\"Gets the arbitrator for new requests.\"},\"getArbitratorExtraData()\":{\"notice\":\"Gets the arbitratorExtraData for new requests.\"},\"getRequestID(bytes32,uint256)\":{\"notice\":\"Gets the local dispute ID for a given item and request.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/CurateV2.sol\":\"CurateV2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@kleros/kleros-v2-contracts/arbitration/evidence/EvidenceModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @fnanni-0]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n/// @custom:tools: []\\n\\npragma solidity 0.8.18;\\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 // ************************************* //\\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 /// @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 function initialize(address _governor) external reinitializer(1) {\\n governor = _governor;\\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 IPFS path to evidence, example: '/ipfs/Qmarwkf7C9RuzDEJNnarT3WZ7kem5bk8DZAzx78acJjMFH/evidence.json'.\\n function submitEvidence(uint256 _externalDisputeID, string calldata _evidence) external {\\n emit Evidence(_externalDisputeID, msg.sender, _evidence);\\n }\\n}\\n\",\"keccak256\":\"0x32d2c14255a266083094597f009f557e2db62727fb8a8fa9cf3f1760be58300c\",\"license\":\"MIT\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\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\":\"0x88b0038d226532e6cf862a485d162f7bca61ac3d361d6801146b55a240f091ac\",\"license\":\"MIT\"},\"@kleros/kleros-v2-contracts/arbitration/interfaces/IEvidence.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\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 IPFS path to evidence, example: '/ipfs/Qmarwkf7C9RuzDEJNnarT3WZ7kem5bk8DZAzx78acJjMFH/evidence.json'\\n event Evidence(uint256 indexed _externalDisputeID, address indexed _party, string _evidence);\\n}\\n\",\"keccak256\":\"0x3350da62267a5dad4616dafd9916fe3bfa4cdabfce124709ac3b7d087361e8c4\",\"license\":\"MIT\"},\"@kleros/kleros-v2-contracts/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 * ```\\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\":\"0xcfffacf78b92e89a0123aff2c86188abc5327bb59b223f04e1cc1267234bd828\",\"license\":\"MIT\"},\"@kleros/kleros-v2-contracts/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\":\"0xbac7476deeee8ebbfc895a42e8b50a01c7549164a48ee2ddb0e2307946ee35f9\",\"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/CurateV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @mtsalenc, @hbarcelos]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"@kleros/kleros-v2-contracts/arbitration/interfaces/IArbitrableV2.sol\\\";\\nimport {EvidenceModule} from \\\"@kleros/kleros-v2-contracts/arbitration/evidence/EvidenceModule.sol\\\";\\nimport \\\"@kleros/kleros-v2-contracts/arbitration/interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\n/// @title Curate\\n/// Curated registry contract compatible with V2. The V1 version is here https://github.com/kleros/tcr/blob/master/contracts/LightGeneralizedTCR.sol\\ncontract CurateV2 is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Status {\\n Absent, // The item is not in the registry.\\n Registered, // The item is in the registry.\\n RegistrationRequested, // The item has a request to be added to the registry.\\n ClearingRequested // The item has a request to be removed from the registry.\\n }\\n\\n enum Party {\\n None, // Party per default when there is no challenger or requester. Also used for unconclusive ruling.\\n Requester, // Party that made the request to change a status.\\n Challenger // Party that challenges the request to change a status.\\n }\\n\\n enum RequestType {\\n Registration, // Identifies a request to register an item to the registry.\\n Clearing // Identifies a request to remove an item from the registry.\\n }\\n\\n enum DisputeStatus {\\n None, // No dispute was created.\\n AwaitingRuling, // Dispute was created, but the final ruling was not given yet.\\n Resolved // Dispute was ruled.\\n }\\n\\n struct Item {\\n Status status; // The current status of the item.\\n uint256 sumDeposit; // The total deposit made by the requester and the challenger (if any).\\n uint256 requestCount; // The number of requests.\\n mapping(uint256 => Request) requests; // List of status change requests made for the item in the form requests[requestID].\\n }\\n\\n struct Request {\\n RequestType requestType;\\n uint64 submissionTime; // Time when the request was made. Used to track when the challenge period ends.\\n uint24 arbitrationParamsIndex; // The index for the arbitration params for the request.\\n address payable requester; // Address of the requester.\\n // Pack the requester together with the other parameters, as they are written in the same request.\\n address payable challenger; // Address of the challenger, if any.\\n // TODO: store templateRegistry in case it's changed?\\n }\\n\\n struct DisputeData {\\n uint256 disputeID; // The ID of the dispute on the arbitrator.\\n DisputeStatus status; // The current status of the dispute.\\n Party ruling; // The ruling given to a dispute.\\n }\\n\\n struct ArbitrationParams {\\n IArbitratorV2 arbitrator; // The arbitrator trusted to solve disputes for this request.\\n bytes arbitratorExtraData; // The extra data for the trusted arbitrator of this request.\\n EvidenceModule evidenceModule; // The evidence module for the arbitrator.\\n }\\n\\n struct TemplateRegistryParams {\\n address templateRegistry; // Dispute Template registry address\\n string[2] registrationTemplateParameters; // Template and data mappings json for registration requests.\\n string[2] removalTemplateParameters; // Template and data mappings json for removal requests.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n bool private initialized;\\n uint256 public constant RULING_OPTIONS = 2; // The amount of non 0 choices the arbitrator can give.\\n address public relayerContract; // The contract that is used to add or remove items directly to speed up the interchain communication.\\n address public governor; // The address that can make changes to the parameters of the contract.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n uint256 public templateIdRegistration; // The current dispute template identifier for registration requests.\\n uint256 public templateIdRemoval; // The current dispute template identifier for removal requests.\\n uint256 public submissionBaseDeposit; // The base deposit to submit an item.\\n uint256 public removalBaseDeposit; // The base deposit to remove an item.\\n uint256 public submissionChallengeBaseDeposit; // The base deposit to challenge a submission.\\n uint256 public removalChallengeBaseDeposit; // The base deposit to challenge a removal request.\\n uint256 public challengePeriodDuration; // The time after which a request becomes executable if not challenged.\\n\\n mapping(bytes32 => Item) public items; // Maps the item ID to its data in the form items[_itemID].\\n mapping(address => mapping(uint256 => bytes32)) public arbitratorDisputeIDToItemID; // Maps a dispute ID to the ID of the item with the disputed request in the form arbitratorDisputeIDToItemID[arbitrator][disputeID].\\n mapping(bytes32 => mapping(uint256 => DisputeData)) public requestsDisputeData; // Maps an item and a request to the data of the dispute related to them. requestsDisputeData[itemID][requestIndex]\\n ArbitrationParams[] public arbitrationParamsChanges;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyGovernor() {\\n require(msg.sender == governor, \\\"The caller must be the governor.\\\");\\n _;\\n }\\n\\n modifier onlyRelayer() {\\n require(msg.sender == relayerContract, \\\"The caller must be the relay.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a party makes a request, raises a dispute or when a request is resolved.\\n /// @param _itemID The ID of the affected item.\\n /// @param _updatedDirectly Whether this was emitted in either `addItemDirectly` or `removeItemDirectly`. This is used in the subgraph.\\n event ItemStatusChange(bytes32 indexed _itemID, bool _updatedDirectly);\\n\\n /// @dev Emitted when someone submits an item for the first time.\\n /// @param _itemID The ID of the new item.\\n /// @param _data Stringified JSON Object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json.\\n /// @param _addedDirectly Whether the item was added via `addItemDirectly`.\\n event NewItem(bytes32 indexed _itemID, string _data, bool _addedDirectly);\\n\\n /// @dev Emitted when someone submits a request.\\n /// @param _itemID The ID of the affected item.\\n /// @param _requestID Unique dispute identifier within this contract.\\n event RequestSubmitted(bytes32 indexed _itemID, uint256 _requestID);\\n\\n /// @dev Emitted when the address of the connected Curate contract is set. The Curate is an instance of the Curate contract where each item is the address of a Curate contract related to this one.\\n /// @param _connectedList The address of the connected Curate.\\n event ConnectedListSet(address indexed _connectedList);\\n\\n /// @dev Emitted when the list metadata ipfs uri is updated.\\n /// @param _listMetadata Ipfs uri to list metadata.\\n event ListMetadataSet(string _listMetadata);\\n\\n // ************************************* //\\n // * Initializer * //\\n // ************************************* //\\n\\n /// @dev Initialize the arbitrable curated registry.\\n /// @param _governor The trusted governor of this contract.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence contract for the arbitrator.\\n /// @param _connectedList The address of the Curate contract that stores related Curate addresses. This parameter can be left empty.\\n /// @param _templateRegistryParams The dispute template registry.\\n /// - templateRegistry : The dispute template registry.\\n /// - registrationTemplateParameters : Template and data mappings json for registration requests.\\n /// - removalTemplateParameters : Template and data mappings json for removal requests.\\n /// @param _baseDeposits The base deposits for requests/challenges as follows:\\n /// - The base deposit to submit an item.\\n /// - The base deposit to remove an item.\\n /// - The base deposit to challenge a submission.\\n /// - The base deposit to challenge a removal request.\\n /// @param _challengePeriodDuration The time in seconds parties have to challenge a request.\\n /// @param _relayerContract The address of the relayer contract to add/remove items directly.\\n /// @param _listMetadata Stringified JSON object containing list metadata (title, description, isListOfLists, etc.). Example at :- https://cloudflare-ipfs.com/ipfs/QmekLsbXtQfm2jJjdeC5TF1cJcr5qxarZ9bhKmCS9s3ebK/list-metadata.json\\n function initialize(\\n address _governor,\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule,\\n address _connectedList,\\n TemplateRegistryParams calldata _templateRegistryParams,\\n uint256[4] calldata _baseDeposits,\\n uint256 _challengePeriodDuration,\\n address _relayerContract,\\n string calldata _listMetadata\\n ) external {\\n require(!initialized, \\\"Already initialized.\\\");\\n initialized = true;\\n\\n governor = _governor;\\n submissionBaseDeposit = _baseDeposits[0];\\n removalBaseDeposit = _baseDeposits[1];\\n submissionChallengeBaseDeposit = _baseDeposits[2];\\n removalChallengeBaseDeposit = _baseDeposits[3];\\n challengePeriodDuration = _challengePeriodDuration;\\n relayerContract = _relayerContract;\\n\\n templateRegistry = IDisputeTemplateRegistry(_templateRegistryParams.templateRegistry);\\n templateIdRegistration = templateRegistry.setDisputeTemplate(\\n \\\"Registration\\\",\\n _templateRegistryParams.registrationTemplateParameters[0],\\n _templateRegistryParams.registrationTemplateParameters[1]\\n );\\n templateIdRemoval = templateRegistry.setDisputeTemplate(\\n \\\"Removal\\\",\\n _templateRegistryParams.removalTemplateParameters[0],\\n _templateRegistryParams.removalTemplateParameters[1]\\n );\\n\\n arbitrationParamsChanges.push(\\n ArbitrationParams({\\n arbitrator: _arbitrator,\\n arbitratorExtraData: _arbitratorExtraData,\\n evidenceModule: _evidenceModule\\n })\\n );\\n\\n if (_connectedList != address(0)) {\\n emit ConnectedListSet(_connectedList);\\n }\\n\\n emit ListMetadataSet(_listMetadata);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Change the duration of the challenge period.\\n /// @param _challengePeriodDuration The new duration of the challenge period.\\n function changeChallengePeriodDuration(uint256 _challengePeriodDuration) external onlyGovernor {\\n challengePeriodDuration = _challengePeriodDuration;\\n }\\n\\n /// @dev Change the base amount required as a deposit to submit an item.\\n /// @param _submissionBaseDeposit The new base amount of wei required to submit an item.\\n function changeSubmissionBaseDeposit(uint256 _submissionBaseDeposit) external onlyGovernor {\\n submissionBaseDeposit = _submissionBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to remove an item.\\n /// @param _removalBaseDeposit The new base amount of wei required to remove an item.\\n function changeRemovalBaseDeposit(uint256 _removalBaseDeposit) external onlyGovernor {\\n removalBaseDeposit = _removalBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to challenge a submission.\\n /// @param _submissionChallengeBaseDeposit The new base amount of wei required to challenge a submission.\\n function changeSubmissionChallengeBaseDeposit(uint256 _submissionChallengeBaseDeposit) external onlyGovernor {\\n submissionChallengeBaseDeposit = _submissionChallengeBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to challenge a removal request.\\n /// @param _removalChallengeBaseDeposit The new base amount of wei required to challenge a removal request.\\n function changeRemovalChallengeBaseDeposit(uint256 _removalChallengeBaseDeposit) external onlyGovernor {\\n removalChallengeBaseDeposit = _removalChallengeBaseDeposit;\\n }\\n\\n /// @dev Change the governor of the curated registry.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external onlyGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Change the address of connectedList, the Curate instance that stores addresses of Curate contracts related to this one.\\n /// @param _connectedList The address of the connectedList contract to use.\\n function changeConnectedList(address _connectedList) external onlyGovernor {\\n emit ConnectedListSet(_connectedList);\\n }\\n\\n /// @dev Update list metadata ipfs uri.\\n /// @param _listMetadata Ipfs uri to list metadata\\n function changeListMetadata(string calldata _listMetadata) external onlyGovernor {\\n emit ListMetadataSet(_listMetadata);\\n }\\n\\n /// @dev Change the address of the relay contract.\\n /// @param _relayerContract The new address of the relay contract.\\n function changeRelayerContract(address _relayerContract) external onlyGovernor {\\n relayerContract = _relayerContract;\\n }\\n\\n /// @dev Changes the address of Template Registry contract.\\n /// @param _templateRegistry The new template registry.\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external onlyGovernor {\\n templateRegistry = _templateRegistry;\\n // TODO: automatically set templates upon changing the registry.\\n }\\n\\n /// @dev Changes the dispute template for registration requests.\\n /// @param _templateData The new template data for registration requests.\\n /// @param _templateDataMappings The new data mappings json for registration requests.\\n function changeRegistrationDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyGovernor {\\n templateIdRegistration = templateRegistry.setDisputeTemplate(\\n \\\"Registration\\\",\\n _templateData,\\n _templateDataMappings\\n );\\n }\\n\\n /// @dev Changes the dispute template for removal requests.\\n /// @param _templateData The new template data for removal requests.\\n /// @param _templateDataMappings The new data mappings json for removal requests.\\n function changeRemovalDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyGovernor {\\n templateIdRemoval = templateRegistry.setDisputeTemplate(\\\"Removal\\\", _templateData, _templateDataMappings);\\n }\\n\\n /// @notice Changes the params related to arbitration.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence module for the arbitrator.\\n function changeArbitrationParams(\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule\\n ) external onlyGovernor {\\n arbitrationParamsChanges.push(\\n ArbitrationParams({\\n arbitrator: _arbitrator,\\n arbitratorExtraData: _arbitratorExtraData,\\n evidenceModule: _evidenceModule\\n })\\n );\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Directly add an item to the list bypassing request-challenge. Can only be used by the relayer contract.\\n /// @param _item Stringified JSON Object containing Item data\\n function addItemDirectly(string calldata _item) external onlyRelayer {\\n bytes32 itemID = keccak256(abi.encodePacked(_item));\\n Item storage item = items[itemID];\\n require(item.status == Status.Absent, \\\"Item must be absent to be added.\\\");\\n\\n // Note that if the item is added directly once, the next time it is added it will emit this event again.\\n if (item.requestCount == 0) {\\n emit NewItem(itemID, _item, true);\\n }\\n\\n item.status = Status.Registered;\\n\\n emit ItemStatusChange(itemID, true);\\n }\\n\\n /// @dev Directly remove an item from the list bypassing request-challenge. Can only be used by the relayer contract.\\n /// @param _itemID The ID of the item to remove. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\\n function removeItemDirectly(bytes32 _itemID) external onlyRelayer {\\n Item storage item = items[_itemID];\\n require(item.status == Status.Registered, \\\"Item must be registered to be removed.\\\");\\n\\n item.status = Status.Absent;\\n\\n emit ItemStatusChange(_itemID, true);\\n }\\n\\n /// @dev Submit a request to register an item. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _item Stringified JSON object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\\n function addItem(string calldata _item) external payable {\\n bytes32 itemID = keccak256(abi.encodePacked(_item));\\n Item storage item = items[itemID];\\n\\n require(item.status == Status.Absent, \\\"Item must be absent to be added.\\\");\\n\\n // Note that if the item was added previously using `addItemDirectly`, the event will be emitted again here.\\n if (item.requestCount == 0) {\\n emit NewItem(itemID, _item, false);\\n }\\n\\n Request storage request = item.requests[item.requestCount++];\\n uint256 arbitrationParamsIndex = arbitrationParamsChanges.length - 1;\\n IArbitratorV2 arbitrator = arbitrationParamsChanges[arbitrationParamsIndex].arbitrator;\\n bytes storage arbitratorExtraData = arbitrationParamsChanges[arbitrationParamsIndex].arbitratorExtraData;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitratorExtraData);\\n uint256 totalCost = arbitrationCost + submissionBaseDeposit;\\n require(msg.value >= totalCost, \\\"You must fully fund the request.\\\");\\n\\n item.sumDeposit = totalCost;\\n item.status = Status.RegistrationRequested;\\n\\n request.requestType = RequestType.Registration;\\n request.submissionTime = uint64(block.timestamp);\\n request.arbitrationParamsIndex = uint24(arbitrationParamsIndex);\\n request.requester = payable(msg.sender);\\n\\n emit RequestSubmitted(itemID, getRequestID(itemID, item.requestCount - 1));\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Submit a request to remove an item from the list. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _itemID The ID of the item to remove.\\n /// @param _evidence A link to evidence using its URI.\\n function removeItem(bytes32 _itemID, string calldata _evidence) external payable {\\n Item storage item = items[_itemID];\\n\\n require(item.status == Status.Registered, \\\"Item must be registered to be removed.\\\");\\n\\n Request storage request = item.requests[item.requestCount++];\\n uint256 arbitrationParamsIndex = arbitrationParamsChanges.length - 1;\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[arbitrationParamsIndex];\\n IArbitratorV2 arbitrator = arbitrationParams.arbitrator;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitrationParams.arbitratorExtraData);\\n uint256 totalCost = arbitrationCost + removalBaseDeposit;\\n require(msg.value >= totalCost, \\\"You must fully fund the request.\\\");\\n\\n item.sumDeposit = totalCost;\\n item.status = Status.ClearingRequested;\\n\\n request.submissionTime = uint64(block.timestamp);\\n request.arbitrationParamsIndex = uint24(arbitrationParamsIndex);\\n request.requester = payable(msg.sender);\\n request.requestType = RequestType.Clearing;\\n\\n uint256 requestID = getRequestID(_itemID, item.requestCount - 1);\\n emit RequestSubmitted(_itemID, requestID);\\n\\n // Emit evidence if it was provided.\\n if (bytes(_evidence).length > 0) {\\n arbitrationParams.evidenceModule.submitEvidence(requestID, _evidence); // TODO: add a msg.sender parameter to submitEvidence.\\n }\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Challenges the request of the item. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _itemID The ID of the item which request to challenge.\\n /// @param _evidence A link to evidence using its URI.\\n function challengeRequest(bytes32 _itemID, string calldata _evidence) external payable {\\n Item storage item = items[_itemID];\\n require(item.status > Status.Registered, \\\"The item must have a pending request.\\\");\\n\\n uint256 lastRequestIndex = item.requestCount - 1;\\n Request storage request = item.requests[lastRequestIndex];\\n require(\\n block.timestamp - request.submissionTime <= challengePeriodDuration,\\n \\\"Challenges must occur during the challenge period.\\\"\\n );\\n\\n DisputeData storage disputeData = requestsDisputeData[_itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.None, \\\"The request should not have already been disputed.\\\");\\n\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n IArbitratorV2 arbitrator = arbitrationParams.arbitrator;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitrationParams.arbitratorExtraData);\\n uint256 totalCost;\\n {\\n uint256 challengerBaseDeposit = item.status == Status.RegistrationRequested\\n ? submissionChallengeBaseDeposit\\n : removalChallengeBaseDeposit;\\n totalCost = arbitrationCost + challengerBaseDeposit;\\n }\\n require(msg.value >= totalCost, \\\"You must fully fund the challenge.\\\");\\n\\n item.sumDeposit = item.sumDeposit + totalCost - arbitrationCost;\\n\\n request.challenger = payable(msg.sender);\\n\\n // Raise a dispute.\\n disputeData.disputeID = arbitrator.createDispute{value: arbitrationCost}(\\n RULING_OPTIONS,\\n arbitrationParams.arbitratorExtraData\\n );\\n disputeData.status = DisputeStatus.AwaitingRuling;\\n\\n arbitratorDisputeIDToItemID[address(arbitrator)][disputeData.disputeID] = _itemID;\\n\\n uint256 requestID = getRequestID(_itemID, lastRequestIndex);\\n uint256 templateId = request.requestType == RequestType.Registration\\n ? templateIdRegistration\\n : templateIdRemoval;\\n emit DisputeRequest(arbitrator, disputeData.disputeID, requestID, templateId, \\\"\\\");\\n\\n // Emit evidence if it was provided.\\n if (bytes(_evidence).length > 0) {\\n arbitrationParams.evidenceModule.submitEvidence(requestID, _evidence); // TODO: add a msg.sender parameter to submitEvidence.\\n }\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Executes an unchallenged request if the challenge period has passed.\\n /// @param _itemID The ID of the item to execute.\\n function executeRequest(bytes32 _itemID) external {\\n Item storage item = items[_itemID];\\n uint256 lastRequestIndex = items[_itemID].requestCount - 1;\\n\\n Request storage request = item.requests[lastRequestIndex];\\n require(\\n block.timestamp - request.submissionTime > challengePeriodDuration,\\n \\\"Time to challenge the request must pass.\\\"\\n );\\n\\n DisputeData storage disputeData = requestsDisputeData[_itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.None, \\\"The request should not be disputed.\\\");\\n\\n if (item.status == Status.RegistrationRequested) {\\n item.status = Status.Registered;\\n } else if (item.status == Status.ClearingRequested) {\\n item.status = Status.Absent;\\n } else {\\n revert(\\\"There must be a request.\\\");\\n }\\n\\n emit ItemStatusChange(_itemID, false);\\n\\n uint256 sumDeposit = item.sumDeposit;\\n item.sumDeposit = 0;\\n\\n if (sumDeposit > 0) {\\n // reimburse the requester\\n request.requester.send(sumDeposit);\\n }\\n }\\n\\n /// @dev Give a ruling for a dispute. Can only be called by the arbitrator. TRUSTED.\\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 \\\"Refused to arbitrate\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external {\\n require(_ruling <= RULING_OPTIONS, \\\"Invalid ruling option\\\");\\n\\n bytes32 itemID = arbitratorDisputeIDToItemID[msg.sender][_disputeID];\\n Item storage item = items[itemID];\\n uint256 lastRequestIndex = items[itemID].requestCount - 1;\\n Request storage request = item.requests[lastRequestIndex];\\n\\n DisputeData storage disputeData = requestsDisputeData[itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.AwaitingRuling, \\\"The request must not be resolved.\\\");\\n\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n require(address(arbitrationParams.arbitrator) == msg.sender, \\\"Only the arbitrator can give a ruling\\\");\\n\\n emit Ruling(IArbitratorV2(msg.sender), _disputeID, _ruling);\\n\\n Party winner = Party(_ruling);\\n\\n disputeData.status = DisputeStatus.Resolved;\\n disputeData.ruling = winner;\\n\\n uint256 sumDeposit = item.sumDeposit;\\n item.sumDeposit = 0;\\n\\n if (winner == Party.None) {\\n // If the arbitrator refuse to rule, then the item status should be the same it was before the request.\\n // Regarding item.status this is equivalent to the challenger winning the dispute.\\n item.status = item.status == Status.RegistrationRequested ? Status.Absent : Status.Registered;\\n\\n // Since nobody has won, then we reimburse both parties equally.\\n // If item.sumDeposit is odd, 1 wei will remain in the contract balance.\\n uint256 halfSumDeposit = sumDeposit / 2;\\n\\n request.requester.send(halfSumDeposit);\\n request.challenger.send(halfSumDeposit);\\n } else if (winner == Party.Requester) {\\n item.status = item.status == Status.RegistrationRequested ? Status.Registered : Status.Absent;\\n\\n request.requester.send(sumDeposit);\\n } else {\\n item.status = item.status == Status.RegistrationRequested ? Status.Absent : Status.Registered;\\n\\n request.challenger.send(sumDeposit);\\n }\\n\\n emit ItemStatusChange(itemID, false);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @notice Gets the local dispute ID for a given item and request.\\n /// @param _itemID The ID of the item.\\n /// @param _requestID The ID of the request.\\n /// @return Local dispute ID.\\n function getRequestID(bytes32 _itemID, uint256 _requestID) public pure returns (uint256) {\\n return uint256(keccak256(abi.encodePacked(_itemID, _requestID)));\\n }\\n\\n /// @notice Gets the arbitrator for new requests.\\n /// @dev Gets the latest value in arbitrationParamsChanges.\\n /// @return The arbitrator address.\\n function getArbitrator() external view returns (IArbitratorV2) {\\n return arbitrationParamsChanges[arbitrationParamsChanges.length - 1].arbitrator;\\n }\\n\\n /// @notice Gets the arbitratorExtraData for new requests.\\n /// @dev Gets the latest value in arbitrationParamsChanges.\\n /// @return The arbitrator extra data.\\n function getArbitratorExtraData() external view returns (bytes memory) {\\n return arbitrationParamsChanges[arbitrationParamsChanges.length - 1].arbitratorExtraData;\\n }\\n\\n /// @dev Returns item's information. Includes the total number of requests for the item\\n /// @param _itemID The ID of the queried item.\\n /// @return status The current status of the item.\\n /// @return numberOfRequests Total number of requests for the item.\\n /// @return sumDeposit The total deposit made by the requester and the challenger (if any)\\n function getItemInfo(\\n bytes32 _itemID\\n ) external view returns (Status status, uint256 numberOfRequests, uint256 sumDeposit) {\\n Item storage item = items[_itemID];\\n return (item.status, item.requestCount, item.sumDeposit);\\n }\\n\\n /// @dev Gets information on a request made for the item.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return disputed True if a dispute was raised.\\n /// @return disputeID ID of the dispute, if any.\\n /// @return submissionTime Time when the request was made.\\n /// @return resolved True if the request was executed and/or any raised disputes were resolved.\\n /// @return parties Address of requester and challenger, if any.\\n /// @return ruling The final ruling given, if any.\\n /// @return requestArbitrator The arbitrator trusted to solve disputes for this request.\\n /// @return requestArbitratorExtraData The extra data for the trusted arbitrator of this request.\\n function getRequestInfo(\\n bytes32 _itemID,\\n uint256 _requestID\\n )\\n external\\n view\\n returns (\\n bool disputed,\\n uint256 disputeID,\\n uint256 submissionTime,\\n bool resolved,\\n address payable[3] memory parties,\\n Party ruling,\\n IArbitratorV2 requestArbitrator,\\n bytes memory requestArbitratorExtraData\\n )\\n {\\n Item storage item = items[_itemID];\\n require(item.requestCount > _requestID, \\\"Request does not exist.\\\");\\n\\n Request storage request = items[_itemID].requests[_requestID];\\n\\n submissionTime = request.submissionTime;\\n parties[uint256(Party.Requester)] = request.requester;\\n parties[uint256(Party.Challenger)] = request.challenger;\\n\\n (disputed, disputeID, ruling) = getRequestDisputeData(_itemID, _requestID);\\n\\n (requestArbitrator, requestArbitratorExtraData) = getRequestArbitrationParams(_itemID, _requestID);\\n resolved = getRequestResolvedStatus(_itemID, _requestID);\\n }\\n\\n /// @dev Gets the dispute data relative to a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return disputed True if a dispute was raised.\\n /// @return disputeID ID of the dispute, if any.\\n /// @return ruling The final ruling given, if any.\\n function getRequestDisputeData(\\n bytes32 _itemID,\\n uint256 _requestID\\n ) internal view returns (bool disputed, uint256 disputeID, Party ruling) {\\n DisputeData storage disputeData = requestsDisputeData[_itemID][_requestID];\\n\\n return (disputeData.status >= DisputeStatus.AwaitingRuling, disputeData.disputeID, disputeData.ruling);\\n }\\n\\n /// @dev Gets the arbitration params relative to a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return arbitrator The arbitrator trusted to solve disputes for this request.\\n /// @return arbitratorExtraData The extra data for the trusted arbitrator of this request.\\n function getRequestArbitrationParams(\\n bytes32 _itemID,\\n uint256 _requestID\\n ) internal view returns (IArbitratorV2 arbitrator, bytes memory arbitratorExtraData) {\\n Request storage request = items[_itemID].requests[_requestID];\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n\\n return (arbitrationParams.arbitrator, arbitrationParams.arbitratorExtraData);\\n }\\n\\n /// @dev Gets the resovled status of a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return resolved True if the request was executed and/or any raised disputes were resolved.\\n function getRequestResolvedStatus(bytes32 _itemID, uint256 _requestID) internal view returns (bool resolved) {\\n Item storage item = items[_itemID];\\n\\n if (item.requestCount == 0) {\\n return false;\\n }\\n\\n if (_requestID < item.requestCount - 1) {\\n // It was resolved because it is not the last request.\\n return true;\\n }\\n\\n return item.sumDeposit == 0;\\n }\\n}\\n\",\"keccak256\":\"0x85407d640f7d486fdfde79a42d97a9fb6877022bf57b835157423ce597686e8a\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5061342b806100206000396000f3fe6080604052600436106102455760003560e01c80638545c6a511610139578063bb0b86ff116100b6578063ca2c3cd11161007a578063ca2c3cd11461071d578063ccfd43071461073d578063d29d8f7d1461075d578063dd78cb591461077d578063e4c0aaf41461079d578063e9c24166146107bd57600080fd5b8063bb0b86ff14610678578063bfbcff1a1461068e578063c104817d146106c2578063c2f2beea146106e2578063c669439e146106f857600080fd5b80639c81a827116100fd5780639c81a827146105bb5780639dbea446146105f3578063a0af81f014610613578063a214e71214610633578063a37b6ad41461066257600080fd5b80638545c6a514610535578063873db1a7146105555780638c88c1491461056857806395dec7cc1461058857806397e90e50146105a857600080fd5b806340f1fa65116101c7578063560f7eaf1161018b578063560f7eaf146104b25780635d06e92c146104d2578063626c47e8146104e8578063787471a9146104fd5780637932ecf31461051357600080fd5b806340f1fa65146103c557806341e57c06146103e55780634660ebbe1461040557806348f343f3146104255780634aac84e51461047457600080fd5b8063107a8bfd1161020e578063107a8bfd1461033c57806325b98b831461035257806327e9f29414610372578063311a6c561461038557806333e5d047146103a557600080fd5b806282a36d1461024a57806303f3e206146102735780630c340a24146102cd5780630c6de59b146103055780630fceb74614610327575b600080fd5b34801561025657600080fd5b5061026060095481565b6040519081526020015b60405180910390f35b34801561027f57600080fd5b506102be61028e36600461287c565b600c6020908152600092835260408084209091529082529020805460019091015460ff8082169161010090041683565b60405161026a939291906128d4565b3480156102d957600080fd5b506001546102ed906001600160a01b031681565b6040516001600160a01b03909116815260200161026a565b34801561031157600080fd5b50610325610320366004612942565b6107dd565b005b34801561033357600080fd5b506102ed61084d565b34801561034857600080fd5b5061026060035481565b34801561035e57600080fd5b5061032561036d3660046129d1565b610890565b610325610380366004612942565b610c1d565b34801561039157600080fd5b506103256103a036600461287c565b610eff565b3480156103b157600080fd5b506103256103c0366004612ae8565b611354565b3480156103d157600080fd5b506103256103e0366004612b01565b611383565b3480156103f157600080fd5b50610325610400366004612ae8565b6113d5565b34801561041157600080fd5b50610325610420366004612b01565b611477565b34801561043157600080fd5b50610465610440366004612ae8565b600a6020526000908152604090208054600182015460029092015460ff909116919083565b60405161026a93929190612b25565b34801561048057600080fd5b5061046561048f366004612ae8565b6000908152600a602052604090208054600282015460019092015460ff90911692565b3480156104be57600080fd5b506103256104cd366004612ae8565b6114c3565b3480156104de57600080fd5b5061026060045481565b3480156104f457600080fd5b50610260600281565b34801561050957600080fd5b5061026060085481565b34801561051f57600080fd5b506105286114f2565b60405161026a9190612b93565b34801561054157600080fd5b50610325610550366004612942565b6115b5565b610325610563366004612ba6565b6116d5565b34801561057457600080fd5b50610325610583366004612ae8565b611c1c565b34801561059457600080fd5b506103256105a3366004612b01565b611c4b565b6103256105b6366004612ba6565b611cac565b3480156105c757600080fd5b506102606105d6366004612bf1565b600b60209081526000928352604080842090915290825290205481565b3480156105ff57600080fd5b5061026061060e36600461287c565b611f67565b34801561061f57600080fd5b506002546102ed906001600160a01b031681565b34801561063f57600080fd5b5061065361064e366004612ae8565b611f96565b60405161026a93929190612c1d565b34801561066e57600080fd5b5061026060075481565b34801561068457600080fd5b5061026060055481565b34801561069a57600080fd5b506106ae6106a936600461287c565b612067565b60405161026a989796959493929190612c52565b3480156106ce57600080fd5b506103256106dd366004612ae8565b612167565b3480156106ee57600080fd5b5061026060065481565b34801561070457600080fd5b506000546102ed9061010090046001600160a01b031681565b34801561072957600080fd5b50610325610738366004612ce2565b612196565b34801561074957600080fd5b50610325610758366004612deb565b612299565b34801561076957600080fd5b50610325610778366004612deb565b61233f565b34801561078957600080fd5b50610325610798366004612ae8565b6123e5565b3480156107a957600080fd5b506103256107b8366004612b01565b612414565b3480156107c957600080fd5b506103256107d8366004612ae8565b612460565b6001546001600160a01b031633146108105760405162461bcd60e51b815260040161080790612e4e565b60405180910390fd5b7f13f4b17ef5086467299cf476d7b3dc951be41f777dfd04d03aefa1bb1641fcd48282604051610841929190612eac565b60405180910390a15050565b600d80546000919061086190600190612ede565b8154811061087157610871612ef1565b60009182526020909120600390910201546001600160a01b0316919050565b60005460ff16156108da5760405162461bcd60e51b815260206004820152601460248201527320b63932b0b23c9034b734ba34b0b634bd32b21760611b6044820152606401610807565b60008054600160ff199091168117825580546001600160a01b0319166001600160a01b038f16179055859060200201356005558460016020020135600655846002602002013560075584600360209081029190910135600855600985905560008054610100600160a81b0319166101006001600160a01b0387160217905561096490870187612b01565b600280546001600160a01b0319166001600160a01b03929092169182179055634a9941746109956020890189612f07565b61099f9080612f27565b6109ac60208b018b612f07565b6109ba906020810190612f27565b6040518563ffffffff1660e01b81526004016109d99493929190612f8c565b6020604051808303816000875af11580156109f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1c9190612fd1565b6003556002546001600160a01b0316634a994174610a3d6040890189612f07565b610a479080612f27565b610a5460408b018b612f07565b610a62906020810190612f27565b6040518563ffffffff1660e01b8152600401610a819493929190613004565b6020604051808303816000875af1158015610aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac49190612fd1565b600481905550600d60405180606001604052808d6001600160a01b031681526020018c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b038c811660209384015284546001808201875595835291839020845160039093020180546001600160a01b03191692909116919091178155908201519192909190820190610b739082613095565b5060409190910151600290910180546001600160a01b0319166001600160a01b03928316179055871615610bd6576040516001600160a01b038816907f344e4755cad3cd67dadc30e884f068430a1d0a62dd5d14a6a062d6e630ec298790600090a25b7f13f4b17ef5086467299cf476d7b3dc951be41f777dfd04d03aefa1bb1641fcd48282604051610c07929190612eac565b60405180910390a1505050505050505050505050565b60008282604051602001610c32929190613154565b60408051601f1981840301815291815281516020928301206000818152600a90935290822090925090815460ff166003811115610c7157610c7161289e565b14610c8e5760405162461bcd60e51b815260040161080790613164565b8060020154600003610cd857817f93e4d3e9542ddd9eea8962241d920b12b96bce26749667189fd06ed3549019e185856000604051610ccf93929190613199565b60405180910390a25b6002810180546000916003840191839182610cf2836131bf565b919050558152602001908152602001600020905060006001600d80549050610d1a9190612ede565b90506000600d8281548110610d3157610d31612ef1565b60009182526020822060039091020154600d80546001600160a01b0390921693509084908110610d6357610d63612ef1565b906000526020600020906003020160010190506000826001600160a01b031663f7434ea9836040518263ffffffff1660e01b8152600401610da49190613255565b602060405180830381865afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190612fd1565b9050600060055482610df79190613268565b905080341015610e195760405162461bcd60e51b81526004016108079061327b565b60018781018290558754600260ff199091168117895587546bffffffffffffffffffffffff1916610100426001600160401b03160262ffffff60481b191617600160481b62ffffff891602176bffffffffffffffffffffffff1633600160601b0217885588015489917f73057048557c37c893f346985dc1d461cf12b00f09397bb275613203124c2be191610eb491849161060e9190612ede565b60405190815260200160405180910390a280341115610ef357336108fc610edb8334612ede565b6040518115909202916000818181858888f150505050505b50505050505050505050565b6002811115610f485760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210393ab634b7339037b83a34b7b760591b6044820152606401610807565b336000908152600b60209081526040808320858452825280832054808452600a9092528220600281015491929091610f8290600190612ede565b60008181526003840160209081526040808320878452600c83528184208585529092529091209192509060018082015460ff166002811115610fc657610fc661289e565b1461101d5760405162461bcd60e51b815260206004820152602160248201527f5468652072657175657374206d757374206e6f74206265207265736f6c7665646044820152601760f91b6064820152608401610807565b8154600d8054600092600160481b900462ffffff1690811061104157611041612ef1565b6000918252602090912060039091020180549091506001600160a01b031633146110bb5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e206769766520612072604482015264756c696e6760d81b6064820152608401610807565b604051878152889033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a360008760028111156111065761110661289e565b600184018054600260ff19821681178355929350839261ffff1990911681179061010090849081111561113b5761113b61289e565b02179055506001860180546000918290559082600281111561115f5761115f61289e565b0361121b576002875460ff16600381111561117c5761117c61289e565b1461118857600161118b565b60005b8754889060ff191660018360038111156111a7576111a761289e565b021790555060006111b96002836132b0565b8654604051919250600160601b90046001600160a01b0316906108fc8315029083906000818181858888f150505060018801546040516001600160a01b03909116925083156108fc02915083906000818181858888f193505050505050611324565b600182600281111561122f5761122f61289e565b036112b0576002875460ff16600381111561124c5761124c61289e565b1461125857600061125b565b60015b8754889060ff191660018360038111156112775761127761289e565b02179055508454604051600160601b9091046001600160a01b0316906108fc8315029083906000818181858888f1935050505050611324565b6002875460ff1660038111156112c8576112c861289e565b146112d45760016112d7565b60005b8754889060ff191660018360038111156112f3576112f361289e565b021790555060018501546040516001600160a01b039091169082156108fc029083906000818181858888f150505050505b6040516000815288906000805160206133d68339815191529060200160405180910390a250505050505050505050565b6001546001600160a01b0316331461137e5760405162461bcd60e51b815260040161080790612e4e565b600555565b6001546001600160a01b031633146113ad5760405162461bcd60e51b815260040161080790612e4e565b600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60005461010090046001600160a01b031633146114045760405162461bcd60e51b8152600401610807906132d2565b6000818152600a602052604090206001815460ff16600381111561142a5761142a61289e565b146114475760405162461bcd60e51b815260040161080790613309565b805460ff191681556040516001815282906000805160206133d68339815191529060200160405180910390a25050565b6001546001600160a01b031633146114a15760405162461bcd60e51b815260040161080790612e4e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146114ed5760405162461bcd60e51b815260040161080790612e4e565b600955565b600d80546060919061150690600190612ede565b8154811061151657611516612ef1565b9060005260206000209060030201600101805461153290613016565b80601f016020809104026020016040519081016040528092919081815260200182805461155e90613016565b80156115ab5780601f10611580576101008083540402835291602001916115ab565b820191906000526020600020905b81548152906001019060200180831161158e57829003601f168201915b5050505050905090565b60005461010090046001600160a01b031633146115e45760405162461bcd60e51b8152600401610807906132d2565b600082826040516020016115f9929190613154565b60408051601f1981840301815291815281516020928301206000818152600a90935290822090925090815460ff1660038111156116385761163861289e565b146116555760405162461bcd60e51b815260040161080790613164565b806002015460000361169f57817f93e4d3e9542ddd9eea8962241d920b12b96bce26749667189fd06ed3549019e18585600160405161169693929190613199565b60405180910390a25b805460ff19166001908117825560405190815282906000805160206133d68339815191529060200160405180910390a250505050565b6000838152600a602052604090206001815460ff1660038111156116fb576116fb61289e565b116117565760405162461bcd60e51b815260206004820152602560248201527f546865206974656d206d757374206861766520612070656e64696e67207265716044820152643ab2b9ba1760d91b6064820152608401610807565b6000600182600201546117699190612ede565b600081815260038401602052604090206009548154929350909161179b9061010090046001600160401b031642612ede565b11156118045760405162461bcd60e51b815260206004820152603260248201527f4368616c6c656e676573206d757374206f6363757220647572696e67207468656044820152711031b430b63632b733b2903832b934b7b21760711b6064820152608401610807565b6000868152600c60209081526040808320858452909152812090600182015460ff1660028111156118375761183761289e565b1461189f5760405162461bcd60e51b815260206004820152603260248201527f54686520726571756573742073686f756c64206e6f74206861766520616c726560448201527130b23c903132b2b7103234b9b83aba32b21760711b6064820152608401610807565b8154600d8054600092600160481b900462ffffff169081106118c3576118c3612ef1565b600091825260208220600390910201805460405163f7434ea960e01b81529193506001600160a01b03169190829063f7434ea990611908906001870190600401613255565b602060405180830381865afa158015611925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119499190612fd1565b90506000806002895460ff1660038111156119665761196661289e565b1461197357600854611977565b6007545b90506119838184613268565b915050803410156119e15760405162461bcd60e51b815260206004820152602260248201527f596f75206d7573742066756c6c792066756e6420746865206368616c6c656e67604482015261329760f11b6064820152608401610807565b818189600101546119f29190613268565b6119fc9190612ede565b6001808a019190915586810180546001600160a01b0319163317905560405163c13517e160e01b81526001600160a01b0385169163c13517e1918591611a4a916002918a019060040161334f565b60206040518083038185885af1158015611a68573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a8d9190612fd1565b8086556001808701805460ff191690911790556001600160a01b0384166000908152600b602090815260408083209383529290529081208c9055611ad18c89611f67565b9050600080885460ff166001811115611aec57611aec61289e565b14611af957600454611afd565b6003545b90508660000154856001600160a01b03167f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e271868484604051611b57929190918252602082015260606040820181905260009082015260800190565b60405180910390a38a15611bdf578560020160009054906101000a90046001600160a01b03166001600160a01b031663a6a7f0eb838e8e6040518463ffffffff1660e01b8152600401611bac93929190613368565b600060405180830381600087803b158015611bc657600080fd5b505af1158015611bda573d6000803e3d6000fd5b505050505b82341115611c0d57336108fc611bf58534612ede565b6040518115909202916000818181858888f150505050505b50505050505050505050505050565b6001546001600160a01b03163314611c465760405162461bcd60e51b815260040161080790612e4e565b600655565b6001546001600160a01b03163314611c755760405162461bcd60e51b815260040161080790612e4e565b6040516001600160a01b038216907f344e4755cad3cd67dadc30e884f068430a1d0a62dd5d14a6a062d6e630ec298790600090a250565b6000838152600a602052604090206001815460ff166003811115611cd257611cd261289e565b14611cef5760405162461bcd60e51b815260040161080790613309565b6002810180546000916003840191839182611d09836131bf565b919050558152602001908152602001600020905060006001600d80549050611d319190612ede565b90506000600d8281548110611d4857611d48612ef1565b600091825260208220600390910201805460405163f7434ea960e01b81529193506001600160a01b03169190829063f7434ea990611d8d906001870190600401613255565b602060405180830381865afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce9190612fd1565b9050600060065482611de09190613268565b905080341015611e025760405162461bcd60e51b81526004016108079061327b565b60018781018290558754600360ff1991821617895587546bffffffffffffffffffffff001916610100426001600160401b03160262ffffff60481b191617600160481b62ffffff891602176bffffffffffffffffffffff001633600160601b0290911617811787556002880154600091611e81918d9161060e91612ede565b90508a7f73057048557c37c893f346985dc1d461cf12b00f09397bb275613203124c2be182604051611eb591815260200190565b60405180910390a28815611f2c57600285015460405163a6a7f0eb60e01b81526001600160a01b039091169063a6a7f0eb90611ef99084908e908e90600401613368565b600060405180830381600087803b158015611f1357600080fd5b505af1158015611f27573d6000803e3d6000fd5b505050505b81341115611f5a57336108fc611f428434612ede565b6040518115909202916000818181858888f150505050505b5050505050505050505050565b604080516020808201859052818301849052825180830384018152606090920190925280519101205b92915050565b600d8181548110611fa657600080fd5b6000918252602090912060039091020180546001820180546001600160a01b03909216935090611fd590613016565b80601f016020809104026020016040519081016040528092919081815260200182805461200190613016565b801561204e5780601f106120235761010080835404028352916020019161204e565b820191906000526020600020905b81548152906001019060200180831161203157829003601f168201915b505050600290930154919250506001600160a01b031683565b60008060008061207561285e565b6000878152600a60205260408120600281015482916060918a106120d55760405162461bcd60e51b81526020600482015260176024820152762932b8bab2b9ba103237b2b9903737ba1032bc34b9ba1760491b6044820152606401610807565b60008b8152600a602090815260408083208d845260030182529182902080546001600160a01b03600160601b82048116938a01939093526001820154909216928801929092526001600160401b036101009091041697506121368c8c6126b2565b919b50995094506121478c8c612708565b90945092506121568c8c61280d565b965050509295985092959890939650565b6001546001600160a01b031633146121915760405162461bcd60e51b815260040161080790612e4e565b600755565b6001546001600160a01b031633146121c05760405162461bcd60e51b815260040161080790612e4e565b600d6040518060600160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b0385811660209384015284546001808201875595835291839020845160039093020180546001600160a01b031916929091169190911781559082015191929091908201906122699082613095565b5060409190910151600290910180546001600160a01b0319166001600160a01b0390921691909117905550505050565b6001546001600160a01b031633146122c35760405162461bcd60e51b815260040161080790612e4e565b6002546040516312a6505d60e21b81526001600160a01b0390911690634a994174906122f5908590859060040161338b565b6020604051808303816000875af1158015612314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123389190612fd1565b6004555050565b6001546001600160a01b031633146123695760405162461bcd60e51b815260040161080790612e4e565b6002546040516312a6505d60e21b81526001600160a01b0390911690634a9941749061239b90859085906004016133c3565b6020604051808303816000875af11580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190612fd1565b6003555050565b6001546001600160a01b0316331461240f5760405162461bcd60e51b815260040161080790612e4e565b600855565b6001546001600160a01b0316331461243e5760405162461bcd60e51b815260040161080790612e4e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600a60205260408120600281015490919061248290600190612ede565b60008181526003840160205260409020600954815492935090916124b49061010090046001600160401b031642612ede565b116125125760405162461bcd60e51b815260206004820152602860248201527f54696d6520746f206368616c6c656e6765207468652072657175657374206d7560448201526739ba103830b9b99760c11b6064820152608401610807565b6000848152600c60209081526040808320858452909152812090600182015460ff1660028111156125455761254561289e565b1461259e5760405162461bcd60e51b815260206004820152602360248201527f54686520726571756573742073686f756c64206e6f742062652064697370757460448201526232b21760e91b6064820152608401610807565b6002845460ff1660038111156125b6576125b661289e565b036125d3578354600190859060ff191682805b0217905550612646565b6003845460ff1660038111156125eb576125eb61289e565b03612603578354600090859060ff19166001836125c9565b60405162461bcd60e51b81526020600482015260186024820152772a3432b9329036bab9ba1031329030903932b8bab2b9ba1760411b6044820152606401610807565b6040516000815285906000805160206133d68339815191529060200160405180910390a2600184018054600090915580156126aa578254604051600160601b9091046001600160a01b0316906108fc8315029083906000818181858888f150505050505b505050505050565b6000828152600c6020908152604080832084845290915281208190819060018082015460ff1660028111156126e9576126e961289e565b825460019093015491111597919650610100900460ff16945092505050565b6000828152600a6020908152604080832084845260030190915281208054600d805460609392859291600160481b90910462ffffff1690811061274d5761274d612ef1565b6000918252602090912060039091020180546001820180549293506001600160a01b0390911691819061277f90613016565b80601f01602080910402602001604051908101604052809291908181526020018280546127ab90613016565b80156127f85780601f106127cd576101008083540402835291602001916127f8565b820191906000526020600020905b8154815290600101906020018083116127db57829003601f168201915b505050505090509350935050505b9250929050565b6000828152600a6020526040812060028101548203612830576000915050611f90565b600181600201546128419190612ede565b831015612852576001915050611f90565b60010154159392505050565b60405180606001604052806003906020820280368337509192915050565b6000806040838503121561288f57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106128c4576128c461289e565b50565b6128d0816128b4565b9052565b838152606081016128e4846128b4565b8360208301526128f3836128b4565b826040830152949350505050565b60008083601f84011261291357600080fd5b5081356001600160401b0381111561292a57600080fd5b60208301915083602082850101111561280657600080fd5b6000806020838503121561295557600080fd5b82356001600160401b0381111561296b57600080fd5b61297785828601612901565b90969095509350505050565b6001600160a01b03811681146128c457600080fd5b80356129a381612983565b919050565b6000606082840312156129ba57600080fd5b50919050565b8060808101831015611f9057600080fd5b6000806000806000806000806000806000806101a08d8f0312156129f457600080fd5b6129fd8d612998565b9b50612a0b60208e01612998565b9a506001600160401b0360408e01351115612a2557600080fd5b612a358e60408f01358f01612901565b909a509850612a4660608e01612998565b9750612a5460808e01612998565b96506001600160401b0360a08e01351115612a6e57600080fd5b612a7e8e60a08f01358f016129a8565b9550612a8d8e60c08f016129c0565b94506101408d01359350612aa46101608e01612998565b92506001600160401b036101808e01351115612abf57600080fd5b612ad08e6101808f01358f01612901565b81935080925050509295989b509295989b509295989b565b600060208284031215612afa57600080fd5b5035919050565b600060208284031215612b1357600080fd5b8135612b1e81612983565b9392505050565b6060810160048510612b3957612b3961289e565b938152602081019290925260409091015290565b6000815180845260005b81811015612b7357602081850181015186830182015201612b57565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612b1e6020830184612b4d565b600080600060408486031215612bbb57600080fd5b8335925060208401356001600160401b03811115612bd857600080fd5b612be486828701612901565b9497909650939450505050565b60008060408385031215612c0457600080fd5b8235612c0f81612983565b946020939093013593505050565b600060018060a01b03808616835260606020840152612c3f6060840186612b4d565b9150808416604084015250949350505050565b60006101408a1515835260208a818501528960408501528815156060850152608084018860005b6003811015612c9f5781516001600160a01b031683529183019190830190600101612c79565b50505050612cb060e08401876128c7565b6001600160a01b03851661010084015280610120840152612cd381840185612b4d565b9b9a5050505050505050505050565b60008060008060608587031215612cf857600080fd5b8435612d0381612983565b935060208501356001600160401b03811115612d1e57600080fd5b612d2a87828801612901565b9094509250506040850135612d3e81612983565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612d7057600080fd5b81356001600160401b0380821115612d8a57612d8a612d49565b604051601f8301601f19908116603f01168101908282118183101715612db257612db2612d49565b81604052838152866020858801011115612dcb57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612dfe57600080fd5b82356001600160401b0380821115612e1557600080fd5b612e2186838701612d5f565b93506020850135915080821115612e3757600080fd5b50612e4485828601612d5f565b9150509250929050565b6020808252818101527f5468652063616c6c6572206d7573742062652074686520676f7665726e6f722e604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000612ec0602083018486612e83565b949350505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611f9057611f90612ec8565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112612f1d57600080fd5b9190910192915050565b6000808335601e19843603018112612f3e57600080fd5b8301803591506001600160401b03821115612f5857600080fd5b60200191503681900382131561280657600080fd5b600c81526b2932b3b4b9ba3930ba34b7b760a11b602082015260400190565b606081526000612f9e60608301612f6d565b8281036020840152612fb1818789612e83565b90508281036040840152612fc6818587612e83565b979650505050505050565b600060208284031215612fe357600080fd5b5051919050565b600781526614995b5bdd985b60ca1b602082015260400190565b606081526000612f9e60608301612fea565b600181811c9082168061302a57607f821691505b6020821081036129ba57634e487b7160e01b600052602260045260246000fd5b601f82111561309057600081815260208120601f850160051c810160208610156130715750805b601f850160051c820191505b818110156126aa5782815560010161307d565b505050565b81516001600160401b038111156130ae576130ae612d49565b6130c2816130bc8454613016565b8461304a565b602080601f8311600181146130f757600084156130df5750858301515b600019600386901b1c1916600185901b1785556126aa565b600085815260208120601f198616915b8281101561312657888601518255948401946001909101908401613107565b50858210156131445787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8183823760009101908152919050565b6020808252818101527f4974656d206d75737420626520616273656e7420746f2062652061646465642e604082015260600190565b6040815260006131ad604083018587612e83565b90508215156020830152949350505050565b6000600182016131d1576131d1612ec8565b5060010190565b600081546131e581613016565b808552602060018381168015613202576001811461321c5761324a565b60ff1985168884015283151560051b88018301955061324a565b866000528260002060005b858110156132425781548a8201860152908301908401613227565b890184019650505b505050505092915050565b602081526000612b1e60208301846131d8565b80820180821115611f9057611f90612ec8565b6020808252818101527f596f75206d7573742066756c6c792066756e642074686520726571756573742e604082015260600190565b6000826132cd57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601d908201527f5468652063616c6c6572206d757374206265207468652072656c61792e000000604082015260600190565b60208082526026908201527f4974656d206d757374206265207265676973746572656420746f20626520726560408201526536b7bb32b21760d11b606082015260800190565b828152604060208201526000612ec060408301846131d8565b838152604060208201526000613382604083018486612e83565b95945050505050565b60608152600061339d60608301612fea565b82810360208401526133af8186612b4d565b905082810360408401526133828185612b4d565b60608152600061339d60608301612f6d56fed768d67a683a3f5110d48ee5af827e22f4f36d017d764d3bfb11982492b19536a264697066735822122013de8f9c157700d16ad8f31f146a83e4850c0da8029984650aa76fef45e7c96564736f6c63430008120033", - "deployedBytecode": "0x6080604052600436106102455760003560e01c80638545c6a511610139578063bb0b86ff116100b6578063ca2c3cd11161007a578063ca2c3cd11461071d578063ccfd43071461073d578063d29d8f7d1461075d578063dd78cb591461077d578063e4c0aaf41461079d578063e9c24166146107bd57600080fd5b8063bb0b86ff14610678578063bfbcff1a1461068e578063c104817d146106c2578063c2f2beea146106e2578063c669439e146106f857600080fd5b80639c81a827116100fd5780639c81a827146105bb5780639dbea446146105f3578063a0af81f014610613578063a214e71214610633578063a37b6ad41461066257600080fd5b80638545c6a514610535578063873db1a7146105555780638c88c1491461056857806395dec7cc1461058857806397e90e50146105a857600080fd5b806340f1fa65116101c7578063560f7eaf1161018b578063560f7eaf146104b25780635d06e92c146104d2578063626c47e8146104e8578063787471a9146104fd5780637932ecf31461051357600080fd5b806340f1fa65146103c557806341e57c06146103e55780634660ebbe1461040557806348f343f3146104255780634aac84e51461047457600080fd5b8063107a8bfd1161020e578063107a8bfd1461033c57806325b98b831461035257806327e9f29414610372578063311a6c561461038557806333e5d047146103a557600080fd5b806282a36d1461024a57806303f3e206146102735780630c340a24146102cd5780630c6de59b146103055780630fceb74614610327575b600080fd5b34801561025657600080fd5b5061026060095481565b6040519081526020015b60405180910390f35b34801561027f57600080fd5b506102be61028e36600461287c565b600c6020908152600092835260408084209091529082529020805460019091015460ff8082169161010090041683565b60405161026a939291906128d4565b3480156102d957600080fd5b506001546102ed906001600160a01b031681565b6040516001600160a01b03909116815260200161026a565b34801561031157600080fd5b50610325610320366004612942565b6107dd565b005b34801561033357600080fd5b506102ed61084d565b34801561034857600080fd5b5061026060035481565b34801561035e57600080fd5b5061032561036d3660046129d1565b610890565b610325610380366004612942565b610c1d565b34801561039157600080fd5b506103256103a036600461287c565b610eff565b3480156103b157600080fd5b506103256103c0366004612ae8565b611354565b3480156103d157600080fd5b506103256103e0366004612b01565b611383565b3480156103f157600080fd5b50610325610400366004612ae8565b6113d5565b34801561041157600080fd5b50610325610420366004612b01565b611477565b34801561043157600080fd5b50610465610440366004612ae8565b600a6020526000908152604090208054600182015460029092015460ff909116919083565b60405161026a93929190612b25565b34801561048057600080fd5b5061046561048f366004612ae8565b6000908152600a602052604090208054600282015460019092015460ff90911692565b3480156104be57600080fd5b506103256104cd366004612ae8565b6114c3565b3480156104de57600080fd5b5061026060045481565b3480156104f457600080fd5b50610260600281565b34801561050957600080fd5b5061026060085481565b34801561051f57600080fd5b506105286114f2565b60405161026a9190612b93565b34801561054157600080fd5b50610325610550366004612942565b6115b5565b610325610563366004612ba6565b6116d5565b34801561057457600080fd5b50610325610583366004612ae8565b611c1c565b34801561059457600080fd5b506103256105a3366004612b01565b611c4b565b6103256105b6366004612ba6565b611cac565b3480156105c757600080fd5b506102606105d6366004612bf1565b600b60209081526000928352604080842090915290825290205481565b3480156105ff57600080fd5b5061026061060e36600461287c565b611f67565b34801561061f57600080fd5b506002546102ed906001600160a01b031681565b34801561063f57600080fd5b5061065361064e366004612ae8565b611f96565b60405161026a93929190612c1d565b34801561066e57600080fd5b5061026060075481565b34801561068457600080fd5b5061026060055481565b34801561069a57600080fd5b506106ae6106a936600461287c565b612067565b60405161026a989796959493929190612c52565b3480156106ce57600080fd5b506103256106dd366004612ae8565b612167565b3480156106ee57600080fd5b5061026060065481565b34801561070457600080fd5b506000546102ed9061010090046001600160a01b031681565b34801561072957600080fd5b50610325610738366004612ce2565b612196565b34801561074957600080fd5b50610325610758366004612deb565b612299565b34801561076957600080fd5b50610325610778366004612deb565b61233f565b34801561078957600080fd5b50610325610798366004612ae8565b6123e5565b3480156107a957600080fd5b506103256107b8366004612b01565b612414565b3480156107c957600080fd5b506103256107d8366004612ae8565b612460565b6001546001600160a01b031633146108105760405162461bcd60e51b815260040161080790612e4e565b60405180910390fd5b7f13f4b17ef5086467299cf476d7b3dc951be41f777dfd04d03aefa1bb1641fcd48282604051610841929190612eac565b60405180910390a15050565b600d80546000919061086190600190612ede565b8154811061087157610871612ef1565b60009182526020909120600390910201546001600160a01b0316919050565b60005460ff16156108da5760405162461bcd60e51b815260206004820152601460248201527320b63932b0b23c9034b734ba34b0b634bd32b21760611b6044820152606401610807565b60008054600160ff199091168117825580546001600160a01b0319166001600160a01b038f16179055859060200201356005558460016020020135600655846002602002013560075584600360209081029190910135600855600985905560008054610100600160a81b0319166101006001600160a01b0387160217905561096490870187612b01565b600280546001600160a01b0319166001600160a01b03929092169182179055634a9941746109956020890189612f07565b61099f9080612f27565b6109ac60208b018b612f07565b6109ba906020810190612f27565b6040518563ffffffff1660e01b81526004016109d99493929190612f8c565b6020604051808303816000875af11580156109f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1c9190612fd1565b6003556002546001600160a01b0316634a994174610a3d6040890189612f07565b610a479080612f27565b610a5460408b018b612f07565b610a62906020810190612f27565b6040518563ffffffff1660e01b8152600401610a819493929190613004565b6020604051808303816000875af1158015610aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac49190612fd1565b600481905550600d60405180606001604052808d6001600160a01b031681526020018c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b038c811660209384015284546001808201875595835291839020845160039093020180546001600160a01b03191692909116919091178155908201519192909190820190610b739082613095565b5060409190910151600290910180546001600160a01b0319166001600160a01b03928316179055871615610bd6576040516001600160a01b038816907f344e4755cad3cd67dadc30e884f068430a1d0a62dd5d14a6a062d6e630ec298790600090a25b7f13f4b17ef5086467299cf476d7b3dc951be41f777dfd04d03aefa1bb1641fcd48282604051610c07929190612eac565b60405180910390a1505050505050505050505050565b60008282604051602001610c32929190613154565b60408051601f1981840301815291815281516020928301206000818152600a90935290822090925090815460ff166003811115610c7157610c7161289e565b14610c8e5760405162461bcd60e51b815260040161080790613164565b8060020154600003610cd857817f93e4d3e9542ddd9eea8962241d920b12b96bce26749667189fd06ed3549019e185856000604051610ccf93929190613199565b60405180910390a25b6002810180546000916003840191839182610cf2836131bf565b919050558152602001908152602001600020905060006001600d80549050610d1a9190612ede565b90506000600d8281548110610d3157610d31612ef1565b60009182526020822060039091020154600d80546001600160a01b0390921693509084908110610d6357610d63612ef1565b906000526020600020906003020160010190506000826001600160a01b031663f7434ea9836040518263ffffffff1660e01b8152600401610da49190613255565b602060405180830381865afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190612fd1565b9050600060055482610df79190613268565b905080341015610e195760405162461bcd60e51b81526004016108079061327b565b60018781018290558754600260ff199091168117895587546bffffffffffffffffffffffff1916610100426001600160401b03160262ffffff60481b191617600160481b62ffffff891602176bffffffffffffffffffffffff1633600160601b0217885588015489917f73057048557c37c893f346985dc1d461cf12b00f09397bb275613203124c2be191610eb491849161060e9190612ede565b60405190815260200160405180910390a280341115610ef357336108fc610edb8334612ede565b6040518115909202916000818181858888f150505050505b50505050505050505050565b6002811115610f485760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210393ab634b7339037b83a34b7b760591b6044820152606401610807565b336000908152600b60209081526040808320858452825280832054808452600a9092528220600281015491929091610f8290600190612ede565b60008181526003840160209081526040808320878452600c83528184208585529092529091209192509060018082015460ff166002811115610fc657610fc661289e565b1461101d5760405162461bcd60e51b815260206004820152602160248201527f5468652072657175657374206d757374206e6f74206265207265736f6c7665646044820152601760f91b6064820152608401610807565b8154600d8054600092600160481b900462ffffff1690811061104157611041612ef1565b6000918252602090912060039091020180549091506001600160a01b031633146110bb5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e206769766520612072604482015264756c696e6760d81b6064820152608401610807565b604051878152889033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a360008760028111156111065761110661289e565b600184018054600260ff19821681178355929350839261ffff1990911681179061010090849081111561113b5761113b61289e565b02179055506001860180546000918290559082600281111561115f5761115f61289e565b0361121b576002875460ff16600381111561117c5761117c61289e565b1461118857600161118b565b60005b8754889060ff191660018360038111156111a7576111a761289e565b021790555060006111b96002836132b0565b8654604051919250600160601b90046001600160a01b0316906108fc8315029083906000818181858888f150505060018801546040516001600160a01b03909116925083156108fc02915083906000818181858888f193505050505050611324565b600182600281111561122f5761122f61289e565b036112b0576002875460ff16600381111561124c5761124c61289e565b1461125857600061125b565b60015b8754889060ff191660018360038111156112775761127761289e565b02179055508454604051600160601b9091046001600160a01b0316906108fc8315029083906000818181858888f1935050505050611324565b6002875460ff1660038111156112c8576112c861289e565b146112d45760016112d7565b60005b8754889060ff191660018360038111156112f3576112f361289e565b021790555060018501546040516001600160a01b039091169082156108fc029083906000818181858888f150505050505b6040516000815288906000805160206133d68339815191529060200160405180910390a250505050505050505050565b6001546001600160a01b0316331461137e5760405162461bcd60e51b815260040161080790612e4e565b600555565b6001546001600160a01b031633146113ad5760405162461bcd60e51b815260040161080790612e4e565b600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60005461010090046001600160a01b031633146114045760405162461bcd60e51b8152600401610807906132d2565b6000818152600a602052604090206001815460ff16600381111561142a5761142a61289e565b146114475760405162461bcd60e51b815260040161080790613309565b805460ff191681556040516001815282906000805160206133d68339815191529060200160405180910390a25050565b6001546001600160a01b031633146114a15760405162461bcd60e51b815260040161080790612e4e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146114ed5760405162461bcd60e51b815260040161080790612e4e565b600955565b600d80546060919061150690600190612ede565b8154811061151657611516612ef1565b9060005260206000209060030201600101805461153290613016565b80601f016020809104026020016040519081016040528092919081815260200182805461155e90613016565b80156115ab5780601f10611580576101008083540402835291602001916115ab565b820191906000526020600020905b81548152906001019060200180831161158e57829003601f168201915b5050505050905090565b60005461010090046001600160a01b031633146115e45760405162461bcd60e51b8152600401610807906132d2565b600082826040516020016115f9929190613154565b60408051601f1981840301815291815281516020928301206000818152600a90935290822090925090815460ff1660038111156116385761163861289e565b146116555760405162461bcd60e51b815260040161080790613164565b806002015460000361169f57817f93e4d3e9542ddd9eea8962241d920b12b96bce26749667189fd06ed3549019e18585600160405161169693929190613199565b60405180910390a25b805460ff19166001908117825560405190815282906000805160206133d68339815191529060200160405180910390a250505050565b6000838152600a602052604090206001815460ff1660038111156116fb576116fb61289e565b116117565760405162461bcd60e51b815260206004820152602560248201527f546865206974656d206d757374206861766520612070656e64696e67207265716044820152643ab2b9ba1760d91b6064820152608401610807565b6000600182600201546117699190612ede565b600081815260038401602052604090206009548154929350909161179b9061010090046001600160401b031642612ede565b11156118045760405162461bcd60e51b815260206004820152603260248201527f4368616c6c656e676573206d757374206f6363757220647572696e67207468656044820152711031b430b63632b733b2903832b934b7b21760711b6064820152608401610807565b6000868152600c60209081526040808320858452909152812090600182015460ff1660028111156118375761183761289e565b1461189f5760405162461bcd60e51b815260206004820152603260248201527f54686520726571756573742073686f756c64206e6f74206861766520616c726560448201527130b23c903132b2b7103234b9b83aba32b21760711b6064820152608401610807565b8154600d8054600092600160481b900462ffffff169081106118c3576118c3612ef1565b600091825260208220600390910201805460405163f7434ea960e01b81529193506001600160a01b03169190829063f7434ea990611908906001870190600401613255565b602060405180830381865afa158015611925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119499190612fd1565b90506000806002895460ff1660038111156119665761196661289e565b1461197357600854611977565b6007545b90506119838184613268565b915050803410156119e15760405162461bcd60e51b815260206004820152602260248201527f596f75206d7573742066756c6c792066756e6420746865206368616c6c656e67604482015261329760f11b6064820152608401610807565b818189600101546119f29190613268565b6119fc9190612ede565b6001808a019190915586810180546001600160a01b0319163317905560405163c13517e160e01b81526001600160a01b0385169163c13517e1918591611a4a916002918a019060040161334f565b60206040518083038185885af1158015611a68573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a8d9190612fd1565b8086556001808701805460ff191690911790556001600160a01b0384166000908152600b602090815260408083209383529290529081208c9055611ad18c89611f67565b9050600080885460ff166001811115611aec57611aec61289e565b14611af957600454611afd565b6003545b90508660000154856001600160a01b03167f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e271868484604051611b57929190918252602082015260606040820181905260009082015260800190565b60405180910390a38a15611bdf578560020160009054906101000a90046001600160a01b03166001600160a01b031663a6a7f0eb838e8e6040518463ffffffff1660e01b8152600401611bac93929190613368565b600060405180830381600087803b158015611bc657600080fd5b505af1158015611bda573d6000803e3d6000fd5b505050505b82341115611c0d57336108fc611bf58534612ede565b6040518115909202916000818181858888f150505050505b50505050505050505050505050565b6001546001600160a01b03163314611c465760405162461bcd60e51b815260040161080790612e4e565b600655565b6001546001600160a01b03163314611c755760405162461bcd60e51b815260040161080790612e4e565b6040516001600160a01b038216907f344e4755cad3cd67dadc30e884f068430a1d0a62dd5d14a6a062d6e630ec298790600090a250565b6000838152600a602052604090206001815460ff166003811115611cd257611cd261289e565b14611cef5760405162461bcd60e51b815260040161080790613309565b6002810180546000916003840191839182611d09836131bf565b919050558152602001908152602001600020905060006001600d80549050611d319190612ede565b90506000600d8281548110611d4857611d48612ef1565b600091825260208220600390910201805460405163f7434ea960e01b81529193506001600160a01b03169190829063f7434ea990611d8d906001870190600401613255565b602060405180830381865afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce9190612fd1565b9050600060065482611de09190613268565b905080341015611e025760405162461bcd60e51b81526004016108079061327b565b60018781018290558754600360ff1991821617895587546bffffffffffffffffffffff001916610100426001600160401b03160262ffffff60481b191617600160481b62ffffff891602176bffffffffffffffffffffff001633600160601b0290911617811787556002880154600091611e81918d9161060e91612ede565b90508a7f73057048557c37c893f346985dc1d461cf12b00f09397bb275613203124c2be182604051611eb591815260200190565b60405180910390a28815611f2c57600285015460405163a6a7f0eb60e01b81526001600160a01b039091169063a6a7f0eb90611ef99084908e908e90600401613368565b600060405180830381600087803b158015611f1357600080fd5b505af1158015611f27573d6000803e3d6000fd5b505050505b81341115611f5a57336108fc611f428434612ede565b6040518115909202916000818181858888f150505050505b5050505050505050505050565b604080516020808201859052818301849052825180830384018152606090920190925280519101205b92915050565b600d8181548110611fa657600080fd5b6000918252602090912060039091020180546001820180546001600160a01b03909216935090611fd590613016565b80601f016020809104026020016040519081016040528092919081815260200182805461200190613016565b801561204e5780601f106120235761010080835404028352916020019161204e565b820191906000526020600020905b81548152906001019060200180831161203157829003601f168201915b505050600290930154919250506001600160a01b031683565b60008060008061207561285e565b6000878152600a60205260408120600281015482916060918a106120d55760405162461bcd60e51b81526020600482015260176024820152762932b8bab2b9ba103237b2b9903737ba1032bc34b9ba1760491b6044820152606401610807565b60008b8152600a602090815260408083208d845260030182529182902080546001600160a01b03600160601b82048116938a01939093526001820154909216928801929092526001600160401b036101009091041697506121368c8c6126b2565b919b50995094506121478c8c612708565b90945092506121568c8c61280d565b965050509295985092959890939650565b6001546001600160a01b031633146121915760405162461bcd60e51b815260040161080790612e4e565b600755565b6001546001600160a01b031633146121c05760405162461bcd60e51b815260040161080790612e4e565b600d6040518060600160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b0385811660209384015284546001808201875595835291839020845160039093020180546001600160a01b031916929091169190911781559082015191929091908201906122699082613095565b5060409190910151600290910180546001600160a01b0319166001600160a01b0390921691909117905550505050565b6001546001600160a01b031633146122c35760405162461bcd60e51b815260040161080790612e4e565b6002546040516312a6505d60e21b81526001600160a01b0390911690634a994174906122f5908590859060040161338b565b6020604051808303816000875af1158015612314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123389190612fd1565b6004555050565b6001546001600160a01b031633146123695760405162461bcd60e51b815260040161080790612e4e565b6002546040516312a6505d60e21b81526001600160a01b0390911690634a9941749061239b90859085906004016133c3565b6020604051808303816000875af11580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190612fd1565b6003555050565b6001546001600160a01b0316331461240f5760405162461bcd60e51b815260040161080790612e4e565b600855565b6001546001600160a01b0316331461243e5760405162461bcd60e51b815260040161080790612e4e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600a60205260408120600281015490919061248290600190612ede565b60008181526003840160205260409020600954815492935090916124b49061010090046001600160401b031642612ede565b116125125760405162461bcd60e51b815260206004820152602860248201527f54696d6520746f206368616c6c656e6765207468652072657175657374206d7560448201526739ba103830b9b99760c11b6064820152608401610807565b6000848152600c60209081526040808320858452909152812090600182015460ff1660028111156125455761254561289e565b1461259e5760405162461bcd60e51b815260206004820152602360248201527f54686520726571756573742073686f756c64206e6f742062652064697370757460448201526232b21760e91b6064820152608401610807565b6002845460ff1660038111156125b6576125b661289e565b036125d3578354600190859060ff191682805b0217905550612646565b6003845460ff1660038111156125eb576125eb61289e565b03612603578354600090859060ff19166001836125c9565b60405162461bcd60e51b81526020600482015260186024820152772a3432b9329036bab9ba1031329030903932b8bab2b9ba1760411b6044820152606401610807565b6040516000815285906000805160206133d68339815191529060200160405180910390a2600184018054600090915580156126aa578254604051600160601b9091046001600160a01b0316906108fc8315029083906000818181858888f150505050505b505050505050565b6000828152600c6020908152604080832084845290915281208190819060018082015460ff1660028111156126e9576126e961289e565b825460019093015491111597919650610100900460ff16945092505050565b6000828152600a6020908152604080832084845260030190915281208054600d805460609392859291600160481b90910462ffffff1690811061274d5761274d612ef1565b6000918252602090912060039091020180546001820180549293506001600160a01b0390911691819061277f90613016565b80601f01602080910402602001604051908101604052809291908181526020018280546127ab90613016565b80156127f85780601f106127cd576101008083540402835291602001916127f8565b820191906000526020600020905b8154815290600101906020018083116127db57829003601f168201915b505050505090509350935050505b9250929050565b6000828152600a6020526040812060028101548203612830576000915050611f90565b600181600201546128419190612ede565b831015612852576001915050611f90565b60010154159392505050565b60405180606001604052806003906020820280368337509192915050565b6000806040838503121561288f57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106128c4576128c461289e565b50565b6128d0816128b4565b9052565b838152606081016128e4846128b4565b8360208301526128f3836128b4565b826040830152949350505050565b60008083601f84011261291357600080fd5b5081356001600160401b0381111561292a57600080fd5b60208301915083602082850101111561280657600080fd5b6000806020838503121561295557600080fd5b82356001600160401b0381111561296b57600080fd5b61297785828601612901565b90969095509350505050565b6001600160a01b03811681146128c457600080fd5b80356129a381612983565b919050565b6000606082840312156129ba57600080fd5b50919050565b8060808101831015611f9057600080fd5b6000806000806000806000806000806000806101a08d8f0312156129f457600080fd5b6129fd8d612998565b9b50612a0b60208e01612998565b9a506001600160401b0360408e01351115612a2557600080fd5b612a358e60408f01358f01612901565b909a509850612a4660608e01612998565b9750612a5460808e01612998565b96506001600160401b0360a08e01351115612a6e57600080fd5b612a7e8e60a08f01358f016129a8565b9550612a8d8e60c08f016129c0565b94506101408d01359350612aa46101608e01612998565b92506001600160401b036101808e01351115612abf57600080fd5b612ad08e6101808f01358f01612901565b81935080925050509295989b509295989b509295989b565b600060208284031215612afa57600080fd5b5035919050565b600060208284031215612b1357600080fd5b8135612b1e81612983565b9392505050565b6060810160048510612b3957612b3961289e565b938152602081019290925260409091015290565b6000815180845260005b81811015612b7357602081850181015186830182015201612b57565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612b1e6020830184612b4d565b600080600060408486031215612bbb57600080fd5b8335925060208401356001600160401b03811115612bd857600080fd5b612be486828701612901565b9497909650939450505050565b60008060408385031215612c0457600080fd5b8235612c0f81612983565b946020939093013593505050565b600060018060a01b03808616835260606020840152612c3f6060840186612b4d565b9150808416604084015250949350505050565b60006101408a1515835260208a818501528960408501528815156060850152608084018860005b6003811015612c9f5781516001600160a01b031683529183019190830190600101612c79565b50505050612cb060e08401876128c7565b6001600160a01b03851661010084015280610120840152612cd381840185612b4d565b9b9a5050505050505050505050565b60008060008060608587031215612cf857600080fd5b8435612d0381612983565b935060208501356001600160401b03811115612d1e57600080fd5b612d2a87828801612901565b9094509250506040850135612d3e81612983565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612d7057600080fd5b81356001600160401b0380821115612d8a57612d8a612d49565b604051601f8301601f19908116603f01168101908282118183101715612db257612db2612d49565b81604052838152866020858801011115612dcb57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612dfe57600080fd5b82356001600160401b0380821115612e1557600080fd5b612e2186838701612d5f565b93506020850135915080821115612e3757600080fd5b50612e4485828601612d5f565b9150509250929050565b6020808252818101527f5468652063616c6c6572206d7573742062652074686520676f7665726e6f722e604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000612ec0602083018486612e83565b949350505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611f9057611f90612ec8565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112612f1d57600080fd5b9190910192915050565b6000808335601e19843603018112612f3e57600080fd5b8301803591506001600160401b03821115612f5857600080fd5b60200191503681900382131561280657600080fd5b600c81526b2932b3b4b9ba3930ba34b7b760a11b602082015260400190565b606081526000612f9e60608301612f6d565b8281036020840152612fb1818789612e83565b90508281036040840152612fc6818587612e83565b979650505050505050565b600060208284031215612fe357600080fd5b5051919050565b600781526614995b5bdd985b60ca1b602082015260400190565b606081526000612f9e60608301612fea565b600181811c9082168061302a57607f821691505b6020821081036129ba57634e487b7160e01b600052602260045260246000fd5b601f82111561309057600081815260208120601f850160051c810160208610156130715750805b601f850160051c820191505b818110156126aa5782815560010161307d565b505050565b81516001600160401b038111156130ae576130ae612d49565b6130c2816130bc8454613016565b8461304a565b602080601f8311600181146130f757600084156130df5750858301515b600019600386901b1c1916600185901b1785556126aa565b600085815260208120601f198616915b8281101561312657888601518255948401946001909101908401613107565b50858210156131445787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8183823760009101908152919050565b6020808252818101527f4974656d206d75737420626520616273656e7420746f2062652061646465642e604082015260600190565b6040815260006131ad604083018587612e83565b90508215156020830152949350505050565b6000600182016131d1576131d1612ec8565b5060010190565b600081546131e581613016565b808552602060018381168015613202576001811461321c5761324a565b60ff1985168884015283151560051b88018301955061324a565b866000528260002060005b858110156132425781548a8201860152908301908401613227565b890184019650505b505050505092915050565b602081526000612b1e60208301846131d8565b80820180821115611f9057611f90612ec8565b6020808252818101527f596f75206d7573742066756c6c792066756e642074686520726571756573742e604082015260600190565b6000826132cd57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601d908201527f5468652063616c6c6572206d757374206265207468652072656c61792e000000604082015260600190565b60208082526026908201527f4974656d206d757374206265207265676973746572656420746f20626520726560408201526536b7bb32b21760d11b606082015260800190565b828152604060208201526000612ec060408301846131d8565b838152604060208201526000613382604083018486612e83565b95945050505050565b60608152600061339d60608301612fea565b82810360208401526133af8186612b4d565b905082810360408401526133828185612b4d565b60608152600061339d60608301612f6d56fed768d67a683a3f5110d48ee5af827e22f4f36d017d764d3bfb11982492b19536a264697066735822122013de8f9c157700d16ad8f31f146a83e4850c0da8029984650aa76fef45e7c96564736f6c63430008120033", + "numDeployments": 2, + "solcInputHash": "43d22c659b0bfc53d1499e270ad9a93b", + "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_connectedList\",\"type\":\"address\"}],\"name\":\"ConnectedListSet\",\"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\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_updatedDirectly\",\"type\":\"bool\"}],\"name\":\"ItemStatusChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_listMetadata\",\"type\":\"string\"}],\"name\":\"ListMetadataSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_data\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_addedDirectly\",\"type\":\"bool\"}],\"name\":\"NewItem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"RequestSubmitted\",\"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\":\"RULING_OPTIONS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_item\",\"type\":\"string\"}],\"name\":\"addItem\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_item\",\"type\":\"string\"}],\"name\":\"addItemDirectly\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"arbitrationParamsChanges\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract EvidenceModule\",\"name\":\"evidenceModule\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"arbitratorDisputeIDToItemID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengePeriodDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"_evidence\",\"type\":\"string\"}],\"name\":\"challengeRequest\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract EvidenceModule\",\"name\":\"_evidenceModule\",\"type\":\"address\"}],\"name\":\"changeArbitrationParams\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengePeriodDuration\",\"type\":\"uint256\"}],\"name\":\"changeChallengePeriodDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_connectedList\",\"type\":\"address\"}],\"name\":\"changeConnectedList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"name\":\"changeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_listMetadata\",\"type\":\"string\"}],\"name\":\"changeListMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"changeRegistrationDisputeTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayerContract\",\"type\":\"address\"}],\"name\":\"changeRelayerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_removalBaseDeposit\",\"type\":\"uint256\"}],\"name\":\"changeRemovalBaseDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_removalChallengeBaseDeposit\",\"type\":\"uint256\"}],\"name\":\"changeRemovalChallengeBaseDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_templateData\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_templateDataMappings\",\"type\":\"string\"}],\"name\":\"changeRemovalDisputeTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_submissionBaseDeposit\",\"type\":\"uint256\"}],\"name\":\"changeSubmissionBaseDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_submissionChallengeBaseDeposit\",\"type\":\"uint256\"}],\"name\":\"changeSubmissionChallengeBaseDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"_templateRegistry\",\"type\":\"address\"}],\"name\":\"changeTemplateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"executeRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getArbitrator\",\"outputs\":[{\"internalType\":\"contract IArbitratorV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getArbitratorExtraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"getItemInfo\",\"outputs\":[{\"internalType\":\"enum CurateV2.Status\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRequests\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sumDeposit\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"getRequestID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"getRequestInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"disputed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"submissionTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"resolved\",\"type\":\"bool\"},{\"internalType\":\"address payable[3]\",\"name\":\"parties\",\"type\":\"address[3]\"},{\"internalType\":\"enum CurateV2.Party\",\"name\":\"ruling\",\"type\":\"uint8\"},{\"internalType\":\"contract IArbitratorV2\",\"name\":\"requestArbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"requestArbitratorExtraData\",\"type\":\"bytes\"}],\"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 IArbitratorV2\",\"name\":\"_arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"contract EvidenceModule\",\"name\":\"_evidenceModule\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_connectedList\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"templateRegistry\",\"type\":\"address\"},{\"internalType\":\"string[2]\",\"name\":\"registrationTemplateParameters\",\"type\":\"string[2]\"},{\"internalType\":\"string[2]\",\"name\":\"removalTemplateParameters\",\"type\":\"string[2]\"}],\"internalType\":\"struct CurateV2.TemplateRegistryParams\",\"name\":\"_templateRegistryParams\",\"type\":\"tuple\"},{\"internalType\":\"uint256[4]\",\"name\":\"_baseDeposits\",\"type\":\"uint256[4]\"},{\"internalType\":\"uint256\",\"name\":\"_challengePeriodDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_relayerContract\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_listMetadata\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"items\",\"outputs\":[{\"internalType\":\"enum CurateV2.Status\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"sumDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"relayerContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removalBaseDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removalChallengeBaseDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"_evidence\",\"type\":\"string\"}],\"name\":\"removeItem\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"removeItemDirectly\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"requestsDisputeData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"},{\"internalType\":\"enum CurateV2.DisputeStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"enum CurateV2.Party\",\"name\":\"ruling\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ruling\",\"type\":\"uint256\"}],\"name\":\"rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submissionBaseDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submissionChallengeBaseDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateIdRegistration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateIdRemoval\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"templateRegistry\",\"outputs\":[{\"internalType\":\"contract IDisputeTemplateRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"ConnectedListSet(address)\":{\"details\":\"Emitted when the address of the connected Curate contract is set. The Curate is an instance of the Curate contract where each item is the address of a Curate contract related to this one.\",\"params\":{\"_connectedList\":\"The address of the connected Curate.\"}},\"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.\"}},\"ItemStatusChange(bytes32,bool)\":{\"details\":\"Emitted when a party makes a request, raises a dispute or when a request is resolved.\",\"params\":{\"_itemID\":\"The ID of the affected item.\",\"_updatedDirectly\":\"Whether this was emitted in either `addItemDirectly` or `removeItemDirectly`. This is used in the subgraph.\"}},\"ListMetadataSet(string)\":{\"details\":\"Emitted when the list metadata ipfs uri is updated.\",\"params\":{\"_listMetadata\":\"Ipfs uri to list metadata.\"}},\"NewItem(bytes32,string,bool)\":{\"details\":\"Emitted when someone submits an item for the first time.\",\"params\":{\"_addedDirectly\":\"Whether the item was added via `addItemDirectly`.\",\"_data\":\"Stringified JSON Object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json.\",\"_itemID\":\"The ID of the new item.\"}},\"RequestSubmitted(bytes32,uint256)\":{\"details\":\"Emitted when someone submits a request.\",\"params\":{\"_itemID\":\"The ID of the affected item.\",\"_requestID\":\"Unique dispute identifier within this contract.\"}},\"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\":{\"addItem(string)\":{\"details\":\"Submit a request to register an item. Accepts enough ETH to cover the deposit, reimburses the rest.\",\"params\":{\"_item\":\"Stringified JSON object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\"}},\"addItemDirectly(string)\":{\"details\":\"Directly add an item to the list bypassing request-challenge. Can only be used by the relayer contract.\",\"params\":{\"_item\":\"Stringified JSON Object containing Item data\"}},\"challengeRequest(bytes32,string)\":{\"details\":\"Challenges the request of the item. Accepts enough ETH to cover the deposit, reimburses the rest.\",\"params\":{\"_evidence\":\"Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\",\"_itemID\":\"The ID of the item which request to challenge.\"}},\"changeArbitrationParams(address,bytes,address)\":{\"params\":{\"_arbitrator\":\"Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\",\"_arbitratorExtraData\":\"Extra data for the trusted arbitrator contract.\",\"_evidenceModule\":\"The evidence module for the arbitrator.\"}},\"changeChallengePeriodDuration(uint256)\":{\"details\":\"Change the duration of the challenge period.\",\"params\":{\"_challengePeriodDuration\":\"The new duration of the challenge period.\"}},\"changeConnectedList(address)\":{\"details\":\"Change the address of connectedList, the Curate instance that stores addresses of Curate contracts related to this one.\",\"params\":{\"_connectedList\":\"The address of the connectedList contract to use.\"}},\"changeGovernor(address)\":{\"details\":\"Change the governor of the curated registry.\",\"params\":{\"_governor\":\"The address of the new governor.\"}},\"changeListMetadata(string)\":{\"details\":\"Update list metadata ipfs uri.\",\"params\":{\"_listMetadata\":\"Ipfs uri to list metadata\"}},\"changeRegistrationDisputeTemplate(string,string)\":{\"details\":\"Changes the dispute template for registration requests.\",\"params\":{\"_templateData\":\"The new template data for registration requests.\",\"_templateDataMappings\":\"The new data mappings json for registration requests.\"}},\"changeRelayerContract(address)\":{\"details\":\"Change the address of the relay contract.\",\"params\":{\"_relayerContract\":\"The new address of the relay contract.\"}},\"changeRemovalBaseDeposit(uint256)\":{\"details\":\"Change the base amount required as a deposit to remove an item.\",\"params\":{\"_removalBaseDeposit\":\"The new base amount of wei required to remove an item.\"}},\"changeRemovalChallengeBaseDeposit(uint256)\":{\"details\":\"Change the base amount required as a deposit to challenge a removal request.\",\"params\":{\"_removalChallengeBaseDeposit\":\"The new base amount of wei required to challenge a removal request.\"}},\"changeRemovalDisputeTemplate(string,string)\":{\"details\":\"Changes the dispute template for removal requests.\",\"params\":{\"_templateData\":\"The new template data for removal requests.\",\"_templateDataMappings\":\"The new data mappings json for removal requests.\"}},\"changeSubmissionBaseDeposit(uint256)\":{\"details\":\"Change the base amount required as a deposit to submit an item.\",\"params\":{\"_submissionBaseDeposit\":\"The new base amount of wei required to submit an item.\"}},\"changeSubmissionChallengeBaseDeposit(uint256)\":{\"details\":\"Change the base amount required as a deposit to challenge a submission.\",\"params\":{\"_submissionChallengeBaseDeposit\":\"The new base amount of wei required to challenge a submission.\"}},\"changeTemplateRegistry(address)\":{\"details\":\"Changes the address of Template Registry contract.\",\"params\":{\"_templateRegistry\":\"The new template registry.\"}},\"executeRequest(bytes32)\":{\"details\":\"Executes an unchallenged request if the challenge period has passed.\",\"params\":{\"_itemID\":\"The ID of the item to execute.\"}},\"getArbitrator()\":{\"details\":\"Gets the latest value in arbitrationParamsChanges.\",\"returns\":{\"_0\":\"The arbitrator address.\"}},\"getArbitratorExtraData()\":{\"details\":\"Gets the latest value in arbitrationParamsChanges.\",\"returns\":{\"_0\":\"The arbitrator extra data.\"}},\"getItemInfo(bytes32)\":{\"details\":\"Returns item's information. Includes the total number of requests for the item\",\"params\":{\"_itemID\":\"The ID of the queried item.\"},\"returns\":{\"numberOfRequests\":\"Total number of requests for the item.\",\"status\":\"The current status of the item.\",\"sumDeposit\":\"The total deposit made by the requester and the challenger (if any)\"}},\"getRequestID(bytes32,uint256)\":{\"params\":{\"_itemID\":\"The ID of the item.\",\"_requestID\":\"The ID of the request.\"},\"returns\":{\"_0\":\"Local dispute ID.\"}},\"getRequestInfo(bytes32,uint256)\":{\"details\":\"Gets information on a request made for the item.\",\"params\":{\"_itemID\":\"The ID of the queried item.\",\"_requestID\":\"The request to be queried.\"},\"returns\":{\"disputeID\":\"ID of the dispute, if any.\",\"disputed\":\"True if a dispute was raised.\",\"parties\":\"Address of requester and challenger, if any.\",\"requestArbitrator\":\"The arbitrator trusted to solve disputes for this request.\",\"requestArbitratorExtraData\":\"The extra data for the trusted arbitrator of this request.\",\"resolved\":\"True if the request was executed and/or any raised disputes were resolved.\",\"ruling\":\"The final ruling given, if any.\",\"submissionTime\":\"Time when the request was made.\"}},\"initialize(address,address,bytes,address,address,(address,string[2],string[2]),uint256[4],uint256,address,string)\":{\"details\":\"Initialize the arbitrable curated registry.\",\"params\":{\"_arbitrator\":\"Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\",\"_arbitratorExtraData\":\"Extra data for the trusted arbitrator contract.\",\"_baseDeposits\":\"The base deposits for requests/challenges as follows: - The base deposit to submit an item. - The base deposit to remove an item. - The base deposit to challenge a submission. - The base deposit to challenge a removal request.\",\"_challengePeriodDuration\":\"The time in seconds parties have to challenge a request.\",\"_connectedList\":\"The address of the Curate contract that stores related Curate addresses. This parameter can be left empty.\",\"_evidenceModule\":\"The evidence contract for the arbitrator.\",\"_governor\":\"The trusted governor of this contract.\",\"_listMetadata\":\"Stringified JSON object containing list metadata (title, description, isListOfLists, etc.). Example at :- https://cloudflare-ipfs.com/ipfs/QmekLsbXtQfm2jJjdeC5TF1cJcr5qxarZ9bhKmCS9s3ebK/list-metadata.json\",\"_relayerContract\":\"The address of the relayer contract to add/remove items directly.\",\"_templateRegistryParams\":\"The dispute template registry. - templateRegistry : The dispute template registry. - registrationTemplateParameters : Template and data mappings json for registration requests. - removalTemplateParameters : Template and data mappings json for removal requests.\"}},\"removeItem(bytes32,string)\":{\"details\":\"Submit a request to remove an item from the list. Accepts enough ETH to cover the deposit, reimburses the rest.\",\"params\":{\"_evidence\":\"Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\",\"_itemID\":\"The ID of the item to remove.\"}},\"removeItemDirectly(bytes32)\":{\"details\":\"Directly remove an item from the list bypassing request-challenge. Can only be used by the relayer contract.\",\"params\":{\"_itemID\":\"The ID of the item to remove. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\"}},\"rule(uint256,uint256)\":{\"details\":\"Give a ruling for a dispute. Can only be called by the arbitrator. TRUSTED.\",\"params\":{\"_disputeID\":\"ID of the dispute in the arbitrator contract.\",\"_ruling\":\"Ruling given by the arbitrator. Note that 0 is reserved for \\\"Refused to arbitrate\\\".\"}}},\"title\":\"Curate Curated registry contract compatible with V2. The V1 version is here https://github.com/kleros/tcr/blob/master/contracts/LightGeneralizedTCR.sol\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"changeArbitrationParams(address,bytes,address)\":{\"notice\":\"Changes the params related to arbitration.\"},\"getArbitrator()\":{\"notice\":\"Gets the arbitrator for new requests.\"},\"getArbitratorExtraData()\":{\"notice\":\"Gets the arbitratorExtraData for new requests.\"},\"getRequestID(bytes32,uint256)\":{\"notice\":\"Gets the local dispute ID for a given item and request.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/CurateV2.sol\":\"CurateV2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.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 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 /**\\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\",\"keccak256\":\"0xbbc8ac883ac3c0078ce5ad3e288fbb3ffcc8a30c3a98c0fda0114d64fc44fca2\",\"license\":\"MIT\"},\"src/CurateV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @mtsalenc, @hbarcelos]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"@kleros/kleros-v2-contracts/arbitration/interfaces/IArbitrableV2.sol\\\";\\nimport {EvidenceModule} from \\\"@kleros/kleros-v2-contracts/arbitration/evidence/EvidenceModule.sol\\\";\\nimport \\\"@kleros/kleros-v2-contracts/arbitration/interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\n/// @title Curate\\n/// Curated registry contract compatible with V2. The V1 version is here https://github.com/kleros/tcr/blob/master/contracts/LightGeneralizedTCR.sol\\ncontract CurateV2 is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Status {\\n Absent, // The item is not in the registry.\\n Registered, // The item is in the registry.\\n RegistrationRequested, // The item has a request to be added to the registry.\\n ClearingRequested // The item has a request to be removed from the registry.\\n }\\n\\n enum Party {\\n None, // Party per default when there is no challenger or requester. Also used for unconclusive ruling.\\n Requester, // Party that made the request to change a status.\\n Challenger // Party that challenges the request to change a status.\\n }\\n\\n enum RequestType {\\n Registration, // Identifies a request to register an item to the registry.\\n Clearing // Identifies a request to remove an item from the registry.\\n }\\n\\n enum DisputeStatus {\\n None, // No dispute was created.\\n AwaitingRuling, // Dispute was created, but the final ruling was not given yet.\\n Resolved // Dispute was ruled.\\n }\\n\\n struct Item {\\n Status status; // The current status of the item.\\n uint256 sumDeposit; // The total deposit made by the requester and the challenger (if any).\\n uint256 requestCount; // The number of requests.\\n mapping(uint256 => Request) requests; // List of status change requests made for the item in the form requests[requestID].\\n }\\n\\n struct Request {\\n RequestType requestType;\\n uint64 submissionTime; // Time when the request was made. Used to track when the challenge period ends.\\n uint24 arbitrationParamsIndex; // The index for the arbitration params for the request.\\n address payable requester; // Address of the requester.\\n // Pack the requester together with the other parameters, as they are written in the same request.\\n address payable challenger; // Address of the challenger, if any.\\n // TODO: store templateRegistry in case it's changed?\\n }\\n\\n struct DisputeData {\\n uint256 disputeID; // The ID of the dispute on the arbitrator.\\n DisputeStatus status; // The current status of the dispute.\\n Party ruling; // The ruling given to a dispute.\\n }\\n\\n struct ArbitrationParams {\\n IArbitratorV2 arbitrator; // The arbitrator trusted to solve disputes for this request.\\n bytes arbitratorExtraData; // The extra data for the trusted arbitrator of this request.\\n EvidenceModule evidenceModule; // The evidence module for the arbitrator.\\n }\\n\\n struct TemplateRegistryParams {\\n address templateRegistry; // Dispute Template registry address\\n string[2] registrationTemplateParameters; // Template and data mappings json for registration requests.\\n string[2] removalTemplateParameters; // Template and data mappings json for removal requests.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n bool private initialized;\\n uint256 public constant RULING_OPTIONS = 2; // The amount of non 0 choices the arbitrator can give.\\n address public relayerContract; // The contract that is used to add or remove items directly to speed up the interchain communication.\\n address public governor; // The address that can make changes to the parameters of the contract.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n uint256 public templateIdRegistration; // The current dispute template identifier for registration requests.\\n uint256 public templateIdRemoval; // The current dispute template identifier for removal requests.\\n uint256 public submissionBaseDeposit; // The base deposit to submit an item.\\n uint256 public removalBaseDeposit; // The base deposit to remove an item.\\n uint256 public submissionChallengeBaseDeposit; // The base deposit to challenge a submission.\\n uint256 public removalChallengeBaseDeposit; // The base deposit to challenge a removal request.\\n uint256 public challengePeriodDuration; // The time after which a request becomes executable if not challenged.\\n\\n mapping(bytes32 => Item) public items; // Maps the item ID to its data in the form items[_itemID].\\n mapping(address => mapping(uint256 => bytes32)) public arbitratorDisputeIDToItemID; // Maps a dispute ID to the ID of the item with the disputed request in the form arbitratorDisputeIDToItemID[arbitrator][disputeID].\\n mapping(bytes32 => mapping(uint256 => DisputeData)) public requestsDisputeData; // Maps an item and a request to the data of the dispute related to them. requestsDisputeData[itemID][requestIndex]\\n ArbitrationParams[] public arbitrationParamsChanges;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyGovernor() {\\n require(msg.sender == governor, \\\"The caller must be the governor.\\\");\\n _;\\n }\\n\\n modifier onlyRelayer() {\\n require(msg.sender == relayerContract, \\\"The caller must be the relay.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a party makes a request, raises a dispute or when a request is resolved.\\n /// @param _itemID The ID of the affected item.\\n /// @param _updatedDirectly Whether this was emitted in either `addItemDirectly` or `removeItemDirectly`. This is used in the subgraph.\\n event ItemStatusChange(bytes32 indexed _itemID, bool _updatedDirectly);\\n\\n /// @dev Emitted when someone submits an item for the first time.\\n /// @param _itemID The ID of the new item.\\n /// @param _data Stringified JSON Object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json.\\n /// @param _addedDirectly Whether the item was added via `addItemDirectly`.\\n event NewItem(bytes32 indexed _itemID, string _data, bool _addedDirectly);\\n\\n /// @dev Emitted when someone submits a request.\\n /// @param _itemID The ID of the affected item.\\n /// @param _requestID Unique dispute identifier within this contract.\\n event RequestSubmitted(bytes32 indexed _itemID, uint256 _requestID);\\n\\n /// @dev Emitted when the address of the connected Curate contract is set. The Curate is an instance of the Curate contract where each item is the address of a Curate contract related to this one.\\n /// @param _connectedList The address of the connected Curate.\\n event ConnectedListSet(address indexed _connectedList);\\n\\n /// @dev Emitted when the list metadata ipfs uri is updated.\\n /// @param _listMetadata Ipfs uri to list metadata.\\n event ListMetadataSet(string _listMetadata);\\n\\n // ************************************* //\\n // * Initializer * //\\n // ************************************* //\\n\\n /// @dev Initialize the arbitrable curated registry.\\n /// @param _governor The trusted governor of this contract.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence contract for the arbitrator.\\n /// @param _connectedList The address of the Curate contract that stores related Curate addresses. This parameter can be left empty.\\n /// @param _templateRegistryParams The dispute template registry.\\n /// - templateRegistry : The dispute template registry.\\n /// - registrationTemplateParameters : Template and data mappings json for registration requests.\\n /// - removalTemplateParameters : Template and data mappings json for removal requests.\\n /// @param _baseDeposits The base deposits for requests/challenges as follows:\\n /// - The base deposit to submit an item.\\n /// - The base deposit to remove an item.\\n /// - The base deposit to challenge a submission.\\n /// - The base deposit to challenge a removal request.\\n /// @param _challengePeriodDuration The time in seconds parties have to challenge a request.\\n /// @param _relayerContract The address of the relayer contract to add/remove items directly.\\n /// @param _listMetadata Stringified JSON object containing list metadata (title, description, isListOfLists, etc.). Example at :- https://cloudflare-ipfs.com/ipfs/QmekLsbXtQfm2jJjdeC5TF1cJcr5qxarZ9bhKmCS9s3ebK/list-metadata.json\\n function initialize(\\n address _governor,\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule,\\n address _connectedList,\\n TemplateRegistryParams calldata _templateRegistryParams,\\n uint256[4] calldata _baseDeposits,\\n uint256 _challengePeriodDuration,\\n address _relayerContract,\\n string calldata _listMetadata\\n ) external {\\n require(!initialized, \\\"Already initialized.\\\");\\n initialized = true;\\n\\n governor = _governor;\\n submissionBaseDeposit = _baseDeposits[0];\\n removalBaseDeposit = _baseDeposits[1];\\n submissionChallengeBaseDeposit = _baseDeposits[2];\\n removalChallengeBaseDeposit = _baseDeposits[3];\\n challengePeriodDuration = _challengePeriodDuration;\\n relayerContract = _relayerContract;\\n\\n templateRegistry = IDisputeTemplateRegistry(_templateRegistryParams.templateRegistry);\\n templateIdRegistration = templateRegistry.setDisputeTemplate(\\n \\\"Registration\\\",\\n _templateRegistryParams.registrationTemplateParameters[0],\\n _templateRegistryParams.registrationTemplateParameters[1]\\n );\\n templateIdRemoval = templateRegistry.setDisputeTemplate(\\n \\\"Removal\\\",\\n _templateRegistryParams.removalTemplateParameters[0],\\n _templateRegistryParams.removalTemplateParameters[1]\\n );\\n\\n arbitrationParamsChanges.push(\\n ArbitrationParams({\\n arbitrator: _arbitrator,\\n arbitratorExtraData: _arbitratorExtraData,\\n evidenceModule: _evidenceModule\\n })\\n );\\n\\n if (_connectedList != address(0)) {\\n emit ConnectedListSet(_connectedList);\\n }\\n\\n emit ListMetadataSet(_listMetadata);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Change the duration of the challenge period.\\n /// @param _challengePeriodDuration The new duration of the challenge period.\\n function changeChallengePeriodDuration(uint256 _challengePeriodDuration) external onlyGovernor {\\n challengePeriodDuration = _challengePeriodDuration;\\n }\\n\\n /// @dev Change the base amount required as a deposit to submit an item.\\n /// @param _submissionBaseDeposit The new base amount of wei required to submit an item.\\n function changeSubmissionBaseDeposit(uint256 _submissionBaseDeposit) external onlyGovernor {\\n submissionBaseDeposit = _submissionBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to remove an item.\\n /// @param _removalBaseDeposit The new base amount of wei required to remove an item.\\n function changeRemovalBaseDeposit(uint256 _removalBaseDeposit) external onlyGovernor {\\n removalBaseDeposit = _removalBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to challenge a submission.\\n /// @param _submissionChallengeBaseDeposit The new base amount of wei required to challenge a submission.\\n function changeSubmissionChallengeBaseDeposit(uint256 _submissionChallengeBaseDeposit) external onlyGovernor {\\n submissionChallengeBaseDeposit = _submissionChallengeBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to challenge a removal request.\\n /// @param _removalChallengeBaseDeposit The new base amount of wei required to challenge a removal request.\\n function changeRemovalChallengeBaseDeposit(uint256 _removalChallengeBaseDeposit) external onlyGovernor {\\n removalChallengeBaseDeposit = _removalChallengeBaseDeposit;\\n }\\n\\n /// @dev Change the governor of the curated registry.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external onlyGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Change the address of connectedList, the Curate instance that stores addresses of Curate contracts related to this one.\\n /// @param _connectedList The address of the connectedList contract to use.\\n function changeConnectedList(address _connectedList) external onlyGovernor {\\n emit ConnectedListSet(_connectedList);\\n }\\n\\n /// @dev Update list metadata ipfs uri.\\n /// @param _listMetadata Ipfs uri to list metadata\\n function changeListMetadata(string calldata _listMetadata) external onlyGovernor {\\n emit ListMetadataSet(_listMetadata);\\n }\\n\\n /// @dev Change the address of the relay contract.\\n /// @param _relayerContract The new address of the relay contract.\\n function changeRelayerContract(address _relayerContract) external onlyGovernor {\\n relayerContract = _relayerContract;\\n }\\n\\n /// @dev Changes the address of Template Registry contract.\\n /// @param _templateRegistry The new template registry.\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external onlyGovernor {\\n templateRegistry = _templateRegistry;\\n // TODO: automatically set templates upon changing the registry.\\n }\\n\\n /// @dev Changes the dispute template for registration requests.\\n /// @param _templateData The new template data for registration requests.\\n /// @param _templateDataMappings The new data mappings json for registration requests.\\n function changeRegistrationDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyGovernor {\\n templateIdRegistration = templateRegistry.setDisputeTemplate(\\n \\\"Registration\\\",\\n _templateData,\\n _templateDataMappings\\n );\\n }\\n\\n /// @dev Changes the dispute template for removal requests.\\n /// @param _templateData The new template data for removal requests.\\n /// @param _templateDataMappings The new data mappings json for removal requests.\\n function changeRemovalDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyGovernor {\\n templateIdRemoval = templateRegistry.setDisputeTemplate(\\\"Removal\\\", _templateData, _templateDataMappings);\\n }\\n\\n /// @notice Changes the params related to arbitration.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence module for the arbitrator.\\n function changeArbitrationParams(\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule\\n ) external onlyGovernor {\\n arbitrationParamsChanges.push(\\n ArbitrationParams({\\n arbitrator: _arbitrator,\\n arbitratorExtraData: _arbitratorExtraData,\\n evidenceModule: _evidenceModule\\n })\\n );\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Directly add an item to the list bypassing request-challenge. Can only be used by the relayer contract.\\n /// @param _item Stringified JSON Object containing Item data\\n function addItemDirectly(string calldata _item) external onlyRelayer {\\n bytes32 itemID = keccak256(abi.encodePacked(_item));\\n Item storage item = items[itemID];\\n require(item.status == Status.Absent, \\\"Item must be absent to be added.\\\");\\n\\n // Note that if the item is added directly once, the next time it is added it will emit this event again.\\n if (item.requestCount == 0) {\\n emit NewItem(itemID, _item, true);\\n }\\n\\n item.status = Status.Registered;\\n\\n emit ItemStatusChange(itemID, true);\\n }\\n\\n /// @dev Directly remove an item from the list bypassing request-challenge. Can only be used by the relayer contract.\\n /// @param _itemID The ID of the item to remove. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\\n function removeItemDirectly(bytes32 _itemID) external onlyRelayer {\\n Item storage item = items[_itemID];\\n require(item.status == Status.Registered, \\\"Item must be registered to be removed.\\\");\\n\\n item.status = Status.Absent;\\n\\n emit ItemStatusChange(_itemID, true);\\n }\\n\\n /// @dev Submit a request to register an item. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _item Stringified JSON object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\\n function addItem(string calldata _item) external payable {\\n bytes32 itemID = keccak256(abi.encodePacked(_item));\\n Item storage item = items[itemID];\\n\\n require(item.status == Status.Absent, \\\"Item must be absent to be added.\\\");\\n\\n // Note that if the item was added previously using `addItemDirectly`, the event will be emitted again here.\\n if (item.requestCount == 0) {\\n emit NewItem(itemID, _item, false);\\n }\\n\\n Request storage request = item.requests[item.requestCount++];\\n uint256 arbitrationParamsIndex = arbitrationParamsChanges.length - 1;\\n IArbitratorV2 arbitrator = arbitrationParamsChanges[arbitrationParamsIndex].arbitrator;\\n bytes storage arbitratorExtraData = arbitrationParamsChanges[arbitrationParamsIndex].arbitratorExtraData;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitratorExtraData);\\n uint256 totalCost = arbitrationCost + submissionBaseDeposit;\\n require(msg.value >= totalCost, \\\"You must fully fund the request.\\\");\\n\\n item.sumDeposit = totalCost;\\n item.status = Status.RegistrationRequested;\\n\\n request.requestType = RequestType.Registration;\\n request.submissionTime = uint64(block.timestamp);\\n request.arbitrationParamsIndex = uint24(arbitrationParamsIndex);\\n request.requester = payable(msg.sender);\\n\\n emit RequestSubmitted(itemID, getRequestID(itemID, item.requestCount - 1));\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Submit a request to remove an item from the list. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _itemID The ID of the item to remove.\\n /// @param _evidence Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\\n function removeItem(bytes32 _itemID, string calldata _evidence) external payable {\\n Item storage item = items[_itemID];\\n\\n require(item.status == Status.Registered, \\\"Item must be registered to be removed.\\\");\\n\\n Request storage request = item.requests[item.requestCount++];\\n uint256 arbitrationParamsIndex = arbitrationParamsChanges.length - 1;\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[arbitrationParamsIndex];\\n IArbitratorV2 arbitrator = arbitrationParams.arbitrator;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitrationParams.arbitratorExtraData);\\n uint256 totalCost = arbitrationCost + removalBaseDeposit;\\n require(msg.value >= totalCost, \\\"You must fully fund the request.\\\");\\n\\n item.sumDeposit = totalCost;\\n item.status = Status.ClearingRequested;\\n\\n request.submissionTime = uint64(block.timestamp);\\n request.arbitrationParamsIndex = uint24(arbitrationParamsIndex);\\n request.requester = payable(msg.sender);\\n request.requestType = RequestType.Clearing;\\n\\n uint256 requestID = getRequestID(_itemID, item.requestCount - 1);\\n emit RequestSubmitted(_itemID, requestID);\\n\\n // Emit evidence if it was provided.\\n if (bytes(_evidence).length > 0) {\\n arbitrationParams.evidenceModule.submitEvidence(requestID, _evidence); // TODO: add a msg.sender parameter to submitEvidence.\\n }\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Challenges the request of the item. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _itemID The ID of the item which request to challenge.\\n /// @param _evidence Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\\n function challengeRequest(bytes32 _itemID, string calldata _evidence) external payable {\\n Item storage item = items[_itemID];\\n require(item.status > Status.Registered, \\\"The item must have a pending request.\\\");\\n\\n uint256 lastRequestIndex = item.requestCount - 1;\\n Request storage request = item.requests[lastRequestIndex];\\n require(\\n block.timestamp - request.submissionTime <= challengePeriodDuration,\\n \\\"Challenges must occur during the challenge period.\\\"\\n );\\n\\n DisputeData storage disputeData = requestsDisputeData[_itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.None, \\\"The request should not have already been disputed.\\\");\\n\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n IArbitratorV2 arbitrator = arbitrationParams.arbitrator;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitrationParams.arbitratorExtraData);\\n uint256 totalCost;\\n {\\n uint256 challengerBaseDeposit = item.status == Status.RegistrationRequested\\n ? submissionChallengeBaseDeposit\\n : removalChallengeBaseDeposit;\\n totalCost = arbitrationCost + challengerBaseDeposit;\\n }\\n require(msg.value >= totalCost, \\\"You must fully fund the challenge.\\\");\\n\\n item.sumDeposit = item.sumDeposit + totalCost - arbitrationCost;\\n\\n request.challenger = payable(msg.sender);\\n\\n // Raise a dispute.\\n disputeData.disputeID = arbitrator.createDispute{value: arbitrationCost}(\\n RULING_OPTIONS,\\n arbitrationParams.arbitratorExtraData\\n );\\n disputeData.status = DisputeStatus.AwaitingRuling;\\n\\n arbitratorDisputeIDToItemID[address(arbitrator)][disputeData.disputeID] = _itemID;\\n\\n uint256 requestID = getRequestID(_itemID, lastRequestIndex);\\n uint256 templateId = request.requestType == RequestType.Registration\\n ? templateIdRegistration\\n : templateIdRemoval;\\n emit DisputeRequest(arbitrator, disputeData.disputeID, requestID, templateId, \\\"\\\");\\n\\n // Emit evidence if it was provided.\\n if (bytes(_evidence).length > 0) {\\n arbitrationParams.evidenceModule.submitEvidence(requestID, _evidence); // TODO: add a msg.sender parameter to submitEvidence.\\n }\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Executes an unchallenged request if the challenge period has passed.\\n /// @param _itemID The ID of the item to execute.\\n function executeRequest(bytes32 _itemID) external {\\n Item storage item = items[_itemID];\\n uint256 lastRequestIndex = items[_itemID].requestCount - 1;\\n\\n Request storage request = item.requests[lastRequestIndex];\\n require(\\n block.timestamp - request.submissionTime > challengePeriodDuration,\\n \\\"Time to challenge the request must pass.\\\"\\n );\\n\\n DisputeData storage disputeData = requestsDisputeData[_itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.None, \\\"The request should not be disputed.\\\");\\n\\n if (item.status == Status.RegistrationRequested) {\\n item.status = Status.Registered;\\n } else if (item.status == Status.ClearingRequested) {\\n item.status = Status.Absent;\\n } else {\\n revert(\\\"There must be a request.\\\");\\n }\\n\\n emit ItemStatusChange(_itemID, false);\\n\\n uint256 sumDeposit = item.sumDeposit;\\n item.sumDeposit = 0;\\n\\n if (sumDeposit > 0) {\\n // reimburse the requester\\n request.requester.send(sumDeposit);\\n }\\n }\\n\\n /// @dev Give a ruling for a dispute. Can only be called by the arbitrator. TRUSTED.\\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 \\\"Refused to arbitrate\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external {\\n require(_ruling <= RULING_OPTIONS, \\\"Invalid ruling option\\\");\\n\\n bytes32 itemID = arbitratorDisputeIDToItemID[msg.sender][_disputeID];\\n Item storage item = items[itemID];\\n uint256 lastRequestIndex = items[itemID].requestCount - 1;\\n Request storage request = item.requests[lastRequestIndex];\\n\\n DisputeData storage disputeData = requestsDisputeData[itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.AwaitingRuling, \\\"The request must not be resolved.\\\");\\n\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n require(address(arbitrationParams.arbitrator) == msg.sender, \\\"Only the arbitrator can give a ruling\\\");\\n\\n emit Ruling(IArbitratorV2(msg.sender), _disputeID, _ruling);\\n\\n Party winner = Party(_ruling);\\n\\n disputeData.status = DisputeStatus.Resolved;\\n disputeData.ruling = winner;\\n\\n uint256 sumDeposit = item.sumDeposit;\\n item.sumDeposit = 0;\\n\\n if (winner == Party.None) {\\n // If the arbitrator refuse to rule, then the item status should be the same it was before the request.\\n // Regarding item.status this is equivalent to the challenger winning the dispute.\\n item.status = item.status == Status.RegistrationRequested ? Status.Absent : Status.Registered;\\n\\n // Since nobody has won, then we reimburse both parties equally.\\n // If item.sumDeposit is odd, 1 wei will remain in the contract balance.\\n uint256 halfSumDeposit = sumDeposit / 2;\\n\\n request.requester.send(halfSumDeposit);\\n request.challenger.send(halfSumDeposit);\\n } else if (winner == Party.Requester) {\\n item.status = item.status == Status.RegistrationRequested ? Status.Registered : Status.Absent;\\n\\n request.requester.send(sumDeposit);\\n } else {\\n item.status = item.status == Status.RegistrationRequested ? Status.Absent : Status.Registered;\\n\\n request.challenger.send(sumDeposit);\\n }\\n\\n emit ItemStatusChange(itemID, false);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @notice Gets the local dispute ID for a given item and request.\\n /// @param _itemID The ID of the item.\\n /// @param _requestID The ID of the request.\\n /// @return Local dispute ID.\\n function getRequestID(bytes32 _itemID, uint256 _requestID) public pure returns (uint256) {\\n return uint256(keccak256(abi.encodePacked(_itemID, _requestID)));\\n }\\n\\n /// @notice Gets the arbitrator for new requests.\\n /// @dev Gets the latest value in arbitrationParamsChanges.\\n /// @return The arbitrator address.\\n function getArbitrator() external view returns (IArbitratorV2) {\\n return arbitrationParamsChanges[arbitrationParamsChanges.length - 1].arbitrator;\\n }\\n\\n /// @notice Gets the arbitratorExtraData for new requests.\\n /// @dev Gets the latest value in arbitrationParamsChanges.\\n /// @return The arbitrator extra data.\\n function getArbitratorExtraData() external view returns (bytes memory) {\\n return arbitrationParamsChanges[arbitrationParamsChanges.length - 1].arbitratorExtraData;\\n }\\n\\n /// @dev Returns item's information. Includes the total number of requests for the item\\n /// @param _itemID The ID of the queried item.\\n /// @return status The current status of the item.\\n /// @return numberOfRequests Total number of requests for the item.\\n /// @return sumDeposit The total deposit made by the requester and the challenger (if any)\\n function getItemInfo(\\n bytes32 _itemID\\n ) external view returns (Status status, uint256 numberOfRequests, uint256 sumDeposit) {\\n Item storage item = items[_itemID];\\n return (item.status, item.requestCount, item.sumDeposit);\\n }\\n\\n /// @dev Gets information on a request made for the item.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return disputed True if a dispute was raised.\\n /// @return disputeID ID of the dispute, if any.\\n /// @return submissionTime Time when the request was made.\\n /// @return resolved True if the request was executed and/or any raised disputes were resolved.\\n /// @return parties Address of requester and challenger, if any.\\n /// @return ruling The final ruling given, if any.\\n /// @return requestArbitrator The arbitrator trusted to solve disputes for this request.\\n /// @return requestArbitratorExtraData The extra data for the trusted arbitrator of this request.\\n function getRequestInfo(\\n bytes32 _itemID,\\n uint256 _requestID\\n )\\n external\\n view\\n returns (\\n bool disputed,\\n uint256 disputeID,\\n uint256 submissionTime,\\n bool resolved,\\n address payable[3] memory parties,\\n Party ruling,\\n IArbitratorV2 requestArbitrator,\\n bytes memory requestArbitratorExtraData\\n )\\n {\\n Item storage item = items[_itemID];\\n require(item.requestCount > _requestID, \\\"Request does not exist.\\\");\\n\\n Request storage request = items[_itemID].requests[_requestID];\\n\\n submissionTime = request.submissionTime;\\n parties[uint256(Party.Requester)] = request.requester;\\n parties[uint256(Party.Challenger)] = request.challenger;\\n\\n (disputed, disputeID, ruling) = getRequestDisputeData(_itemID, _requestID);\\n\\n (requestArbitrator, requestArbitratorExtraData) = getRequestArbitrationParams(_itemID, _requestID);\\n resolved = getRequestResolvedStatus(_itemID, _requestID);\\n }\\n\\n /// @dev Gets the dispute data relative to a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return disputed True if a dispute was raised.\\n /// @return disputeID ID of the dispute, if any.\\n /// @return ruling The final ruling given, if any.\\n function getRequestDisputeData(\\n bytes32 _itemID,\\n uint256 _requestID\\n ) internal view returns (bool disputed, uint256 disputeID, Party ruling) {\\n DisputeData storage disputeData = requestsDisputeData[_itemID][_requestID];\\n\\n return (disputeData.status >= DisputeStatus.AwaitingRuling, disputeData.disputeID, disputeData.ruling);\\n }\\n\\n /// @dev Gets the arbitration params relative to a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return arbitrator The arbitrator trusted to solve disputes for this request.\\n /// @return arbitratorExtraData The extra data for the trusted arbitrator of this request.\\n function getRequestArbitrationParams(\\n bytes32 _itemID,\\n uint256 _requestID\\n ) internal view returns (IArbitratorV2 arbitrator, bytes memory arbitratorExtraData) {\\n Request storage request = items[_itemID].requests[_requestID];\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n\\n return (arbitrationParams.arbitrator, arbitrationParams.arbitratorExtraData);\\n }\\n\\n /// @dev Gets the resovled status of a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return resolved True if the request was executed and/or any raised disputes were resolved.\\n function getRequestResolvedStatus(bytes32 _itemID, uint256 _requestID) internal view returns (bool resolved) {\\n Item storage item = items[_itemID];\\n\\n if (item.requestCount == 0) {\\n return false;\\n }\\n\\n if (_requestID < item.requestCount - 1) {\\n // It was resolved because it is not the last request.\\n return true;\\n }\\n\\n return item.sumDeposit == 0;\\n }\\n}\\n\",\"keccak256\":\"0x211ef2de660f69b273898c15fb693cee468fc134354c07545aea6eec2560e709\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5061342e806100206000396000f3fe6080604052600436106102455760003560e01c80638545c6a511610139578063bb0b86ff116100b6578063ca2c3cd11161007a578063ca2c3cd11461071d578063ccfd43071461073d578063d29d8f7d1461075d578063dd78cb591461077d578063e4c0aaf41461079d578063e9c24166146107bd57600080fd5b8063bb0b86ff14610678578063bfbcff1a1461068e578063c104817d146106c2578063c2f2beea146106e2578063c669439e146106f857600080fd5b80639c81a827116100fd5780639c81a827146105bb5780639dbea446146105f3578063a0af81f014610613578063a214e71214610633578063a37b6ad41461066257600080fd5b80638545c6a514610535578063873db1a7146105555780638c88c1491461056857806395dec7cc1461058857806397e90e50146105a857600080fd5b806340f1fa65116101c7578063560f7eaf1161018b578063560f7eaf146104b25780635d06e92c146104d2578063626c47e8146104e8578063787471a9146104fd5780637932ecf31461051357600080fd5b806340f1fa65146103c557806341e57c06146103e55780634660ebbe1461040557806348f343f3146104255780634aac84e51461047457600080fd5b8063107a8bfd1161020e578063107a8bfd1461033c57806325b98b831461035257806327e9f29414610372578063311a6c561461038557806333e5d047146103a557600080fd5b806282a36d1461024a57806303f3e206146102735780630c340a24146102cd5780630c6de59b146103055780630fceb74614610327575b600080fd5b34801561025657600080fd5b5061026060095481565b6040519081526020015b60405180910390f35b34801561027f57600080fd5b506102be61028e36600461287c565b600c6020908152600092835260408084209091529082529020805460019091015460ff8082169161010090041683565b60405161026a939291906128d4565b3480156102d957600080fd5b506001546102ed906001600160a01b031681565b6040516001600160a01b03909116815260200161026a565b34801561031157600080fd5b50610325610320366004612942565b6107dd565b005b34801561033357600080fd5b506102ed61084d565b34801561034857600080fd5b5061026060035481565b34801561035e57600080fd5b5061032561036d3660046129d1565b610890565b610325610380366004612942565b610c1d565b34801561039157600080fd5b506103256103a036600461287c565b610eff565b3480156103b157600080fd5b506103256103c0366004612ae8565b611354565b3480156103d157600080fd5b506103256103e0366004612b01565b611383565b3480156103f157600080fd5b50610325610400366004612ae8565b6113d5565b34801561041157600080fd5b50610325610420366004612b01565b611477565b34801561043157600080fd5b50610465610440366004612ae8565b600a6020526000908152604090208054600182015460029092015460ff909116919083565b60405161026a93929190612b25565b34801561048057600080fd5b5061046561048f366004612ae8565b6000908152600a602052604090208054600282015460019092015460ff90911692565b3480156104be57600080fd5b506103256104cd366004612ae8565b6114c3565b3480156104de57600080fd5b5061026060045481565b3480156104f457600080fd5b50610260600281565b34801561050957600080fd5b5061026060085481565b34801561051f57600080fd5b506105286114f2565b60405161026a9190612b93565b34801561054157600080fd5b50610325610550366004612942565b6115b5565b610325610563366004612ba6565b6116d5565b34801561057457600080fd5b50610325610583366004612ae8565b611c1c565b34801561059457600080fd5b506103256105a3366004612b01565b611c4b565b6103256105b6366004612ba6565b611cac565b3480156105c757600080fd5b506102606105d6366004612bf1565b600b60209081526000928352604080842090915290825290205481565b3480156105ff57600080fd5b5061026061060e36600461287c565b611f67565b34801561061f57600080fd5b506002546102ed906001600160a01b031681565b34801561063f57600080fd5b5061065361064e366004612ae8565b611f96565b60405161026a93929190612c1d565b34801561066e57600080fd5b5061026060075481565b34801561068457600080fd5b5061026060055481565b34801561069a57600080fd5b506106ae6106a936600461287c565b612067565b60405161026a989796959493929190612c52565b3480156106ce57600080fd5b506103256106dd366004612ae8565b612167565b3480156106ee57600080fd5b5061026060065481565b34801561070457600080fd5b506000546102ed9061010090046001600160a01b031681565b34801561072957600080fd5b50610325610738366004612ce3565b612196565b34801561074957600080fd5b50610325610758366004612dec565b612299565b34801561076957600080fd5b50610325610778366004612dec565b61233f565b34801561078957600080fd5b50610325610798366004612ae8565b6123e5565b3480156107a957600080fd5b506103256107b8366004612b01565b612414565b3480156107c957600080fd5b506103256107d8366004612ae8565b612460565b6001546001600160a01b031633146108105760405162461bcd60e51b815260040161080790612e4f565b60405180910390fd5b7f13f4b17ef5086467299cf476d7b3dc951be41f777dfd04d03aefa1bb1641fcd48282604051610841929190612ead565b60405180910390a15050565b600d80546000919061086190600190612edf565b8154811061087157610871612ef2565b60009182526020909120600390910201546001600160a01b0316919050565b60005460ff16156108da5760405162461bcd60e51b815260206004820152601460248201527320b63932b0b23c9034b734ba34b0b634bd32b21760611b6044820152606401610807565b60008054600160ff199091168117825580546001600160a01b0319166001600160a01b038f16179055859060200201356005558460016020020135600655846002602002013560075584600360209081029190910135600855600985905560008054610100600160a81b0319166101006001600160a01b0387160217905561096490870187612b01565b600280546001600160a01b0319166001600160a01b03929092169182179055634a9941746109956020890189612f08565b61099f9080612f28565b6109ac60208b018b612f08565b6109ba906020810190612f28565b6040518563ffffffff1660e01b81526004016109d99493929190612f8d565b6020604051808303816000875af11580156109f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1c9190612fd2565b6003556002546001600160a01b0316634a994174610a3d6040890189612f08565b610a479080612f28565b610a5460408b018b612f08565b610a62906020810190612f28565b6040518563ffffffff1660e01b8152600401610a819493929190613005565b6020604051808303816000875af1158015610aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac49190612fd2565b600481905550600d60405180606001604052808d6001600160a01b031681526020018c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b038c811660209384015284546001808201875595835291839020845160039093020180546001600160a01b03191692909116919091178155908201519192909190820190610b739082613098565b5060409190910151600290910180546001600160a01b0319166001600160a01b03928316179055871615610bd6576040516001600160a01b038816907f344e4755cad3cd67dadc30e884f068430a1d0a62dd5d14a6a062d6e630ec298790600090a25b7f13f4b17ef5086467299cf476d7b3dc951be41f777dfd04d03aefa1bb1641fcd48282604051610c07929190612ead565b60405180910390a1505050505050505050505050565b60008282604051602001610c32929190613157565b60408051601f1981840301815291815281516020928301206000818152600a90935290822090925090815460ff166003811115610c7157610c7161289e565b14610c8e5760405162461bcd60e51b815260040161080790613167565b8060020154600003610cd857817f93e4d3e9542ddd9eea8962241d920b12b96bce26749667189fd06ed3549019e185856000604051610ccf9392919061319c565b60405180910390a25b6002810180546000916003840191839182610cf2836131c2565b919050558152602001908152602001600020905060006001600d80549050610d1a9190612edf565b90506000600d8281548110610d3157610d31612ef2565b60009182526020822060039091020154600d80546001600160a01b0390921693509084908110610d6357610d63612ef2565b906000526020600020906003020160010190506000826001600160a01b031663f7434ea9836040518263ffffffff1660e01b8152600401610da49190613258565b602060405180830381865afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190612fd2565b9050600060055482610df7919061326b565b905080341015610e195760405162461bcd60e51b81526004016108079061327e565b60018781018290558754600260ff199091168117895587546bffffffffffffffffffffffff1916610100426001600160401b03160262ffffff60481b191617600160481b62ffffff891602176bffffffffffffffffffffffff1633600160601b0217885588015489917f73057048557c37c893f346985dc1d461cf12b00f09397bb275613203124c2be191610eb491849161060e9190612edf565b60405190815260200160405180910390a280341115610ef357336108fc610edb8334612edf565b6040518115909202916000818181858888f150505050505b50505050505050505050565b6002811115610f485760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210393ab634b7339037b83a34b7b760591b6044820152606401610807565b336000908152600b60209081526040808320858452825280832054808452600a9092528220600281015491929091610f8290600190612edf565b60008181526003840160209081526040808320878452600c83528184208585529092529091209192509060018082015460ff166002811115610fc657610fc661289e565b1461101d5760405162461bcd60e51b815260206004820152602160248201527f5468652072657175657374206d757374206e6f74206265207265736f6c7665646044820152601760f91b6064820152608401610807565b8154600d8054600092600160481b900462ffffff1690811061104157611041612ef2565b6000918252602090912060039091020180549091506001600160a01b031633146110bb5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e206769766520612072604482015264756c696e6760d81b6064820152608401610807565b604051878152889033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a360008760028111156111065761110661289e565b600184018054600260ff19821681178355929350839261ffff1990911681179061010090849081111561113b5761113b61289e565b02179055506001860180546000918290559082600281111561115f5761115f61289e565b0361121b576002875460ff16600381111561117c5761117c61289e565b1461118857600161118b565b60005b8754889060ff191660018360038111156111a7576111a761289e565b021790555060006111b96002836132b3565b8654604051919250600160601b90046001600160a01b0316906108fc8315029083906000818181858888f150505060018801546040516001600160a01b03909116925083156108fc02915083906000818181858888f193505050505050611324565b600182600281111561122f5761122f61289e565b036112b0576002875460ff16600381111561124c5761124c61289e565b1461125857600061125b565b60015b8754889060ff191660018360038111156112775761127761289e565b02179055508454604051600160601b9091046001600160a01b0316906108fc8315029083906000818181858888f1935050505050611324565b6002875460ff1660038111156112c8576112c861289e565b146112d45760016112d7565b60005b8754889060ff191660018360038111156112f3576112f361289e565b021790555060018501546040516001600160a01b039091169082156108fc029083906000818181858888f150505050505b6040516000815288906000805160206133d98339815191529060200160405180910390a250505050505050505050565b6001546001600160a01b0316331461137e5760405162461bcd60e51b815260040161080790612e4f565b600555565b6001546001600160a01b031633146113ad5760405162461bcd60e51b815260040161080790612e4f565b600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60005461010090046001600160a01b031633146114045760405162461bcd60e51b8152600401610807906132d5565b6000818152600a602052604090206001815460ff16600381111561142a5761142a61289e565b146114475760405162461bcd60e51b81526004016108079061330c565b805460ff191681556040516001815282906000805160206133d98339815191529060200160405180910390a25050565b6001546001600160a01b031633146114a15760405162461bcd60e51b815260040161080790612e4f565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146114ed5760405162461bcd60e51b815260040161080790612e4f565b600955565b600d80546060919061150690600190612edf565b8154811061151657611516612ef2565b9060005260206000209060030201600101805461153290613017565b80601f016020809104026020016040519081016040528092919081815260200182805461155e90613017565b80156115ab5780601f10611580576101008083540402835291602001916115ab565b820191906000526020600020905b81548152906001019060200180831161158e57829003601f168201915b5050505050905090565b60005461010090046001600160a01b031633146115e45760405162461bcd60e51b8152600401610807906132d5565b600082826040516020016115f9929190613157565b60408051601f1981840301815291815281516020928301206000818152600a90935290822090925090815460ff1660038111156116385761163861289e565b146116555760405162461bcd60e51b815260040161080790613167565b806002015460000361169f57817f93e4d3e9542ddd9eea8962241d920b12b96bce26749667189fd06ed3549019e1858560016040516116969392919061319c565b60405180910390a25b805460ff19166001908117825560405190815282906000805160206133d98339815191529060200160405180910390a250505050565b6000838152600a602052604090206001815460ff1660038111156116fb576116fb61289e565b116117565760405162461bcd60e51b815260206004820152602560248201527f546865206974656d206d757374206861766520612070656e64696e67207265716044820152643ab2b9ba1760d91b6064820152608401610807565b6000600182600201546117699190612edf565b600081815260038401602052604090206009548154929350909161179b9061010090046001600160401b031642612edf565b11156118045760405162461bcd60e51b815260206004820152603260248201527f4368616c6c656e676573206d757374206f6363757220647572696e67207468656044820152711031b430b63632b733b2903832b934b7b21760711b6064820152608401610807565b6000868152600c60209081526040808320858452909152812090600182015460ff1660028111156118375761183761289e565b1461189f5760405162461bcd60e51b815260206004820152603260248201527f54686520726571756573742073686f756c64206e6f74206861766520616c726560448201527130b23c903132b2b7103234b9b83aba32b21760711b6064820152608401610807565b8154600d8054600092600160481b900462ffffff169081106118c3576118c3612ef2565b600091825260208220600390910201805460405163f7434ea960e01b81529193506001600160a01b03169190829063f7434ea990611908906001870190600401613258565b602060405180830381865afa158015611925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119499190612fd2565b90506000806002895460ff1660038111156119665761196661289e565b1461197357600854611977565b6007545b9050611983818461326b565b915050803410156119e15760405162461bcd60e51b815260206004820152602260248201527f596f75206d7573742066756c6c792066756e6420746865206368616c6c656e67604482015261329760f11b6064820152608401610807565b818189600101546119f2919061326b565b6119fc9190612edf565b6001808a019190915586810180546001600160a01b0319163317905560405163c13517e160e01b81526001600160a01b0385169163c13517e1918591611a4a916002918a0190600401613352565b60206040518083038185885af1158015611a68573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a8d9190612fd2565b8086556001808701805460ff191690911790556001600160a01b0384166000908152600b602090815260408083209383529290529081208c9055611ad18c89611f67565b9050600080885460ff166001811115611aec57611aec61289e565b14611af957600454611afd565b6003545b90508660000154856001600160a01b03167f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e271868484604051611b57929190918252602082015260606040820181905260009082015260800190565b60405180910390a38a15611bdf578560020160009054906101000a90046001600160a01b03166001600160a01b031663a6a7f0eb838e8e6040518463ffffffff1660e01b8152600401611bac9392919061336b565b600060405180830381600087803b158015611bc657600080fd5b505af1158015611bda573d6000803e3d6000fd5b505050505b82341115611c0d57336108fc611bf58534612edf565b6040518115909202916000818181858888f150505050505b50505050505050505050505050565b6001546001600160a01b03163314611c465760405162461bcd60e51b815260040161080790612e4f565b600655565b6001546001600160a01b03163314611c755760405162461bcd60e51b815260040161080790612e4f565b6040516001600160a01b038216907f344e4755cad3cd67dadc30e884f068430a1d0a62dd5d14a6a062d6e630ec298790600090a250565b6000838152600a602052604090206001815460ff166003811115611cd257611cd261289e565b14611cef5760405162461bcd60e51b81526004016108079061330c565b6002810180546000916003840191839182611d09836131c2565b919050558152602001908152602001600020905060006001600d80549050611d319190612edf565b90506000600d8281548110611d4857611d48612ef2565b600091825260208220600390910201805460405163f7434ea960e01b81529193506001600160a01b03169190829063f7434ea990611d8d906001870190600401613258565b602060405180830381865afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce9190612fd2565b9050600060065482611de0919061326b565b905080341015611e025760405162461bcd60e51b81526004016108079061327e565b60018781018290558754600360ff1991821617895587546bffffffffffffffffffffff001916610100426001600160401b03160262ffffff60481b191617600160481b62ffffff891602176bffffffffffffffffffffff001633600160601b0290911617811787556002880154600091611e81918d9161060e91612edf565b90508a7f73057048557c37c893f346985dc1d461cf12b00f09397bb275613203124c2be182604051611eb591815260200190565b60405180910390a28815611f2c57600285015460405163a6a7f0eb60e01b81526001600160a01b039091169063a6a7f0eb90611ef99084908e908e9060040161336b565b600060405180830381600087803b158015611f1357600080fd5b505af1158015611f27573d6000803e3d6000fd5b505050505b81341115611f5a57336108fc611f428434612edf565b6040518115909202916000818181858888f150505050505b5050505050505050505050565b604080516020808201859052818301849052825180830384018152606090920190925280519101205b92915050565b600d8181548110611fa657600080fd5b6000918252602090912060039091020180546001820180546001600160a01b03909216935090611fd590613017565b80601f016020809104026020016040519081016040528092919081815260200182805461200190613017565b801561204e5780601f106120235761010080835404028352916020019161204e565b820191906000526020600020905b81548152906001019060200180831161203157829003601f168201915b505050600290930154919250506001600160a01b031683565b60008060008061207561285e565b6000878152600a60205260408120600281015482916060918a106120d55760405162461bcd60e51b81526020600482015260176024820152762932b8bab2b9ba103237b2b9903737ba1032bc34b9ba1760491b6044820152606401610807565b60008b8152600a602090815260408083208d845260030182529182902080546001600160a01b03600160601b82048116938a01939093526001820154909216928801929092526001600160401b036101009091041697506121368c8c6126b2565b919b50995094506121478c8c612708565b90945092506121568c8c61280d565b965050509295985092959890939650565b6001546001600160a01b031633146121915760405162461bcd60e51b815260040161080790612e4f565b600755565b6001546001600160a01b031633146121c05760405162461bcd60e51b815260040161080790612e4f565b600d6040518060600160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b0385811660209384015284546001808201875595835291839020845160039093020180546001600160a01b031916929091169190911781559082015191929091908201906122699082613098565b5060409190910151600290910180546001600160a01b0319166001600160a01b0390921691909117905550505050565b6001546001600160a01b031633146122c35760405162461bcd60e51b815260040161080790612e4f565b6002546040516312a6505d60e21b81526001600160a01b0390911690634a994174906122f5908590859060040161338e565b6020604051808303816000875af1158015612314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123389190612fd2565b6004555050565b6001546001600160a01b031633146123695760405162461bcd60e51b815260040161080790612e4f565b6002546040516312a6505d60e21b81526001600160a01b0390911690634a9941749061239b90859085906004016133c6565b6020604051808303816000875af11580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190612fd2565b6003555050565b6001546001600160a01b0316331461240f5760405162461bcd60e51b815260040161080790612e4f565b600855565b6001546001600160a01b0316331461243e5760405162461bcd60e51b815260040161080790612e4f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600a60205260408120600281015490919061248290600190612edf565b60008181526003840160205260409020600954815492935090916124b49061010090046001600160401b031642612edf565b116125125760405162461bcd60e51b815260206004820152602860248201527f54696d6520746f206368616c6c656e6765207468652072657175657374206d7560448201526739ba103830b9b99760c11b6064820152608401610807565b6000848152600c60209081526040808320858452909152812090600182015460ff1660028111156125455761254561289e565b1461259e5760405162461bcd60e51b815260206004820152602360248201527f54686520726571756573742073686f756c64206e6f742062652064697370757460448201526232b21760e91b6064820152608401610807565b6002845460ff1660038111156125b6576125b661289e565b036125d3578354600190859060ff191682805b0217905550612646565b6003845460ff1660038111156125eb576125eb61289e565b03612603578354600090859060ff19166001836125c9565b60405162461bcd60e51b81526020600482015260186024820152772a3432b9329036bab9ba1031329030903932b8bab2b9ba1760411b6044820152606401610807565b6040516000815285906000805160206133d98339815191529060200160405180910390a2600184018054600090915580156126aa578254604051600160601b9091046001600160a01b0316906108fc8315029083906000818181858888f150505050505b505050505050565b6000828152600c6020908152604080832084845290915281208190819060018082015460ff1660028111156126e9576126e961289e565b825460019093015491111597919650610100900460ff16945092505050565b6000828152600a6020908152604080832084845260030190915281208054600d805460609392859291600160481b90910462ffffff1690811061274d5761274d612ef2565b6000918252602090912060039091020180546001820180549293506001600160a01b0390911691819061277f90613017565b80601f01602080910402602001604051908101604052809291908181526020018280546127ab90613017565b80156127f85780601f106127cd576101008083540402835291602001916127f8565b820191906000526020600020905b8154815290600101906020018083116127db57829003601f168201915b505050505090509350935050505b9250929050565b6000828152600a6020526040812060028101548203612830576000915050611f90565b600181600201546128419190612edf565b831015612852576001915050611f90565b60010154159392505050565b60405180606001604052806003906020820280368337509192915050565b6000806040838503121561288f57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106128c4576128c461289e565b50565b6128d0816128b4565b9052565b838152606081016128e4846128b4565b8360208301526128f3836128b4565b826040830152949350505050565b60008083601f84011261291357600080fd5b5081356001600160401b0381111561292a57600080fd5b60208301915083602082850101111561280657600080fd5b6000806020838503121561295557600080fd5b82356001600160401b0381111561296b57600080fd5b61297785828601612901565b90969095509350505050565b6001600160a01b03811681146128c457600080fd5b80356129a381612983565b919050565b6000606082840312156129ba57600080fd5b50919050565b8060808101831015611f9057600080fd5b6000806000806000806000806000806000806101a08d8f0312156129f457600080fd5b6129fd8d612998565b9b50612a0b60208e01612998565b9a506001600160401b0360408e01351115612a2557600080fd5b612a358e60408f01358f01612901565b909a509850612a4660608e01612998565b9750612a5460808e01612998565b96506001600160401b0360a08e01351115612a6e57600080fd5b612a7e8e60a08f01358f016129a8565b9550612a8d8e60c08f016129c0565b94506101408d01359350612aa46101608e01612998565b92506001600160401b036101808e01351115612abf57600080fd5b612ad08e6101808f01358f01612901565b81935080925050509295989b509295989b509295989b565b600060208284031215612afa57600080fd5b5035919050565b600060208284031215612b1357600080fd5b8135612b1e81612983565b9392505050565b6060810160048510612b3957612b3961289e565b938152602081019290925260409091015290565b6000815180845260005b81811015612b7357602081850181015186830182015201612b57565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612b1e6020830184612b4d565b600080600060408486031215612bbb57600080fd5b8335925060208401356001600160401b03811115612bd857600080fd5b612be486828701612901565b9497909650939450505050565b60008060408385031215612c0457600080fd5b8235612c0f81612983565b946020939093013593505050565b600060018060a01b03808616835260606020840152612c3f6060840186612b4d565b9150808416604084015250949350505050565b60006101408a1515835260208a60208501528960408501528815156060850152608084018860005b6003811015612ca05781516001600160a01b031683529183019190830190600101612c7a565b50505050612cb160e08401876128c7565b6001600160a01b03851661010084015280610120840152612cd481840185612b4d565b9b9a5050505050505050505050565b60008060008060608587031215612cf957600080fd5b8435612d0481612983565b935060208501356001600160401b03811115612d1f57600080fd5b612d2b87828801612901565b9094509250506040850135612d3f81612983565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612d7157600080fd5b81356001600160401b0380821115612d8b57612d8b612d4a565b604051601f8301601f19908116603f01168101908282118183101715612db357612db3612d4a565b81604052838152866020858801011115612dcc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612dff57600080fd5b82356001600160401b0380821115612e1657600080fd5b612e2286838701612d60565b93506020850135915080821115612e3857600080fd5b50612e4585828601612d60565b9150509250929050565b6020808252818101527f5468652063616c6c6572206d7573742062652074686520676f7665726e6f722e604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000612ec1602083018486612e84565b949350505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611f9057611f90612ec9565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112612f1e57600080fd5b9190910192915050565b6000808335601e19843603018112612f3f57600080fd5b8301803591506001600160401b03821115612f5957600080fd5b60200191503681900382131561280657600080fd5b600c81526b2932b3b4b9ba3930ba34b7b760a11b602082015260400190565b606081526000612f9f60608301612f6e565b8281036020840152612fb2818789612e84565b90508281036040840152612fc7818587612e84565b979650505050505050565b600060208284031215612fe457600080fd5b5051919050565b600781526614995b5bdd985b60ca1b602082015260400190565b606081526000612f9f60608301612feb565b600181811c9082168061302b57607f821691505b6020821081036129ba57634e487b7160e01b600052602260045260246000fd5b601f821115613093576000816000526020600020601f850160051c810160208610156130745750805b601f850160051c820191505b818110156126aa57828155600101613080565b505050565b81516001600160401b038111156130b1576130b1612d4a565b6130c5816130bf8454613017565b8461304b565b602080601f8311600181146130fa57600084156130e25750858301515b600019600386901b1c1916600185901b1785556126aa565b600085815260208120601f198616915b828110156131295788860151825594840194600190910190840161310a565b50858210156131475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8183823760009101908152919050565b6020808252818101527f4974656d206d75737420626520616273656e7420746f2062652061646465642e604082015260600190565b6040815260006131b0604083018587612e84565b90508215156020830152949350505050565b6000600182016131d4576131d4612ec9565b5060010190565b600081546131e881613017565b808552602060018381168015613205576001811461321f5761324d565b60ff1985168884015283151560051b88018301955061324d565b866000528260002060005b858110156132455781548a820186015290830190840161322a565b890184019650505b505050505092915050565b602081526000612b1e60208301846131db565b80820180821115611f9057611f90612ec9565b6020808252818101527f596f75206d7573742066756c6c792066756e642074686520726571756573742e604082015260600190565b6000826132d057634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601d908201527f5468652063616c6c6572206d757374206265207468652072656c61792e000000604082015260600190565b60208082526026908201527f4974656d206d757374206265207265676973746572656420746f20626520726560408201526536b7bb32b21760d11b606082015260800190565b828152604060208201526000612ec160408301846131db565b838152604060208201526000613385604083018486612e84565b95945050505050565b6060815260006133a060608301612feb565b82810360208401526133b28186612b4d565b905082810360408401526133858185612b4d565b6060815260006133a060608301612f6e56fed768d67a683a3f5110d48ee5af827e22f4f36d017d764d3bfb11982492b19536a2646970667358221220f03715f5630f7daacc950c8b01b93ed005859c2703b451d48f019e0192c993c764736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106102455760003560e01c80638545c6a511610139578063bb0b86ff116100b6578063ca2c3cd11161007a578063ca2c3cd11461071d578063ccfd43071461073d578063d29d8f7d1461075d578063dd78cb591461077d578063e4c0aaf41461079d578063e9c24166146107bd57600080fd5b8063bb0b86ff14610678578063bfbcff1a1461068e578063c104817d146106c2578063c2f2beea146106e2578063c669439e146106f857600080fd5b80639c81a827116100fd5780639c81a827146105bb5780639dbea446146105f3578063a0af81f014610613578063a214e71214610633578063a37b6ad41461066257600080fd5b80638545c6a514610535578063873db1a7146105555780638c88c1491461056857806395dec7cc1461058857806397e90e50146105a857600080fd5b806340f1fa65116101c7578063560f7eaf1161018b578063560f7eaf146104b25780635d06e92c146104d2578063626c47e8146104e8578063787471a9146104fd5780637932ecf31461051357600080fd5b806340f1fa65146103c557806341e57c06146103e55780634660ebbe1461040557806348f343f3146104255780634aac84e51461047457600080fd5b8063107a8bfd1161020e578063107a8bfd1461033c57806325b98b831461035257806327e9f29414610372578063311a6c561461038557806333e5d047146103a557600080fd5b806282a36d1461024a57806303f3e206146102735780630c340a24146102cd5780630c6de59b146103055780630fceb74614610327575b600080fd5b34801561025657600080fd5b5061026060095481565b6040519081526020015b60405180910390f35b34801561027f57600080fd5b506102be61028e36600461287c565b600c6020908152600092835260408084209091529082529020805460019091015460ff8082169161010090041683565b60405161026a939291906128d4565b3480156102d957600080fd5b506001546102ed906001600160a01b031681565b6040516001600160a01b03909116815260200161026a565b34801561031157600080fd5b50610325610320366004612942565b6107dd565b005b34801561033357600080fd5b506102ed61084d565b34801561034857600080fd5b5061026060035481565b34801561035e57600080fd5b5061032561036d3660046129d1565b610890565b610325610380366004612942565b610c1d565b34801561039157600080fd5b506103256103a036600461287c565b610eff565b3480156103b157600080fd5b506103256103c0366004612ae8565b611354565b3480156103d157600080fd5b506103256103e0366004612b01565b611383565b3480156103f157600080fd5b50610325610400366004612ae8565b6113d5565b34801561041157600080fd5b50610325610420366004612b01565b611477565b34801561043157600080fd5b50610465610440366004612ae8565b600a6020526000908152604090208054600182015460029092015460ff909116919083565b60405161026a93929190612b25565b34801561048057600080fd5b5061046561048f366004612ae8565b6000908152600a602052604090208054600282015460019092015460ff90911692565b3480156104be57600080fd5b506103256104cd366004612ae8565b6114c3565b3480156104de57600080fd5b5061026060045481565b3480156104f457600080fd5b50610260600281565b34801561050957600080fd5b5061026060085481565b34801561051f57600080fd5b506105286114f2565b60405161026a9190612b93565b34801561054157600080fd5b50610325610550366004612942565b6115b5565b610325610563366004612ba6565b6116d5565b34801561057457600080fd5b50610325610583366004612ae8565b611c1c565b34801561059457600080fd5b506103256105a3366004612b01565b611c4b565b6103256105b6366004612ba6565b611cac565b3480156105c757600080fd5b506102606105d6366004612bf1565b600b60209081526000928352604080842090915290825290205481565b3480156105ff57600080fd5b5061026061060e36600461287c565b611f67565b34801561061f57600080fd5b506002546102ed906001600160a01b031681565b34801561063f57600080fd5b5061065361064e366004612ae8565b611f96565b60405161026a93929190612c1d565b34801561066e57600080fd5b5061026060075481565b34801561068457600080fd5b5061026060055481565b34801561069a57600080fd5b506106ae6106a936600461287c565b612067565b60405161026a989796959493929190612c52565b3480156106ce57600080fd5b506103256106dd366004612ae8565b612167565b3480156106ee57600080fd5b5061026060065481565b34801561070457600080fd5b506000546102ed9061010090046001600160a01b031681565b34801561072957600080fd5b50610325610738366004612ce3565b612196565b34801561074957600080fd5b50610325610758366004612dec565b612299565b34801561076957600080fd5b50610325610778366004612dec565b61233f565b34801561078957600080fd5b50610325610798366004612ae8565b6123e5565b3480156107a957600080fd5b506103256107b8366004612b01565b612414565b3480156107c957600080fd5b506103256107d8366004612ae8565b612460565b6001546001600160a01b031633146108105760405162461bcd60e51b815260040161080790612e4f565b60405180910390fd5b7f13f4b17ef5086467299cf476d7b3dc951be41f777dfd04d03aefa1bb1641fcd48282604051610841929190612ead565b60405180910390a15050565b600d80546000919061086190600190612edf565b8154811061087157610871612ef2565b60009182526020909120600390910201546001600160a01b0316919050565b60005460ff16156108da5760405162461bcd60e51b815260206004820152601460248201527320b63932b0b23c9034b734ba34b0b634bd32b21760611b6044820152606401610807565b60008054600160ff199091168117825580546001600160a01b0319166001600160a01b038f16179055859060200201356005558460016020020135600655846002602002013560075584600360209081029190910135600855600985905560008054610100600160a81b0319166101006001600160a01b0387160217905561096490870187612b01565b600280546001600160a01b0319166001600160a01b03929092169182179055634a9941746109956020890189612f08565b61099f9080612f28565b6109ac60208b018b612f08565b6109ba906020810190612f28565b6040518563ffffffff1660e01b81526004016109d99493929190612f8d565b6020604051808303816000875af11580156109f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1c9190612fd2565b6003556002546001600160a01b0316634a994174610a3d6040890189612f08565b610a479080612f28565b610a5460408b018b612f08565b610a62906020810190612f28565b6040518563ffffffff1660e01b8152600401610a819493929190613005565b6020604051808303816000875af1158015610aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac49190612fd2565b600481905550600d60405180606001604052808d6001600160a01b031681526020018c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b038c811660209384015284546001808201875595835291839020845160039093020180546001600160a01b03191692909116919091178155908201519192909190820190610b739082613098565b5060409190910151600290910180546001600160a01b0319166001600160a01b03928316179055871615610bd6576040516001600160a01b038816907f344e4755cad3cd67dadc30e884f068430a1d0a62dd5d14a6a062d6e630ec298790600090a25b7f13f4b17ef5086467299cf476d7b3dc951be41f777dfd04d03aefa1bb1641fcd48282604051610c07929190612ead565b60405180910390a1505050505050505050505050565b60008282604051602001610c32929190613157565b60408051601f1981840301815291815281516020928301206000818152600a90935290822090925090815460ff166003811115610c7157610c7161289e565b14610c8e5760405162461bcd60e51b815260040161080790613167565b8060020154600003610cd857817f93e4d3e9542ddd9eea8962241d920b12b96bce26749667189fd06ed3549019e185856000604051610ccf9392919061319c565b60405180910390a25b6002810180546000916003840191839182610cf2836131c2565b919050558152602001908152602001600020905060006001600d80549050610d1a9190612edf565b90506000600d8281548110610d3157610d31612ef2565b60009182526020822060039091020154600d80546001600160a01b0390921693509084908110610d6357610d63612ef2565b906000526020600020906003020160010190506000826001600160a01b031663f7434ea9836040518263ffffffff1660e01b8152600401610da49190613258565b602060405180830381865afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190612fd2565b9050600060055482610df7919061326b565b905080341015610e195760405162461bcd60e51b81526004016108079061327e565b60018781018290558754600260ff199091168117895587546bffffffffffffffffffffffff1916610100426001600160401b03160262ffffff60481b191617600160481b62ffffff891602176bffffffffffffffffffffffff1633600160601b0217885588015489917f73057048557c37c893f346985dc1d461cf12b00f09397bb275613203124c2be191610eb491849161060e9190612edf565b60405190815260200160405180910390a280341115610ef357336108fc610edb8334612edf565b6040518115909202916000818181858888f150505050505b50505050505050505050565b6002811115610f485760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b210393ab634b7339037b83a34b7b760591b6044820152606401610807565b336000908152600b60209081526040808320858452825280832054808452600a9092528220600281015491929091610f8290600190612edf565b60008181526003840160209081526040808320878452600c83528184208585529092529091209192509060018082015460ff166002811115610fc657610fc661289e565b1461101d5760405162461bcd60e51b815260206004820152602160248201527f5468652072657175657374206d757374206e6f74206265207265736f6c7665646044820152601760f91b6064820152608401610807565b8154600d8054600092600160481b900462ffffff1690811061104157611041612ef2565b6000918252602090912060039091020180549091506001600160a01b031633146110bb5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652061726269747261746f722063616e206769766520612072604482015264756c696e6760d81b6064820152608401610807565b604051878152889033907f394027a5fa6e098a1191094d1719d6929b9abc535fcc0c8f448d6a4e756222769060200160405180910390a360008760028111156111065761110661289e565b600184018054600260ff19821681178355929350839261ffff1990911681179061010090849081111561113b5761113b61289e565b02179055506001860180546000918290559082600281111561115f5761115f61289e565b0361121b576002875460ff16600381111561117c5761117c61289e565b1461118857600161118b565b60005b8754889060ff191660018360038111156111a7576111a761289e565b021790555060006111b96002836132b3565b8654604051919250600160601b90046001600160a01b0316906108fc8315029083906000818181858888f150505060018801546040516001600160a01b03909116925083156108fc02915083906000818181858888f193505050505050611324565b600182600281111561122f5761122f61289e565b036112b0576002875460ff16600381111561124c5761124c61289e565b1461125857600061125b565b60015b8754889060ff191660018360038111156112775761127761289e565b02179055508454604051600160601b9091046001600160a01b0316906108fc8315029083906000818181858888f1935050505050611324565b6002875460ff1660038111156112c8576112c861289e565b146112d45760016112d7565b60005b8754889060ff191660018360038111156112f3576112f361289e565b021790555060018501546040516001600160a01b039091169082156108fc029083906000818181858888f150505050505b6040516000815288906000805160206133d98339815191529060200160405180910390a250505050505050505050565b6001546001600160a01b0316331461137e5760405162461bcd60e51b815260040161080790612e4f565b600555565b6001546001600160a01b031633146113ad5760405162461bcd60e51b815260040161080790612e4f565b600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60005461010090046001600160a01b031633146114045760405162461bcd60e51b8152600401610807906132d5565b6000818152600a602052604090206001815460ff16600381111561142a5761142a61289e565b146114475760405162461bcd60e51b81526004016108079061330c565b805460ff191681556040516001815282906000805160206133d98339815191529060200160405180910390a25050565b6001546001600160a01b031633146114a15760405162461bcd60e51b815260040161080790612e4f565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146114ed5760405162461bcd60e51b815260040161080790612e4f565b600955565b600d80546060919061150690600190612edf565b8154811061151657611516612ef2565b9060005260206000209060030201600101805461153290613017565b80601f016020809104026020016040519081016040528092919081815260200182805461155e90613017565b80156115ab5780601f10611580576101008083540402835291602001916115ab565b820191906000526020600020905b81548152906001019060200180831161158e57829003601f168201915b5050505050905090565b60005461010090046001600160a01b031633146115e45760405162461bcd60e51b8152600401610807906132d5565b600082826040516020016115f9929190613157565b60408051601f1981840301815291815281516020928301206000818152600a90935290822090925090815460ff1660038111156116385761163861289e565b146116555760405162461bcd60e51b815260040161080790613167565b806002015460000361169f57817f93e4d3e9542ddd9eea8962241d920b12b96bce26749667189fd06ed3549019e1858560016040516116969392919061319c565b60405180910390a25b805460ff19166001908117825560405190815282906000805160206133d98339815191529060200160405180910390a250505050565b6000838152600a602052604090206001815460ff1660038111156116fb576116fb61289e565b116117565760405162461bcd60e51b815260206004820152602560248201527f546865206974656d206d757374206861766520612070656e64696e67207265716044820152643ab2b9ba1760d91b6064820152608401610807565b6000600182600201546117699190612edf565b600081815260038401602052604090206009548154929350909161179b9061010090046001600160401b031642612edf565b11156118045760405162461bcd60e51b815260206004820152603260248201527f4368616c6c656e676573206d757374206f6363757220647572696e67207468656044820152711031b430b63632b733b2903832b934b7b21760711b6064820152608401610807565b6000868152600c60209081526040808320858452909152812090600182015460ff1660028111156118375761183761289e565b1461189f5760405162461bcd60e51b815260206004820152603260248201527f54686520726571756573742073686f756c64206e6f74206861766520616c726560448201527130b23c903132b2b7103234b9b83aba32b21760711b6064820152608401610807565b8154600d8054600092600160481b900462ffffff169081106118c3576118c3612ef2565b600091825260208220600390910201805460405163f7434ea960e01b81529193506001600160a01b03169190829063f7434ea990611908906001870190600401613258565b602060405180830381865afa158015611925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119499190612fd2565b90506000806002895460ff1660038111156119665761196661289e565b1461197357600854611977565b6007545b9050611983818461326b565b915050803410156119e15760405162461bcd60e51b815260206004820152602260248201527f596f75206d7573742066756c6c792066756e6420746865206368616c6c656e67604482015261329760f11b6064820152608401610807565b818189600101546119f2919061326b565b6119fc9190612edf565b6001808a019190915586810180546001600160a01b0319163317905560405163c13517e160e01b81526001600160a01b0385169163c13517e1918591611a4a916002918a0190600401613352565b60206040518083038185885af1158015611a68573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a8d9190612fd2565b8086556001808701805460ff191690911790556001600160a01b0384166000908152600b602090815260408083209383529290529081208c9055611ad18c89611f67565b9050600080885460ff166001811115611aec57611aec61289e565b14611af957600454611afd565b6003545b90508660000154856001600160a01b03167f8bd32f430ff060e6bd204709b3790c9807987263d3230c580dc80b5f89e271868484604051611b57929190918252602082015260606040820181905260009082015260800190565b60405180910390a38a15611bdf578560020160009054906101000a90046001600160a01b03166001600160a01b031663a6a7f0eb838e8e6040518463ffffffff1660e01b8152600401611bac9392919061336b565b600060405180830381600087803b158015611bc657600080fd5b505af1158015611bda573d6000803e3d6000fd5b505050505b82341115611c0d57336108fc611bf58534612edf565b6040518115909202916000818181858888f150505050505b50505050505050505050505050565b6001546001600160a01b03163314611c465760405162461bcd60e51b815260040161080790612e4f565b600655565b6001546001600160a01b03163314611c755760405162461bcd60e51b815260040161080790612e4f565b6040516001600160a01b038216907f344e4755cad3cd67dadc30e884f068430a1d0a62dd5d14a6a062d6e630ec298790600090a250565b6000838152600a602052604090206001815460ff166003811115611cd257611cd261289e565b14611cef5760405162461bcd60e51b81526004016108079061330c565b6002810180546000916003840191839182611d09836131c2565b919050558152602001908152602001600020905060006001600d80549050611d319190612edf565b90506000600d8281548110611d4857611d48612ef2565b600091825260208220600390910201805460405163f7434ea960e01b81529193506001600160a01b03169190829063f7434ea990611d8d906001870190600401613258565b602060405180830381865afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce9190612fd2565b9050600060065482611de0919061326b565b905080341015611e025760405162461bcd60e51b81526004016108079061327e565b60018781018290558754600360ff1991821617895587546bffffffffffffffffffffff001916610100426001600160401b03160262ffffff60481b191617600160481b62ffffff891602176bffffffffffffffffffffff001633600160601b0290911617811787556002880154600091611e81918d9161060e91612edf565b90508a7f73057048557c37c893f346985dc1d461cf12b00f09397bb275613203124c2be182604051611eb591815260200190565b60405180910390a28815611f2c57600285015460405163a6a7f0eb60e01b81526001600160a01b039091169063a6a7f0eb90611ef99084908e908e9060040161336b565b600060405180830381600087803b158015611f1357600080fd5b505af1158015611f27573d6000803e3d6000fd5b505050505b81341115611f5a57336108fc611f428434612edf565b6040518115909202916000818181858888f150505050505b5050505050505050505050565b604080516020808201859052818301849052825180830384018152606090920190925280519101205b92915050565b600d8181548110611fa657600080fd5b6000918252602090912060039091020180546001820180546001600160a01b03909216935090611fd590613017565b80601f016020809104026020016040519081016040528092919081815260200182805461200190613017565b801561204e5780601f106120235761010080835404028352916020019161204e565b820191906000526020600020905b81548152906001019060200180831161203157829003601f168201915b505050600290930154919250506001600160a01b031683565b60008060008061207561285e565b6000878152600a60205260408120600281015482916060918a106120d55760405162461bcd60e51b81526020600482015260176024820152762932b8bab2b9ba103237b2b9903737ba1032bc34b9ba1760491b6044820152606401610807565b60008b8152600a602090815260408083208d845260030182529182902080546001600160a01b03600160601b82048116938a01939093526001820154909216928801929092526001600160401b036101009091041697506121368c8c6126b2565b919b50995094506121478c8c612708565b90945092506121568c8c61280d565b965050509295985092959890939650565b6001546001600160a01b031633146121915760405162461bcd60e51b815260040161080790612e4f565b600755565b6001546001600160a01b031633146121c05760405162461bcd60e51b815260040161080790612e4f565b600d6040518060600160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b0385811660209384015284546001808201875595835291839020845160039093020180546001600160a01b031916929091169190911781559082015191929091908201906122699082613098565b5060409190910151600290910180546001600160a01b0319166001600160a01b0390921691909117905550505050565b6001546001600160a01b031633146122c35760405162461bcd60e51b815260040161080790612e4f565b6002546040516312a6505d60e21b81526001600160a01b0390911690634a994174906122f5908590859060040161338e565b6020604051808303816000875af1158015612314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123389190612fd2565b6004555050565b6001546001600160a01b031633146123695760405162461bcd60e51b815260040161080790612e4f565b6002546040516312a6505d60e21b81526001600160a01b0390911690634a9941749061239b90859085906004016133c6565b6020604051808303816000875af11580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190612fd2565b6003555050565b6001546001600160a01b0316331461240f5760405162461bcd60e51b815260040161080790612e4f565b600855565b6001546001600160a01b0316331461243e5760405162461bcd60e51b815260040161080790612e4f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600a60205260408120600281015490919061248290600190612edf565b60008181526003840160205260409020600954815492935090916124b49061010090046001600160401b031642612edf565b116125125760405162461bcd60e51b815260206004820152602860248201527f54696d6520746f206368616c6c656e6765207468652072657175657374206d7560448201526739ba103830b9b99760c11b6064820152608401610807565b6000848152600c60209081526040808320858452909152812090600182015460ff1660028111156125455761254561289e565b1461259e5760405162461bcd60e51b815260206004820152602360248201527f54686520726571756573742073686f756c64206e6f742062652064697370757460448201526232b21760e91b6064820152608401610807565b6002845460ff1660038111156125b6576125b661289e565b036125d3578354600190859060ff191682805b0217905550612646565b6003845460ff1660038111156125eb576125eb61289e565b03612603578354600090859060ff19166001836125c9565b60405162461bcd60e51b81526020600482015260186024820152772a3432b9329036bab9ba1031329030903932b8bab2b9ba1760411b6044820152606401610807565b6040516000815285906000805160206133d98339815191529060200160405180910390a2600184018054600090915580156126aa578254604051600160601b9091046001600160a01b0316906108fc8315029083906000818181858888f150505050505b505050505050565b6000828152600c6020908152604080832084845290915281208190819060018082015460ff1660028111156126e9576126e961289e565b825460019093015491111597919650610100900460ff16945092505050565b6000828152600a6020908152604080832084845260030190915281208054600d805460609392859291600160481b90910462ffffff1690811061274d5761274d612ef2565b6000918252602090912060039091020180546001820180549293506001600160a01b0390911691819061277f90613017565b80601f01602080910402602001604051908101604052809291908181526020018280546127ab90613017565b80156127f85780601f106127cd576101008083540402835291602001916127f8565b820191906000526020600020905b8154815290600101906020018083116127db57829003601f168201915b505050505090509350935050505b9250929050565b6000828152600a6020526040812060028101548203612830576000915050611f90565b600181600201546128419190612edf565b831015612852576001915050611f90565b60010154159392505050565b60405180606001604052806003906020820280368337509192915050565b6000806040838503121561288f57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106128c4576128c461289e565b50565b6128d0816128b4565b9052565b838152606081016128e4846128b4565b8360208301526128f3836128b4565b826040830152949350505050565b60008083601f84011261291357600080fd5b5081356001600160401b0381111561292a57600080fd5b60208301915083602082850101111561280657600080fd5b6000806020838503121561295557600080fd5b82356001600160401b0381111561296b57600080fd5b61297785828601612901565b90969095509350505050565b6001600160a01b03811681146128c457600080fd5b80356129a381612983565b919050565b6000606082840312156129ba57600080fd5b50919050565b8060808101831015611f9057600080fd5b6000806000806000806000806000806000806101a08d8f0312156129f457600080fd5b6129fd8d612998565b9b50612a0b60208e01612998565b9a506001600160401b0360408e01351115612a2557600080fd5b612a358e60408f01358f01612901565b909a509850612a4660608e01612998565b9750612a5460808e01612998565b96506001600160401b0360a08e01351115612a6e57600080fd5b612a7e8e60a08f01358f016129a8565b9550612a8d8e60c08f016129c0565b94506101408d01359350612aa46101608e01612998565b92506001600160401b036101808e01351115612abf57600080fd5b612ad08e6101808f01358f01612901565b81935080925050509295989b509295989b509295989b565b600060208284031215612afa57600080fd5b5035919050565b600060208284031215612b1357600080fd5b8135612b1e81612983565b9392505050565b6060810160048510612b3957612b3961289e565b938152602081019290925260409091015290565b6000815180845260005b81811015612b7357602081850181015186830182015201612b57565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612b1e6020830184612b4d565b600080600060408486031215612bbb57600080fd5b8335925060208401356001600160401b03811115612bd857600080fd5b612be486828701612901565b9497909650939450505050565b60008060408385031215612c0457600080fd5b8235612c0f81612983565b946020939093013593505050565b600060018060a01b03808616835260606020840152612c3f6060840186612b4d565b9150808416604084015250949350505050565b60006101408a1515835260208a60208501528960408501528815156060850152608084018860005b6003811015612ca05781516001600160a01b031683529183019190830190600101612c7a565b50505050612cb160e08401876128c7565b6001600160a01b03851661010084015280610120840152612cd481840185612b4d565b9b9a5050505050505050505050565b60008060008060608587031215612cf957600080fd5b8435612d0481612983565b935060208501356001600160401b03811115612d1f57600080fd5b612d2b87828801612901565b9094509250506040850135612d3f81612983565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612d7157600080fd5b81356001600160401b0380821115612d8b57612d8b612d4a565b604051601f8301601f19908116603f01168101908282118183101715612db357612db3612d4a565b81604052838152866020858801011115612dcc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612dff57600080fd5b82356001600160401b0380821115612e1657600080fd5b612e2286838701612d60565b93506020850135915080821115612e3857600080fd5b50612e4585828601612d60565b9150509250929050565b6020808252818101527f5468652063616c6c6572206d7573742062652074686520676f7665726e6f722e604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000612ec1602083018486612e84565b949350505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611f9057611f90612ec9565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112612f1e57600080fd5b9190910192915050565b6000808335601e19843603018112612f3f57600080fd5b8301803591506001600160401b03821115612f5957600080fd5b60200191503681900382131561280657600080fd5b600c81526b2932b3b4b9ba3930ba34b7b760a11b602082015260400190565b606081526000612f9f60608301612f6e565b8281036020840152612fb2818789612e84565b90508281036040840152612fc7818587612e84565b979650505050505050565b600060208284031215612fe457600080fd5b5051919050565b600781526614995b5bdd985b60ca1b602082015260400190565b606081526000612f9f60608301612feb565b600181811c9082168061302b57607f821691505b6020821081036129ba57634e487b7160e01b600052602260045260246000fd5b601f821115613093576000816000526020600020601f850160051c810160208610156130745750805b601f850160051c820191505b818110156126aa57828155600101613080565b505050565b81516001600160401b038111156130b1576130b1612d4a565b6130c5816130bf8454613017565b8461304b565b602080601f8311600181146130fa57600084156130e25750858301515b600019600386901b1c1916600185901b1785556126aa565b600085815260208120601f198616915b828110156131295788860151825594840194600190910190840161310a565b50858210156131475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8183823760009101908152919050565b6020808252818101527f4974656d206d75737420626520616273656e7420746f2062652061646465642e604082015260600190565b6040815260006131b0604083018587612e84565b90508215156020830152949350505050565b6000600182016131d4576131d4612ec9565b5060010190565b600081546131e881613017565b808552602060018381168015613205576001811461321f5761324d565b60ff1985168884015283151560051b88018301955061324d565b866000528260002060005b858110156132455781548a820186015290830190840161322a565b890184019650505b505050505092915050565b602081526000612b1e60208301846131db565b80820180821115611f9057611f90612ec9565b6020808252818101527f596f75206d7573742066756c6c792066756e642074686520726571756573742e604082015260600190565b6000826132d057634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601d908201527f5468652063616c6c6572206d757374206265207468652072656c61792e000000604082015260600190565b60208082526026908201527f4974656d206d757374206265207265676973746572656420746f20626520726560408201526536b7bb32b21760d11b606082015260800190565b828152604060208201526000612ec160408301846131db565b838152604060208201526000613385604083018486612e84565b95945050505050565b6060815260006133a060608301612feb565b82810360208401526133b28186612b4d565b905082810360408401526133858185612b4d565b6060815260006133a060608301612f6e56fed768d67a683a3f5110d48ee5af827e22f4f36d017d764d3bfb11982492b19536a2646970667358221220f03715f5630f7daacc950c8b01b93ed005859c2703b451d48f019e0192c993c764736f6c63430008180033", "devdoc": { "events": { "ConnectedListSet(address)": { @@ -953,8 +953,8 @@ "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.", + "_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." @@ -1014,7 +1014,7 @@ "challengeRequest(bytes32,string)": { "details": "Challenges the request of the item. Accepts enough ETH to cover the deposit, reimburses the rest.", "params": { - "_evidence": "A link to evidence using its URI.", + "_evidence": "Stringified evidence object, example: '{\"name\" : \"Justification\", \"description\" : \"Description\", \"fileURI\" : \"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\"}'.", "_itemID": "The ID of the item which request to challenge." } }, @@ -1172,7 +1172,7 @@ "removeItem(bytes32,string)": { "details": "Submit a request to remove an item from the list. Accepts enough ETH to cover the deposit, reimburses the rest.", "params": { - "_evidence": "A link to evidence using its URI.", + "_evidence": "Stringified evidence object, example: '{\"name\" : \"Justification\", \"description\" : \"Description\", \"fileURI\" : \"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\"}'.", "_itemID": "The ID of the item to remove." } }, @@ -1214,7 +1214,7 @@ "storageLayout": { "storage": [ { - "astId": 940, + "astId": 958, "contract": "src/CurateV2.sol:CurateV2", "label": "initialized", "offset": 0, @@ -1222,7 +1222,7 @@ "type": "t_bool" }, { - "astId": 945, + "astId": 963, "contract": "src/CurateV2.sol:CurateV2", "label": "relayerContract", "offset": 1, @@ -1230,7 +1230,7 @@ "type": "t_address" }, { - "astId": 947, + "astId": 965, "contract": "src/CurateV2.sol:CurateV2", "label": "governor", "offset": 0, @@ -1238,15 +1238,15 @@ "type": "t_address" }, { - "astId": 950, + "astId": 968, "contract": "src/CurateV2.sol:CurateV2", "label": "templateRegistry", "offset": 0, "slot": "2", - "type": "t_contract(IDisputeTemplateRegistry)236" + "type": "t_contract(IDisputeTemplateRegistry)247" }, { - "astId": 952, + "astId": 970, "contract": "src/CurateV2.sol:CurateV2", "label": "templateIdRegistration", "offset": 0, @@ -1254,7 +1254,7 @@ "type": "t_uint256" }, { - "astId": 954, + "astId": 972, "contract": "src/CurateV2.sol:CurateV2", "label": "templateIdRemoval", "offset": 0, @@ -1262,7 +1262,7 @@ "type": "t_uint256" }, { - "astId": 956, + "astId": 974, "contract": "src/CurateV2.sol:CurateV2", "label": "submissionBaseDeposit", "offset": 0, @@ -1270,7 +1270,7 @@ "type": "t_uint256" }, { - "astId": 958, + "astId": 976, "contract": "src/CurateV2.sol:CurateV2", "label": "removalBaseDeposit", "offset": 0, @@ -1278,7 +1278,7 @@ "type": "t_uint256" }, { - "astId": 960, + "astId": 978, "contract": "src/CurateV2.sol:CurateV2", "label": "submissionChallengeBaseDeposit", "offset": 0, @@ -1286,7 +1286,7 @@ "type": "t_uint256" }, { - "astId": 962, + "astId": 980, "contract": "src/CurateV2.sol:CurateV2", "label": "removalChallengeBaseDeposit", "offset": 0, @@ -1294,7 +1294,7 @@ "type": "t_uint256" }, { - "astId": 964, + "astId": 982, "contract": "src/CurateV2.sol:CurateV2", "label": "challengePeriodDuration", "offset": 0, @@ -1302,15 +1302,15 @@ "type": "t_uint256" }, { - "astId": 969, + "astId": 987, "contract": "src/CurateV2.sol:CurateV2", "label": "items", "offset": 0, "slot": "10", - "type": "t_mapping(t_bytes32,t_struct(Item)897_storage)" + "type": "t_mapping(t_bytes32,t_struct(Item)915_storage)" }, { - "astId": 975, + "astId": 993, "contract": "src/CurateV2.sol:CurateV2", "label": "arbitratorDisputeIDToItemID", "offset": 0, @@ -1318,20 +1318,20 @@ "type": "t_mapping(t_address,t_mapping(t_uint256,t_bytes32))" }, { - "astId": 982, + "astId": 1000, "contract": "src/CurateV2.sol:CurateV2", "label": "requestsDisputeData", "offset": 0, "slot": "12", - "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_struct(DisputeData)918_storage))" + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_struct(DisputeData)936_storage))" }, { - "astId": 986, + "astId": 1004, "contract": "src/CurateV2.sol:CurateV2", "label": "arbitrationParamsChanges", "offset": 0, "slot": "13", - "type": "t_array(t_struct(ArbitrationParams)927_storage)dyn_storage" + "type": "t_array(t_struct(ArbitrationParams)945_storage)dyn_storage" } ], "types": { @@ -1345,8 +1345,8 @@ "label": "address payable", "numberOfBytes": "20" }, - "t_array(t_struct(ArbitrationParams)927_storage)dyn_storage": { - "base": "t_struct(ArbitrationParams)927_storage", + "t_array(t_struct(ArbitrationParams)945_storage)dyn_storage": { + "base": "t_struct(ArbitrationParams)945_storage", "encoding": "dynamic_array", "label": "struct CurateV2.ArbitrationParams[]", "numberOfBytes": "32" @@ -1366,37 +1366,37 @@ "label": "bytes", "numberOfBytes": "32" }, - "t_contract(EvidenceModule)75": { + "t_contract(EvidenceModule)86": { "encoding": "inplace", "label": "contract EvidenceModule", "numberOfBytes": "20" }, - "t_contract(IArbitratorV2)210": { + "t_contract(IArbitratorV2)221": { "encoding": "inplace", "label": "contract IArbitratorV2", "numberOfBytes": "20" }, - "t_contract(IDisputeTemplateRegistry)236": { + "t_contract(IDisputeTemplateRegistry)247": { "encoding": "inplace", "label": "contract IDisputeTemplateRegistry", "numberOfBytes": "20" }, - "t_enum(DisputeStatus)884": { + "t_enum(DisputeStatus)902": { "encoding": "inplace", "label": "enum CurateV2.DisputeStatus", "numberOfBytes": "1" }, - "t_enum(Party)877": { + "t_enum(Party)895": { "encoding": "inplace", "label": "enum CurateV2.Party", "numberOfBytes": "1" }, - "t_enum(RequestType)880": { + "t_enum(RequestType)898": { "encoding": "inplace", "label": "enum CurateV2.RequestType", "numberOfBytes": "1" }, - "t_enum(Status)873": { + "t_enum(Status)891": { "encoding": "inplace", "label": "enum CurateV2.Status", "numberOfBytes": "1" @@ -1408,19 +1408,19 @@ "numberOfBytes": "32", "value": "t_mapping(t_uint256,t_bytes32)" }, - "t_mapping(t_bytes32,t_mapping(t_uint256,t_struct(DisputeData)918_storage))": { + "t_mapping(t_bytes32,t_mapping(t_uint256,t_struct(DisputeData)936_storage))": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => mapping(uint256 => struct CurateV2.DisputeData))", "numberOfBytes": "32", - "value": "t_mapping(t_uint256,t_struct(DisputeData)918_storage)" + "value": "t_mapping(t_uint256,t_struct(DisputeData)936_storage)" }, - "t_mapping(t_bytes32,t_struct(Item)897_storage)": { + "t_mapping(t_bytes32,t_struct(Item)915_storage)": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => struct CurateV2.Item)", "numberOfBytes": "32", - "value": "t_struct(Item)897_storage" + "value": "t_struct(Item)915_storage" }, "t_mapping(t_uint256,t_bytes32)": { "encoding": "mapping", @@ -1429,34 +1429,34 @@ "numberOfBytes": "32", "value": "t_bytes32" }, - "t_mapping(t_uint256,t_struct(DisputeData)918_storage)": { + "t_mapping(t_uint256,t_struct(DisputeData)936_storage)": { "encoding": "mapping", "key": "t_uint256", "label": "mapping(uint256 => struct CurateV2.DisputeData)", "numberOfBytes": "32", - "value": "t_struct(DisputeData)918_storage" + "value": "t_struct(DisputeData)936_storage" }, - "t_mapping(t_uint256,t_struct(Request)909_storage)": { + "t_mapping(t_uint256,t_struct(Request)927_storage)": { "encoding": "mapping", "key": "t_uint256", "label": "mapping(uint256 => struct CurateV2.Request)", "numberOfBytes": "32", - "value": "t_struct(Request)909_storage" + "value": "t_struct(Request)927_storage" }, - "t_struct(ArbitrationParams)927_storage": { + "t_struct(ArbitrationParams)945_storage": { "encoding": "inplace", "label": "struct CurateV2.ArbitrationParams", "members": [ { - "astId": 921, + "astId": 939, "contract": "src/CurateV2.sol:CurateV2", "label": "arbitrator", "offset": 0, "slot": "0", - "type": "t_contract(IArbitratorV2)210" + "type": "t_contract(IArbitratorV2)221" }, { - "astId": 923, + "astId": 941, "contract": "src/CurateV2.sol:CurateV2", "label": "arbitratorExtraData", "offset": 0, @@ -1464,22 +1464,22 @@ "type": "t_bytes_storage" }, { - "astId": 926, + "astId": 944, "contract": "src/CurateV2.sol:CurateV2", "label": "evidenceModule", "offset": 0, "slot": "2", - "type": "t_contract(EvidenceModule)75" + "type": "t_contract(EvidenceModule)86" } ], "numberOfBytes": "96" }, - "t_struct(DisputeData)918_storage": { + "t_struct(DisputeData)936_storage": { "encoding": "inplace", "label": "struct CurateV2.DisputeData", "members": [ { - "astId": 911, + "astId": 929, "contract": "src/CurateV2.sol:CurateV2", "label": "disputeID", "offset": 0, @@ -1487,38 +1487,38 @@ "type": "t_uint256" }, { - "astId": 914, + "astId": 932, "contract": "src/CurateV2.sol:CurateV2", "label": "status", "offset": 0, "slot": "1", - "type": "t_enum(DisputeStatus)884" + "type": "t_enum(DisputeStatus)902" }, { - "astId": 917, + "astId": 935, "contract": "src/CurateV2.sol:CurateV2", "label": "ruling", "offset": 1, "slot": "1", - "type": "t_enum(Party)877" + "type": "t_enum(Party)895" } ], "numberOfBytes": "64" }, - "t_struct(Item)897_storage": { + "t_struct(Item)915_storage": { "encoding": "inplace", "label": "struct CurateV2.Item", "members": [ { - "astId": 887, + "astId": 905, "contract": "src/CurateV2.sol:CurateV2", "label": "status", "offset": 0, "slot": "0", - "type": "t_enum(Status)873" + "type": "t_enum(Status)891" }, { - "astId": 889, + "astId": 907, "contract": "src/CurateV2.sol:CurateV2", "label": "sumDeposit", "offset": 0, @@ -1526,7 +1526,7 @@ "type": "t_uint256" }, { - "astId": 891, + "astId": 909, "contract": "src/CurateV2.sol:CurateV2", "label": "requestCount", "offset": 0, @@ -1534,30 +1534,30 @@ "type": "t_uint256" }, { - "astId": 896, + "astId": 914, "contract": "src/CurateV2.sol:CurateV2", "label": "requests", "offset": 0, "slot": "3", - "type": "t_mapping(t_uint256,t_struct(Request)909_storage)" + "type": "t_mapping(t_uint256,t_struct(Request)927_storage)" } ], "numberOfBytes": "128" }, - "t_struct(Request)909_storage": { + "t_struct(Request)927_storage": { "encoding": "inplace", "label": "struct CurateV2.Request", "members": [ { - "astId": 900, + "astId": 918, "contract": "src/CurateV2.sol:CurateV2", "label": "requestType", "offset": 0, "slot": "0", - "type": "t_enum(RequestType)880" + "type": "t_enum(RequestType)898" }, { - "astId": 902, + "astId": 920, "contract": "src/CurateV2.sol:CurateV2", "label": "submissionTime", "offset": 1, @@ -1565,7 +1565,7 @@ "type": "t_uint64" }, { - "astId": 904, + "astId": 922, "contract": "src/CurateV2.sol:CurateV2", "label": "arbitrationParamsIndex", "offset": 9, @@ -1573,7 +1573,7 @@ "type": "t_uint24" }, { - "astId": 906, + "astId": 924, "contract": "src/CurateV2.sol:CurateV2", "label": "requester", "offset": 12, @@ -1581,7 +1581,7 @@ "type": "t_address_payable" }, { - "astId": 908, + "astId": 926, "contract": "src/CurateV2.sol:CurateV2", "label": "challenger", "offset": 0, diff --git a/contracts/deployments/arbitrumSepoliaDevnet/CurateView.json b/contracts/deployments/arbitrumSepoliaDevnet/CurateView.json index d1c58cc..f616aac 100644 --- a/contracts/deployments/arbitrumSepoliaDevnet/CurateView.json +++ b/contracts/deployments/arbitrumSepoliaDevnet/CurateView.json @@ -1,5 +1,5 @@ { - "address": "0x0A86bC3D20a0205733383F3bB08166D5C6608f9E", + "address": "0x61DAadc87f1e0889407d2Fd725eAEB79E2B5cF80", "abi": [ { "inputs": [ @@ -359,28 +359,28 @@ "type": "function" } ], - "transactionHash": "0x71b72708c5216f4da260ecb07dd37adbe98fd077bf9e44857e804e3588014fba", + "transactionHash": "0x7687eb6dc664a39da2ec1dab4c2ce84e13e119bcbeba9e11ce87a8cc5c4dbcc5", "receipt": { "to": null, - "from": "0xD37888F19e669874cfcCF519bf267280d70498C7", - "contractAddress": "0x0A86bC3D20a0205733383F3bB08166D5C6608f9E", - "transactionIndex": 1, - "gasUsed": "1212292", + "from": "0xf1C7c037891525E360C59f708739Ac09A7670c59", + "contractAddress": "0x61DAadc87f1e0889407d2Fd725eAEB79E2B5cF80", + "transactionIndex": 2, + "gasUsed": "1204303", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x570e9cb99bc08df2276e05327782f3459541397425cddad202cffed3e0ded8c9", - "transactionHash": "0x71b72708c5216f4da260ecb07dd37adbe98fd077bf9e44857e804e3588014fba", + "blockHash": "0x0d61828b38be74f90c4d6605b57e1f63b237650f655405bac5568c03fbc0c972", + "transactionHash": "0x7687eb6dc664a39da2ec1dab4c2ce84e13e119bcbeba9e11ce87a8cc5c4dbcc5", "logs": [], - "blockNumber": 34231374, - "cumulativeGasUsed": "1212292", + "blockNumber": 143682397, + "cumulativeGasUsed": "1258200", "status": 1, "byzantium": true }, "args": [], - "numDeployments": 1, - "solcInputHash": "f9af6975b5d788ca655644467f8fb5a2", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract CurateV2\",\"name\":\"_curate\",\"type\":\"address\"}],\"name\":\"fetchArbitrable\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"governor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"relayerContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"submissionBaseDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removalBaseDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"submissionChallengeBaseDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removalChallengeBaseDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"challengePeriodDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"templateRegistry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"templateIdRegistration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"templateIdRemoval\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"arbitrationCost\",\"type\":\"uint256\"}],\"internalType\":\"struct CurateView.ArbitrableData\",\"name\":\"result\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CurateV2\",\"name\":\"_curate\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"getItem\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"enum CurateV2.Status\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"disputed\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"resolved\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"},{\"internalType\":\"enum CurateV2.Party\",\"name\":\"ruling\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"submissionTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRequests\",\"type\":\"uint256\"}],\"internalType\":\"struct CurateView.QueryResult\",\"name\":\"result\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CurateV2\",\"name\":\"_curate\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"getItemData\",\"outputs\":[{\"components\":[{\"internalType\":\"enum CurateV2.Status\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRequests\",\"type\":\"uint256\"}],\"internalType\":\"struct CurateView.ItemData\",\"name\":\"item\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CurateV2\",\"name\":\"_curate\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"getItemRequests\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disputed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"submissionTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"resolved\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"}],\"internalType\":\"struct CurateView.ItemRequest[]\",\"name\":\"requests\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CurateV2\",\"name\":\"_curate\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"getLatestRequestData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"enum CurateV2.Status\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRequests\",\"type\":\"uint256\"}],\"internalType\":\"struct CurateView.ItemData\",\"name\":\"item\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"disputed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"submissionTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"resolved\",\"type\":\"bool\"},{\"internalType\":\"address payable[3]\",\"name\":\"parties\",\"type\":\"address[3]\"},{\"internalType\":\"enum CurateV2.Party\",\"name\":\"ruling\",\"type\":\"uint8\"},{\"internalType\":\"contract IArbitratorV2\",\"name\":\"arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"}],\"internalType\":\"struct CurateView.RequestData\",\"name\":\"request\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"fetchArbitrable(address)\":{\"details\":\"Fetch Curate storage in a single call.\",\"params\":{\"_curate\":\"The address of the Curate contract to query.\"},\"returns\":{\"result\":\"The latest storage data.\"}},\"getItem(address,bytes32)\":{\"details\":\"Fetch the latest data on an item in a single call.\",\"params\":{\"_curate\":\"The address of the Curate contract to query.\",\"_itemID\":\"The ID of the item to query.\"},\"returns\":{\"result\":\"The item data.\"}},\"getItemData(address,bytes32)\":{\"details\":\"Fetch data of the an item and return a struct.\",\"params\":{\"_curate\":\"The address of the Curate contract to query.\",\"_itemID\":\"The ID of the item to query.\"},\"returns\":{\"item\":\"The item data.\"}},\"getItemRequests(address,bytes32)\":{\"details\":\"Fetch all requests for an item.\",\"params\":{\"_curate\":\"The address of the Curate contract to query.\",\"_itemID\":\"The ID of the item to query.\"},\"returns\":{\"requests\":\"The items requests.\"}},\"getLatestRequestData(address,bytes32)\":{\"details\":\"Fetch the latest request of an item.\",\"params\":{\"_curate\":\"The address of the Curate contract to query.\",\"_itemID\":\"The ID of the item to query.\"},\"returns\":{\"request\":\"The request data.\"}}},\"title\":\"CurateView A view contract to fetch, batch, parse and return Curate contract data efficiently. This contract includes functions that can halt execution due to out-of-gas exceptions. Because of this it should never be relied upon by other contracts.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/CurateView.sol\":\"CurateView\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@kleros/kleros-v2-contracts/arbitration/evidence/EvidenceModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @fnanni-0]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n/// @custom:tools: []\\n\\npragma solidity 0.8.18;\\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 // ************************************* //\\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 /// @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 function initialize(address _governor) external reinitializer(1) {\\n governor = _governor;\\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 IPFS path to evidence, example: '/ipfs/Qmarwkf7C9RuzDEJNnarT3WZ7kem5bk8DZAzx78acJjMFH/evidence.json'.\\n function submitEvidence(uint256 _externalDisputeID, string calldata _evidence) external {\\n emit Evidence(_externalDisputeID, msg.sender, _evidence);\\n }\\n}\\n\",\"keccak256\":\"0x32d2c14255a266083094597f009f557e2db62727fb8a8fa9cf3f1760be58300c\",\"license\":\"MIT\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/arbitration/interfaces/IDisputeTemplateRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\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\":\"0x88b0038d226532e6cf862a485d162f7bca61ac3d361d6801146b55a240f091ac\",\"license\":\"MIT\"},\"@kleros/kleros-v2-contracts/arbitration/interfaces/IEvidence.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.18;\\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 IPFS path to evidence, example: '/ipfs/Qmarwkf7C9RuzDEJNnarT3WZ7kem5bk8DZAzx78acJjMFH/evidence.json'\\n event Evidence(uint256 indexed _externalDisputeID, address indexed _party, string _evidence);\\n}\\n\",\"keccak256\":\"0x3350da62267a5dad4616dafd9916fe3bfa4cdabfce124709ac3b7d087361e8c4\",\"license\":\"MIT\"},\"@kleros/kleros-v2-contracts/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 * ```\\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\":\"0xcfffacf78b92e89a0123aff2c86188abc5327bb59b223f04e1cc1267234bd828\",\"license\":\"MIT\"},\"@kleros/kleros-v2-contracts/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\":\"0xbac7476deeee8ebbfc895a42e8b50a01c7549164a48ee2ddb0e2307946ee35f9\",\"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/CurateV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @mtsalenc, @hbarcelos]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"@kleros/kleros-v2-contracts/arbitration/interfaces/IArbitrableV2.sol\\\";\\nimport {EvidenceModule} from \\\"@kleros/kleros-v2-contracts/arbitration/evidence/EvidenceModule.sol\\\";\\nimport \\\"@kleros/kleros-v2-contracts/arbitration/interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\n/// @title Curate\\n/// Curated registry contract compatible with V2. The V1 version is here https://github.com/kleros/tcr/blob/master/contracts/LightGeneralizedTCR.sol\\ncontract CurateV2 is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Status {\\n Absent, // The item is not in the registry.\\n Registered, // The item is in the registry.\\n RegistrationRequested, // The item has a request to be added to the registry.\\n ClearingRequested // The item has a request to be removed from the registry.\\n }\\n\\n enum Party {\\n None, // Party per default when there is no challenger or requester. Also used for unconclusive ruling.\\n Requester, // Party that made the request to change a status.\\n Challenger // Party that challenges the request to change a status.\\n }\\n\\n enum RequestType {\\n Registration, // Identifies a request to register an item to the registry.\\n Clearing // Identifies a request to remove an item from the registry.\\n }\\n\\n enum DisputeStatus {\\n None, // No dispute was created.\\n AwaitingRuling, // Dispute was created, but the final ruling was not given yet.\\n Resolved // Dispute was ruled.\\n }\\n\\n struct Item {\\n Status status; // The current status of the item.\\n uint256 sumDeposit; // The total deposit made by the requester and the challenger (if any).\\n uint256 requestCount; // The number of requests.\\n mapping(uint256 => Request) requests; // List of status change requests made for the item in the form requests[requestID].\\n }\\n\\n struct Request {\\n RequestType requestType;\\n uint64 submissionTime; // Time when the request was made. Used to track when the challenge period ends.\\n uint24 arbitrationParamsIndex; // The index for the arbitration params for the request.\\n address payable requester; // Address of the requester.\\n // Pack the requester together with the other parameters, as they are written in the same request.\\n address payable challenger; // Address of the challenger, if any.\\n // TODO: store templateRegistry in case it's changed?\\n }\\n\\n struct DisputeData {\\n uint256 disputeID; // The ID of the dispute on the arbitrator.\\n DisputeStatus status; // The current status of the dispute.\\n Party ruling; // The ruling given to a dispute.\\n }\\n\\n struct ArbitrationParams {\\n IArbitratorV2 arbitrator; // The arbitrator trusted to solve disputes for this request.\\n bytes arbitratorExtraData; // The extra data for the trusted arbitrator of this request.\\n EvidenceModule evidenceModule; // The evidence module for the arbitrator.\\n }\\n\\n struct TemplateRegistryParams {\\n address templateRegistry; // Dispute Template registry address\\n string[2] registrationTemplateParameters; // Template and data mappings json for registration requests.\\n string[2] removalTemplateParameters; // Template and data mappings json for removal requests.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n bool private initialized;\\n uint256 public constant RULING_OPTIONS = 2; // The amount of non 0 choices the arbitrator can give.\\n address public relayerContract; // The contract that is used to add or remove items directly to speed up the interchain communication.\\n address public governor; // The address that can make changes to the parameters of the contract.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n uint256 public templateIdRegistration; // The current dispute template identifier for registration requests.\\n uint256 public templateIdRemoval; // The current dispute template identifier for removal requests.\\n uint256 public submissionBaseDeposit; // The base deposit to submit an item.\\n uint256 public removalBaseDeposit; // The base deposit to remove an item.\\n uint256 public submissionChallengeBaseDeposit; // The base deposit to challenge a submission.\\n uint256 public removalChallengeBaseDeposit; // The base deposit to challenge a removal request.\\n uint256 public challengePeriodDuration; // The time after which a request becomes executable if not challenged.\\n\\n mapping(bytes32 => Item) public items; // Maps the item ID to its data in the form items[_itemID].\\n mapping(address => mapping(uint256 => bytes32)) public arbitratorDisputeIDToItemID; // Maps a dispute ID to the ID of the item with the disputed request in the form arbitratorDisputeIDToItemID[arbitrator][disputeID].\\n mapping(bytes32 => mapping(uint256 => DisputeData)) public requestsDisputeData; // Maps an item and a request to the data of the dispute related to them. requestsDisputeData[itemID][requestIndex]\\n ArbitrationParams[] public arbitrationParamsChanges;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyGovernor() {\\n require(msg.sender == governor, \\\"The caller must be the governor.\\\");\\n _;\\n }\\n\\n modifier onlyRelayer() {\\n require(msg.sender == relayerContract, \\\"The caller must be the relay.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a party makes a request, raises a dispute or when a request is resolved.\\n /// @param _itemID The ID of the affected item.\\n /// @param _updatedDirectly Whether this was emitted in either `addItemDirectly` or `removeItemDirectly`. This is used in the subgraph.\\n event ItemStatusChange(bytes32 indexed _itemID, bool _updatedDirectly);\\n\\n /// @dev Emitted when someone submits an item for the first time.\\n /// @param _itemID The ID of the new item.\\n /// @param _data Stringified JSON Object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json.\\n /// @param _addedDirectly Whether the item was added via `addItemDirectly`.\\n event NewItem(bytes32 indexed _itemID, string _data, bool _addedDirectly);\\n\\n /// @dev Emitted when someone submits a request.\\n /// @param _itemID The ID of the affected item.\\n /// @param _requestID Unique dispute identifier within this contract.\\n event RequestSubmitted(bytes32 indexed _itemID, uint256 _requestID);\\n\\n /// @dev Emitted when the address of the connected Curate contract is set. The Curate is an instance of the Curate contract where each item is the address of a Curate contract related to this one.\\n /// @param _connectedList The address of the connected Curate.\\n event ConnectedListSet(address indexed _connectedList);\\n\\n /// @dev Emitted when the list metadata ipfs uri is updated.\\n /// @param _listMetadata Ipfs uri to list metadata.\\n event ListMetadataSet(string _listMetadata);\\n\\n // ************************************* //\\n // * Initializer * //\\n // ************************************* //\\n\\n /// @dev Initialize the arbitrable curated registry.\\n /// @param _governor The trusted governor of this contract.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence contract for the arbitrator.\\n /// @param _connectedList The address of the Curate contract that stores related Curate addresses. This parameter can be left empty.\\n /// @param _templateRegistryParams The dispute template registry.\\n /// - templateRegistry : The dispute template registry.\\n /// - registrationTemplateParameters : Template and data mappings json for registration requests.\\n /// - removalTemplateParameters : Template and data mappings json for removal requests.\\n /// @param _baseDeposits The base deposits for requests/challenges as follows:\\n /// - The base deposit to submit an item.\\n /// - The base deposit to remove an item.\\n /// - The base deposit to challenge a submission.\\n /// - The base deposit to challenge a removal request.\\n /// @param _challengePeriodDuration The time in seconds parties have to challenge a request.\\n /// @param _relayerContract The address of the relayer contract to add/remove items directly.\\n /// @param _listMetadata Stringified JSON object containing list metadata (title, description, isListOfLists, etc.). Example at :- https://cloudflare-ipfs.com/ipfs/QmekLsbXtQfm2jJjdeC5TF1cJcr5qxarZ9bhKmCS9s3ebK/list-metadata.json\\n function initialize(\\n address _governor,\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule,\\n address _connectedList,\\n TemplateRegistryParams calldata _templateRegistryParams,\\n uint256[4] calldata _baseDeposits,\\n uint256 _challengePeriodDuration,\\n address _relayerContract,\\n string calldata _listMetadata\\n ) external {\\n require(!initialized, \\\"Already initialized.\\\");\\n initialized = true;\\n\\n governor = _governor;\\n submissionBaseDeposit = _baseDeposits[0];\\n removalBaseDeposit = _baseDeposits[1];\\n submissionChallengeBaseDeposit = _baseDeposits[2];\\n removalChallengeBaseDeposit = _baseDeposits[3];\\n challengePeriodDuration = _challengePeriodDuration;\\n relayerContract = _relayerContract;\\n\\n templateRegistry = IDisputeTemplateRegistry(_templateRegistryParams.templateRegistry);\\n templateIdRegistration = templateRegistry.setDisputeTemplate(\\n \\\"Registration\\\",\\n _templateRegistryParams.registrationTemplateParameters[0],\\n _templateRegistryParams.registrationTemplateParameters[1]\\n );\\n templateIdRemoval = templateRegistry.setDisputeTemplate(\\n \\\"Removal\\\",\\n _templateRegistryParams.removalTemplateParameters[0],\\n _templateRegistryParams.removalTemplateParameters[1]\\n );\\n\\n arbitrationParamsChanges.push(\\n ArbitrationParams({\\n arbitrator: _arbitrator,\\n arbitratorExtraData: _arbitratorExtraData,\\n evidenceModule: _evidenceModule\\n })\\n );\\n\\n if (_connectedList != address(0)) {\\n emit ConnectedListSet(_connectedList);\\n }\\n\\n emit ListMetadataSet(_listMetadata);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Change the duration of the challenge period.\\n /// @param _challengePeriodDuration The new duration of the challenge period.\\n function changeChallengePeriodDuration(uint256 _challengePeriodDuration) external onlyGovernor {\\n challengePeriodDuration = _challengePeriodDuration;\\n }\\n\\n /// @dev Change the base amount required as a deposit to submit an item.\\n /// @param _submissionBaseDeposit The new base amount of wei required to submit an item.\\n function changeSubmissionBaseDeposit(uint256 _submissionBaseDeposit) external onlyGovernor {\\n submissionBaseDeposit = _submissionBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to remove an item.\\n /// @param _removalBaseDeposit The new base amount of wei required to remove an item.\\n function changeRemovalBaseDeposit(uint256 _removalBaseDeposit) external onlyGovernor {\\n removalBaseDeposit = _removalBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to challenge a submission.\\n /// @param _submissionChallengeBaseDeposit The new base amount of wei required to challenge a submission.\\n function changeSubmissionChallengeBaseDeposit(uint256 _submissionChallengeBaseDeposit) external onlyGovernor {\\n submissionChallengeBaseDeposit = _submissionChallengeBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to challenge a removal request.\\n /// @param _removalChallengeBaseDeposit The new base amount of wei required to challenge a removal request.\\n function changeRemovalChallengeBaseDeposit(uint256 _removalChallengeBaseDeposit) external onlyGovernor {\\n removalChallengeBaseDeposit = _removalChallengeBaseDeposit;\\n }\\n\\n /// @dev Change the governor of the curated registry.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external onlyGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Change the address of connectedList, the Curate instance that stores addresses of Curate contracts related to this one.\\n /// @param _connectedList The address of the connectedList contract to use.\\n function changeConnectedList(address _connectedList) external onlyGovernor {\\n emit ConnectedListSet(_connectedList);\\n }\\n\\n /// @dev Update list metadata ipfs uri.\\n /// @param _listMetadata Ipfs uri to list metadata\\n function changeListMetadata(string calldata _listMetadata) external onlyGovernor {\\n emit ListMetadataSet(_listMetadata);\\n }\\n\\n /// @dev Change the address of the relay contract.\\n /// @param _relayerContract The new address of the relay contract.\\n function changeRelayerContract(address _relayerContract) external onlyGovernor {\\n relayerContract = _relayerContract;\\n }\\n\\n /// @dev Changes the address of Template Registry contract.\\n /// @param _templateRegistry The new template registry.\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external onlyGovernor {\\n templateRegistry = _templateRegistry;\\n // TODO: automatically set templates upon changing the registry.\\n }\\n\\n /// @dev Changes the dispute template for registration requests.\\n /// @param _templateData The new template data for registration requests.\\n /// @param _templateDataMappings The new data mappings json for registration requests.\\n function changeRegistrationDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyGovernor {\\n templateIdRegistration = templateRegistry.setDisputeTemplate(\\n \\\"Registration\\\",\\n _templateData,\\n _templateDataMappings\\n );\\n }\\n\\n /// @dev Changes the dispute template for removal requests.\\n /// @param _templateData The new template data for removal requests.\\n /// @param _templateDataMappings The new data mappings json for removal requests.\\n function changeRemovalDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyGovernor {\\n templateIdRemoval = templateRegistry.setDisputeTemplate(\\\"Removal\\\", _templateData, _templateDataMappings);\\n }\\n\\n /// @notice Changes the params related to arbitration.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence module for the arbitrator.\\n function changeArbitrationParams(\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule\\n ) external onlyGovernor {\\n arbitrationParamsChanges.push(\\n ArbitrationParams({\\n arbitrator: _arbitrator,\\n arbitratorExtraData: _arbitratorExtraData,\\n evidenceModule: _evidenceModule\\n })\\n );\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Directly add an item to the list bypassing request-challenge. Can only be used by the relayer contract.\\n /// @param _item Stringified JSON Object containing Item data\\n function addItemDirectly(string calldata _item) external onlyRelayer {\\n bytes32 itemID = keccak256(abi.encodePacked(_item));\\n Item storage item = items[itemID];\\n require(item.status == Status.Absent, \\\"Item must be absent to be added.\\\");\\n\\n // Note that if the item is added directly once, the next time it is added it will emit this event again.\\n if (item.requestCount == 0) {\\n emit NewItem(itemID, _item, true);\\n }\\n\\n item.status = Status.Registered;\\n\\n emit ItemStatusChange(itemID, true);\\n }\\n\\n /// @dev Directly remove an item from the list bypassing request-challenge. Can only be used by the relayer contract.\\n /// @param _itemID The ID of the item to remove. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\\n function removeItemDirectly(bytes32 _itemID) external onlyRelayer {\\n Item storage item = items[_itemID];\\n require(item.status == Status.Registered, \\\"Item must be registered to be removed.\\\");\\n\\n item.status = Status.Absent;\\n\\n emit ItemStatusChange(_itemID, true);\\n }\\n\\n /// @dev Submit a request to register an item. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _item Stringified JSON object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\\n function addItem(string calldata _item) external payable {\\n bytes32 itemID = keccak256(abi.encodePacked(_item));\\n Item storage item = items[itemID];\\n\\n require(item.status == Status.Absent, \\\"Item must be absent to be added.\\\");\\n\\n // Note that if the item was added previously using `addItemDirectly`, the event will be emitted again here.\\n if (item.requestCount == 0) {\\n emit NewItem(itemID, _item, false);\\n }\\n\\n Request storage request = item.requests[item.requestCount++];\\n uint256 arbitrationParamsIndex = arbitrationParamsChanges.length - 1;\\n IArbitratorV2 arbitrator = arbitrationParamsChanges[arbitrationParamsIndex].arbitrator;\\n bytes storage arbitratorExtraData = arbitrationParamsChanges[arbitrationParamsIndex].arbitratorExtraData;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitratorExtraData);\\n uint256 totalCost = arbitrationCost + submissionBaseDeposit;\\n require(msg.value >= totalCost, \\\"You must fully fund the request.\\\");\\n\\n item.sumDeposit = totalCost;\\n item.status = Status.RegistrationRequested;\\n\\n request.requestType = RequestType.Registration;\\n request.submissionTime = uint64(block.timestamp);\\n request.arbitrationParamsIndex = uint24(arbitrationParamsIndex);\\n request.requester = payable(msg.sender);\\n\\n emit RequestSubmitted(itemID, getRequestID(itemID, item.requestCount - 1));\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Submit a request to remove an item from the list. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _itemID The ID of the item to remove.\\n /// @param _evidence A link to evidence using its URI.\\n function removeItem(bytes32 _itemID, string calldata _evidence) external payable {\\n Item storage item = items[_itemID];\\n\\n require(item.status == Status.Registered, \\\"Item must be registered to be removed.\\\");\\n\\n Request storage request = item.requests[item.requestCount++];\\n uint256 arbitrationParamsIndex = arbitrationParamsChanges.length - 1;\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[arbitrationParamsIndex];\\n IArbitratorV2 arbitrator = arbitrationParams.arbitrator;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitrationParams.arbitratorExtraData);\\n uint256 totalCost = arbitrationCost + removalBaseDeposit;\\n require(msg.value >= totalCost, \\\"You must fully fund the request.\\\");\\n\\n item.sumDeposit = totalCost;\\n item.status = Status.ClearingRequested;\\n\\n request.submissionTime = uint64(block.timestamp);\\n request.arbitrationParamsIndex = uint24(arbitrationParamsIndex);\\n request.requester = payable(msg.sender);\\n request.requestType = RequestType.Clearing;\\n\\n uint256 requestID = getRequestID(_itemID, item.requestCount - 1);\\n emit RequestSubmitted(_itemID, requestID);\\n\\n // Emit evidence if it was provided.\\n if (bytes(_evidence).length > 0) {\\n arbitrationParams.evidenceModule.submitEvidence(requestID, _evidence); // TODO: add a msg.sender parameter to submitEvidence.\\n }\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Challenges the request of the item. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _itemID The ID of the item which request to challenge.\\n /// @param _evidence A link to evidence using its URI.\\n function challengeRequest(bytes32 _itemID, string calldata _evidence) external payable {\\n Item storage item = items[_itemID];\\n require(item.status > Status.Registered, \\\"The item must have a pending request.\\\");\\n\\n uint256 lastRequestIndex = item.requestCount - 1;\\n Request storage request = item.requests[lastRequestIndex];\\n require(\\n block.timestamp - request.submissionTime <= challengePeriodDuration,\\n \\\"Challenges must occur during the challenge period.\\\"\\n );\\n\\n DisputeData storage disputeData = requestsDisputeData[_itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.None, \\\"The request should not have already been disputed.\\\");\\n\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n IArbitratorV2 arbitrator = arbitrationParams.arbitrator;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitrationParams.arbitratorExtraData);\\n uint256 totalCost;\\n {\\n uint256 challengerBaseDeposit = item.status == Status.RegistrationRequested\\n ? submissionChallengeBaseDeposit\\n : removalChallengeBaseDeposit;\\n totalCost = arbitrationCost + challengerBaseDeposit;\\n }\\n require(msg.value >= totalCost, \\\"You must fully fund the challenge.\\\");\\n\\n item.sumDeposit = item.sumDeposit + totalCost - arbitrationCost;\\n\\n request.challenger = payable(msg.sender);\\n\\n // Raise a dispute.\\n disputeData.disputeID = arbitrator.createDispute{value: arbitrationCost}(\\n RULING_OPTIONS,\\n arbitrationParams.arbitratorExtraData\\n );\\n disputeData.status = DisputeStatus.AwaitingRuling;\\n\\n arbitratorDisputeIDToItemID[address(arbitrator)][disputeData.disputeID] = _itemID;\\n\\n uint256 requestID = getRequestID(_itemID, lastRequestIndex);\\n uint256 templateId = request.requestType == RequestType.Registration\\n ? templateIdRegistration\\n : templateIdRemoval;\\n emit DisputeRequest(arbitrator, disputeData.disputeID, requestID, templateId, \\\"\\\");\\n\\n // Emit evidence if it was provided.\\n if (bytes(_evidence).length > 0) {\\n arbitrationParams.evidenceModule.submitEvidence(requestID, _evidence); // TODO: add a msg.sender parameter to submitEvidence.\\n }\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Executes an unchallenged request if the challenge period has passed.\\n /// @param _itemID The ID of the item to execute.\\n function executeRequest(bytes32 _itemID) external {\\n Item storage item = items[_itemID];\\n uint256 lastRequestIndex = items[_itemID].requestCount - 1;\\n\\n Request storage request = item.requests[lastRequestIndex];\\n require(\\n block.timestamp - request.submissionTime > challengePeriodDuration,\\n \\\"Time to challenge the request must pass.\\\"\\n );\\n\\n DisputeData storage disputeData = requestsDisputeData[_itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.None, \\\"The request should not be disputed.\\\");\\n\\n if (item.status == Status.RegistrationRequested) {\\n item.status = Status.Registered;\\n } else if (item.status == Status.ClearingRequested) {\\n item.status = Status.Absent;\\n } else {\\n revert(\\\"There must be a request.\\\");\\n }\\n\\n emit ItemStatusChange(_itemID, false);\\n\\n uint256 sumDeposit = item.sumDeposit;\\n item.sumDeposit = 0;\\n\\n if (sumDeposit > 0) {\\n // reimburse the requester\\n request.requester.send(sumDeposit);\\n }\\n }\\n\\n /// @dev Give a ruling for a dispute. Can only be called by the arbitrator. TRUSTED.\\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 \\\"Refused to arbitrate\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external {\\n require(_ruling <= RULING_OPTIONS, \\\"Invalid ruling option\\\");\\n\\n bytes32 itemID = arbitratorDisputeIDToItemID[msg.sender][_disputeID];\\n Item storage item = items[itemID];\\n uint256 lastRequestIndex = items[itemID].requestCount - 1;\\n Request storage request = item.requests[lastRequestIndex];\\n\\n DisputeData storage disputeData = requestsDisputeData[itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.AwaitingRuling, \\\"The request must not be resolved.\\\");\\n\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n require(address(arbitrationParams.arbitrator) == msg.sender, \\\"Only the arbitrator can give a ruling\\\");\\n\\n emit Ruling(IArbitratorV2(msg.sender), _disputeID, _ruling);\\n\\n Party winner = Party(_ruling);\\n\\n disputeData.status = DisputeStatus.Resolved;\\n disputeData.ruling = winner;\\n\\n uint256 sumDeposit = item.sumDeposit;\\n item.sumDeposit = 0;\\n\\n if (winner == Party.None) {\\n // If the arbitrator refuse to rule, then the item status should be the same it was before the request.\\n // Regarding item.status this is equivalent to the challenger winning the dispute.\\n item.status = item.status == Status.RegistrationRequested ? Status.Absent : Status.Registered;\\n\\n // Since nobody has won, then we reimburse both parties equally.\\n // If item.sumDeposit is odd, 1 wei will remain in the contract balance.\\n uint256 halfSumDeposit = sumDeposit / 2;\\n\\n request.requester.send(halfSumDeposit);\\n request.challenger.send(halfSumDeposit);\\n } else if (winner == Party.Requester) {\\n item.status = item.status == Status.RegistrationRequested ? Status.Registered : Status.Absent;\\n\\n request.requester.send(sumDeposit);\\n } else {\\n item.status = item.status == Status.RegistrationRequested ? Status.Absent : Status.Registered;\\n\\n request.challenger.send(sumDeposit);\\n }\\n\\n emit ItemStatusChange(itemID, false);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @notice Gets the local dispute ID for a given item and request.\\n /// @param _itemID The ID of the item.\\n /// @param _requestID The ID of the request.\\n /// @return Local dispute ID.\\n function getRequestID(bytes32 _itemID, uint256 _requestID) public pure returns (uint256) {\\n return uint256(keccak256(abi.encodePacked(_itemID, _requestID)));\\n }\\n\\n /// @notice Gets the arbitrator for new requests.\\n /// @dev Gets the latest value in arbitrationParamsChanges.\\n /// @return The arbitrator address.\\n function getArbitrator() external view returns (IArbitratorV2) {\\n return arbitrationParamsChanges[arbitrationParamsChanges.length - 1].arbitrator;\\n }\\n\\n /// @notice Gets the arbitratorExtraData for new requests.\\n /// @dev Gets the latest value in arbitrationParamsChanges.\\n /// @return The arbitrator extra data.\\n function getArbitratorExtraData() external view returns (bytes memory) {\\n return arbitrationParamsChanges[arbitrationParamsChanges.length - 1].arbitratorExtraData;\\n }\\n\\n /// @dev Returns item's information. Includes the total number of requests for the item\\n /// @param _itemID The ID of the queried item.\\n /// @return status The current status of the item.\\n /// @return numberOfRequests Total number of requests for the item.\\n /// @return sumDeposit The total deposit made by the requester and the challenger (if any)\\n function getItemInfo(\\n bytes32 _itemID\\n ) external view returns (Status status, uint256 numberOfRequests, uint256 sumDeposit) {\\n Item storage item = items[_itemID];\\n return (item.status, item.requestCount, item.sumDeposit);\\n }\\n\\n /// @dev Gets information on a request made for the item.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return disputed True if a dispute was raised.\\n /// @return disputeID ID of the dispute, if any.\\n /// @return submissionTime Time when the request was made.\\n /// @return resolved True if the request was executed and/or any raised disputes were resolved.\\n /// @return parties Address of requester and challenger, if any.\\n /// @return ruling The final ruling given, if any.\\n /// @return requestArbitrator The arbitrator trusted to solve disputes for this request.\\n /// @return requestArbitratorExtraData The extra data for the trusted arbitrator of this request.\\n function getRequestInfo(\\n bytes32 _itemID,\\n uint256 _requestID\\n )\\n external\\n view\\n returns (\\n bool disputed,\\n uint256 disputeID,\\n uint256 submissionTime,\\n bool resolved,\\n address payable[3] memory parties,\\n Party ruling,\\n IArbitratorV2 requestArbitrator,\\n bytes memory requestArbitratorExtraData\\n )\\n {\\n Item storage item = items[_itemID];\\n require(item.requestCount > _requestID, \\\"Request does not exist.\\\");\\n\\n Request storage request = items[_itemID].requests[_requestID];\\n\\n submissionTime = request.submissionTime;\\n parties[uint256(Party.Requester)] = request.requester;\\n parties[uint256(Party.Challenger)] = request.challenger;\\n\\n (disputed, disputeID, ruling) = getRequestDisputeData(_itemID, _requestID);\\n\\n (requestArbitrator, requestArbitratorExtraData) = getRequestArbitrationParams(_itemID, _requestID);\\n resolved = getRequestResolvedStatus(_itemID, _requestID);\\n }\\n\\n /// @dev Gets the dispute data relative to a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return disputed True if a dispute was raised.\\n /// @return disputeID ID of the dispute, if any.\\n /// @return ruling The final ruling given, if any.\\n function getRequestDisputeData(\\n bytes32 _itemID,\\n uint256 _requestID\\n ) internal view returns (bool disputed, uint256 disputeID, Party ruling) {\\n DisputeData storage disputeData = requestsDisputeData[_itemID][_requestID];\\n\\n return (disputeData.status >= DisputeStatus.AwaitingRuling, disputeData.disputeID, disputeData.ruling);\\n }\\n\\n /// @dev Gets the arbitration params relative to a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return arbitrator The arbitrator trusted to solve disputes for this request.\\n /// @return arbitratorExtraData The extra data for the trusted arbitrator of this request.\\n function getRequestArbitrationParams(\\n bytes32 _itemID,\\n uint256 _requestID\\n ) internal view returns (IArbitratorV2 arbitrator, bytes memory arbitratorExtraData) {\\n Request storage request = items[_itemID].requests[_requestID];\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n\\n return (arbitrationParams.arbitrator, arbitrationParams.arbitratorExtraData);\\n }\\n\\n /// @dev Gets the resovled status of a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return resolved True if the request was executed and/or any raised disputes were resolved.\\n function getRequestResolvedStatus(bytes32 _itemID, uint256 _requestID) internal view returns (bool resolved) {\\n Item storage item = items[_itemID];\\n\\n if (item.requestCount == 0) {\\n return false;\\n }\\n\\n if (_requestID < item.requestCount - 1) {\\n // It was resolved because it is not the last request.\\n return true;\\n }\\n\\n return item.sumDeposit == 0;\\n }\\n}\\n\",\"keccak256\":\"0x85407d640f7d486fdfde79a42d97a9fb6877022bf57b835157423ce597686e8a\",\"license\":\"MIT\"},\"src/CurateView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @mtsalenc]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport {CurateV2, IArbitratorV2} from \\\"./CurateV2.sol\\\";\\n\\n/// @title CurateView\\n/// A view contract to fetch, batch, parse and return Curate contract data efficiently.\\n/// This contract includes functions that can halt execution due to out-of-gas exceptions. Because of this it should never be relied upon by other contracts.\\ncontract CurateView {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n struct QueryResult {\\n bytes32 ID;\\n CurateV2.Status status;\\n bool disputed;\\n bool resolved;\\n uint256 disputeID;\\n CurateV2.Party ruling;\\n address requester;\\n address challenger;\\n address arbitrator;\\n bytes arbitratorExtraData;\\n uint256 submissionTime;\\n uint256 numberOfRequests;\\n }\\n\\n struct ArbitrableData {\\n address governor;\\n address arbitrator;\\n bytes arbitratorExtraData;\\n address relayerContract;\\n uint256 submissionBaseDeposit;\\n uint256 removalBaseDeposit;\\n uint256 submissionChallengeBaseDeposit;\\n uint256 removalChallengeBaseDeposit;\\n uint256 challengePeriodDuration;\\n address templateRegistry;\\n uint256 templateIdRegistration;\\n uint256 templateIdRemoval;\\n uint256 arbitrationCost;\\n }\\n\\n // Workaround stack too deep limit\\n struct ItemData {\\n CurateV2.Status status;\\n uint256 numberOfRequests;\\n }\\n\\n // Workaround stack too deep limit\\n struct RequestData {\\n ItemData item;\\n bool disputed;\\n uint256 disputeID;\\n uint256 submissionTime;\\n bool resolved;\\n address payable[3] parties;\\n CurateV2.Party ruling;\\n IArbitratorV2 arbitrator;\\n bytes arbitratorExtraData;\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Fetch Curate storage in a single call.\\n /// @param _curate The address of the Curate contract to query.\\n /// @return result The latest storage data.\\n function fetchArbitrable(CurateV2 _curate) external view returns (ArbitrableData memory result) {\\n result.governor = _curate.governor();\\n result.arbitrator = address(_curate.getArbitrator());\\n result.arbitratorExtraData = _curate.getArbitratorExtraData();\\n result.relayerContract = _curate.relayerContract();\\n result.submissionBaseDeposit = _curate.submissionBaseDeposit();\\n result.removalBaseDeposit = _curate.removalBaseDeposit();\\n result.submissionChallengeBaseDeposit = _curate.submissionChallengeBaseDeposit();\\n result.removalChallengeBaseDeposit = _curate.removalChallengeBaseDeposit();\\n result.challengePeriodDuration = _curate.challengePeriodDuration();\\n result.templateRegistry = address(_curate.templateRegistry());\\n result.templateIdRegistration = _curate.templateIdRegistration();\\n result.templateIdRemoval = _curate.templateIdRemoval();\\n result.arbitrationCost = IArbitratorV2(result.arbitrator).arbitrationCost(result.arbitratorExtraData);\\n }\\n\\n /// @dev Fetch the latest data on an item in a single call.\\n /// @param _curate The address of the Curate contract to query.\\n /// @param _itemID The ID of the item to query.\\n /// @return result The item data.\\n function getItem(CurateV2 _curate, bytes32 _itemID) public view returns (QueryResult memory result) {\\n RequestData memory request = getLatestRequestData(_curate, _itemID);\\n result = QueryResult({\\n ID: _itemID,\\n status: request.item.status,\\n disputed: request.disputed,\\n resolved: request.resolved,\\n disputeID: request.disputeID,\\n ruling: request.ruling,\\n requester: request.parties[uint256(CurateV2.Party.Requester)],\\n challenger: request.parties[uint256(CurateV2.Party.Challenger)],\\n arbitrator: address(request.arbitrator),\\n arbitratorExtraData: request.arbitratorExtraData,\\n submissionTime: request.submissionTime,\\n numberOfRequests: request.item.numberOfRequests\\n });\\n }\\n\\n struct ItemRequest {\\n bool disputed;\\n uint256 disputeID;\\n uint256 submissionTime;\\n bool resolved;\\n address requester;\\n address challenger;\\n address arbitrator;\\n bytes arbitratorExtraData;\\n }\\n\\n /// @dev Fetch all requests for an item.\\n /// @param _curate The address of the Curate contract to query.\\n /// @param _itemID The ID of the item to query.\\n /// @return requests The items requests.\\n function getItemRequests(CurateV2 _curate, bytes32 _itemID) external view returns (ItemRequest[] memory requests) {\\n ItemData memory itemData = getItemData(_curate, _itemID);\\n requests = new ItemRequest[](itemData.numberOfRequests);\\n for (uint256 i = 0; i < itemData.numberOfRequests; i++) {\\n (\\n bool disputed,\\n uint256 disputeID,\\n uint256 submissionTime,\\n bool resolved,\\n address payable[3] memory parties,\\n ,\\n IArbitratorV2 arbitrator,\\n bytes memory arbitratorExtraData\\n ) = _curate.getRequestInfo(_itemID, i);\\n\\n // Sort requests by newest first.\\n requests[itemData.numberOfRequests - i - 1] = ItemRequest({\\n disputed: disputed,\\n disputeID: disputeID,\\n submissionTime: submissionTime,\\n resolved: resolved,\\n requester: parties[uint256(CurateV2.Party.Requester)],\\n challenger: parties[uint256(CurateV2.Party.Challenger)],\\n arbitrator: address(arbitrator),\\n arbitratorExtraData: arbitratorExtraData\\n });\\n }\\n }\\n\\n /// @dev Fetch data of the an item and return a struct.\\n /// @param _curate The address of the Curate contract to query.\\n /// @param _itemID The ID of the item to query.\\n /// @return item The item data.\\n function getItemData(CurateV2 _curate, bytes32 _itemID) public view returns (ItemData memory item) {\\n (CurateV2.Status status, uint256 numberOfRequests, ) = _curate.getItemInfo(_itemID);\\n item = ItemData(status, numberOfRequests);\\n }\\n\\n /// @dev Fetch the latest request of an item.\\n /// @param _curate The address of the Curate contract to query.\\n /// @param _itemID The ID of the item to query.\\n /// @return request The request data.\\n function getLatestRequestData(CurateV2 _curate, bytes32 _itemID) public view returns (RequestData memory request) {\\n ItemData memory item = getItemData(_curate, _itemID);\\n (\\n bool disputed,\\n uint256 disputeID,\\n uint256 submissionTime,\\n bool resolved,\\n address payable[3] memory parties,\\n CurateV2.Party ruling,\\n IArbitratorV2 arbitrator,\\n bytes memory arbitratorExtraData\\n ) = _curate.getRequestInfo(_itemID, item.numberOfRequests - 1);\\n request = RequestData(\\n item,\\n disputed,\\n disputeID,\\n submissionTime,\\n resolved,\\n parties,\\n ruling,\\n arbitrator,\\n arbitratorExtraData\\n );\\n }\\n}\\n\",\"keccak256\":\"0x0b689fe46ff68c87c265455cb369984ef18962fd05bf70b3109be93dc56a5c05\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506114f7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630f4d1e731461005c5780633f869479146100855780637d1d8cc2146100a557806387ef093a146100c5578063cefded2e146100e5575b600080fd5b61006f61006a366004610d62565b610105565b60405161007c9190610de3565b60405180910390f35b610098610093366004610eb5565b61075c565b60405161007c9190610f1b565b6100b86100b3366004610eb5565b6108a5565b60405161007c9190611036565b6100d86100d3366004610eb5565b6109cd565b60405161007c91906110e4565b6100f86100f3366004610eb5565b610c15565b60405161007c91906111ba565b610194604051806101a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b816001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f691906111ce565b6001600160a01b039081168252604080516307e75ba360e11b8152905191841691630fceb746916004808201926020929091908290030181865afa158015610242573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026691906111ce565b81602001906001600160a01b031690816001600160a01b031681525050816001600160a01b0316637932ecf36040518163ffffffff1660e01b8152600401600060405180830381865afa1580156102c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102e991908101906112c2565b8160400181905250816001600160a01b031663c669439e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561032f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035391906111ce565b81606001906001600160a01b031690816001600160a01b031681525050816001600160a01b031663bb0b86ff6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d291906112f7565b816080018181525050816001600160a01b031663c2f2beea6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043d91906112f7565b8160a0018181525050816001600160a01b031663a37b6ad46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a891906112f7565b8160c0018181525050816001600160a01b031663787471a96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051391906112f7565b8160e0018181525050816001600160a01b03166282a36d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d91906112f7565b81610100018181525050816001600160a01b031663a0af81f06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e991906111ce565b8161012001906001600160a01b031690816001600160a01b031681525050816001600160a01b031663107a8bfd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610645573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066991906112f7565b81610140018181525050816001600160a01b0316635d06e92c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d591906112f7565b6101608201526020810151604080830151905163f7434ea960e01b81526001600160a01b039092169163f7434ea99161071091600401611310565b602060405180830381865afa15801561072d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075191906112f7565b610180820152919050565b604080516101808101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082015261014081018290526101608101829052906107c684846108a5565b905060405180610180016040528084815260200182600001516000015160038111156107f4576107f4610ee1565b8152602001826020015115158152602001826080015115158152602001826040015181526020018260c00151600281111561083157610831610ee1565b815260a0830180516020908101516001600160a01b03169083015251604090910190600260200201516001600160a01b031681526020018260e001516001600160a01b0316815260200182610100015181526020018260600151815260200182600001516020015181525091505092915050565b6108ad610cca565b60006108b98484610c15565b90506000806000806000806000808b6001600160a01b031663bfbcff1a8c60018c602001516108e8919061134f565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381865afa158015610929573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109519190810190611381565b975097509750975097509750975097506040518061012001604052808a8152602001891515815260200188815260200187815260200186151581526020018581526020018460028111156109a7576109a7610ee1565b81526001600160a01b0390931660208401526040909201529a9950505050505050505050565b606060006109db8484610c15565b9050806020015167ffffffffffffffff8111156109fa576109fa6111fb565b604051908082528060200260200182016040528015610a6b57816020015b60408051610100810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c083019190915260e08201528252600019909201910181610a185790505b50915060005b8160200151811015610c0d5760008060008060008060008b6001600160a01b031663bfbcff1a8c8a6040518363ffffffff1660e01b8152600401610abf929190918252602082015260400190565b600060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b049190810190611381565b975097505096509650965096509650604051806101000160405280881515815260200187815260200186815260200185151581526020018460016002811115610b4f57610b4f610ee1565b60038110610b5f57610b5f611323565b60200201516001600160a01b0316815260200184600280811115610b8557610b85610ee1565b60038110610b9557610b95611323565b60200201516001600160a01b03168152602001836001600160a01b03168152602001828152508a60018a8c60200151610bce919061134f565b610bd8919061134f565b81518110610be857610be8611323565b6020026020010181905250505050505050508080610c059061146d565b915050610a71565b505092915050565b6040805180820190915260008082526020820152604051634aac84e560e01b81526004810183905260009081906001600160a01b03861690634aac84e590602401606060405180830381865afa158015610c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c979190611486565b50915091506040518060400160405280836003811115610cb957610cb9610ee1565b815260200191909152949350505050565b604080516101608101825260006101208201818152610140830182905282526020820181905291810182905260608101829052608081019190915260a08101610d11610d2c565b81526020016000815260006020820152606060409091015290565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b0381168114610d5f57600080fd5b50565b600060208284031215610d7457600080fd5b8135610d7f81610d4a565b9392505050565b6001600160a01b03169052565b60005b83811015610dae578181015183820152602001610d96565b50506000910152565b60008151808452610dcf816020860160208601610d93565b601f01601f19169290920160200192915050565b60208152610df5602082018351610d86565b60006020830151610e096040840182610d86565b5060408301516101a0806060850152610e266101c0850183610db7565b91506060850151610e3a6080860182610d86565b50608085015160a085015260a085015160c085015260c085015160e085015260e0850151610100818187015280870151915050610120818187015280870151915050610140610e8b81870183610d86565b86015161016086810191909152860151610180808701919091529095015193019290925250919050565b60008060408385031215610ec857600080fd5b8235610ed381610d4a565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60048110610f0757610f07610ee1565b9052565b60038110610f0757610f07610ee1565b602081528151602082015260006020830151610f3a6040840182610ef7565b5060408301518015156060840152506060830151801515608084015250608083015160a083015260a0830151610f7360c0840182610f0b565b5060c0830151610f8660e0840182610d86565b5060e0830151610100610f9b81850183610d86565b8401519050610120610faf84820183610d86565b808501519150506101806101408181860152610fcf6101a0860184610db7565b9086015161016086810191909152909501519301929092525090919050565b610ff9828251610ef7565b602090810151910152565b8060005b60038110156110305781516001600160a01b0316845260209384019390910190600101611008565b50505050565b60208152611048602082018351610fee565b6000602083015161105d606084018215159052565b5060408301516080830152606083015160a0830152608083015161108560c084018215159052565b5060a083015161109860e0840182611004565b5060c08301516110ac610140840182610f0b565b5060e08301516110c0610160840182610d86565b50610100830151610180838101526110dc6101a0840182610db7565b949350505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156111ac57603f198984030185528151610100815115158552888201518986015287820151888601526060808301511515818701525060808083015161115682880182610d86565b505060a08083015161116a82880182610d86565b505060c08083015161117e82880182610d86565b505060e09182015191850181905261119885820183610db7565b96890196945050509086019060010161110b565b509098975050505050505050565b604081016111c88284610fee565b92915050565b6000602082840312156111e057600080fd5b8151610d7f81610d4a565b80516111f681610d4a565b919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611234576112346111fb565b60405290565b600082601f83011261124b57600080fd5b815167ffffffffffffffff80821115611266576112666111fb565b604051601f8301601f19908116603f0116810190828211818310171561128e5761128e6111fb565b816040528381528660208588010111156112a757600080fd5b6112b8846020830160208901610d93565b9695505050505050565b6000602082840312156112d457600080fd5b815167ffffffffffffffff8111156112eb57600080fd5b6110dc8482850161123a565b60006020828403121561130957600080fd5b5051919050565b602081526000610d7f6020830184610db7565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156111c8576111c8611339565b805180151581146111f657600080fd5b8051600381106111f657600080fd5b600080600080600080600080610140898b03121561139e57600080fd5b6113a789611362565b97506020808a0151975060408a015196506113c460608b01611362565b95508a609f8b01126113d557600080fd5b6113dd611211565b8060e08c018d8111156113ef57600080fd5b60808d015b8181101561141457805161140781610d4a565b84529284019284016113f4565b5081975061142181611372565b9650505050506114346101008a016111eb565b915061012089015167ffffffffffffffff81111561145157600080fd5b61145d8b828c0161123a565b9150509295985092959890939650565b60006001820161147f5761147f611339565b5060010190565b60008060006060848603121561149b57600080fd5b8351600481106114aa57600080fd5b60208501516040909501519096949550939250505056fea2646970667358221220635a6d404bfaa67f09a07e5e6cd2fd26888b1cb335a56f7d56e5c98e1d78ee0b64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80630f4d1e731461005c5780633f869479146100855780637d1d8cc2146100a557806387ef093a146100c5578063cefded2e146100e5575b600080fd5b61006f61006a366004610d62565b610105565b60405161007c9190610de3565b60405180910390f35b610098610093366004610eb5565b61075c565b60405161007c9190610f1b565b6100b86100b3366004610eb5565b6108a5565b60405161007c9190611036565b6100d86100d3366004610eb5565b6109cd565b60405161007c91906110e4565b6100f86100f3366004610eb5565b610c15565b60405161007c91906111ba565b610194604051806101a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b816001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f691906111ce565b6001600160a01b039081168252604080516307e75ba360e11b8152905191841691630fceb746916004808201926020929091908290030181865afa158015610242573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026691906111ce565b81602001906001600160a01b031690816001600160a01b031681525050816001600160a01b0316637932ecf36040518163ffffffff1660e01b8152600401600060405180830381865afa1580156102c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102e991908101906112c2565b8160400181905250816001600160a01b031663c669439e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561032f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035391906111ce565b81606001906001600160a01b031690816001600160a01b031681525050816001600160a01b031663bb0b86ff6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d291906112f7565b816080018181525050816001600160a01b031663c2f2beea6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043d91906112f7565b8160a0018181525050816001600160a01b031663a37b6ad46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a891906112f7565b8160c0018181525050816001600160a01b031663787471a96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051391906112f7565b8160e0018181525050816001600160a01b03166282a36d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d91906112f7565b81610100018181525050816001600160a01b031663a0af81f06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e991906111ce565b8161012001906001600160a01b031690816001600160a01b031681525050816001600160a01b031663107a8bfd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610645573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066991906112f7565b81610140018181525050816001600160a01b0316635d06e92c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d591906112f7565b6101608201526020810151604080830151905163f7434ea960e01b81526001600160a01b039092169163f7434ea99161071091600401611310565b602060405180830381865afa15801561072d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075191906112f7565b610180820152919050565b604080516101808101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082015261014081018290526101608101829052906107c684846108a5565b905060405180610180016040528084815260200182600001516000015160038111156107f4576107f4610ee1565b8152602001826020015115158152602001826080015115158152602001826040015181526020018260c00151600281111561083157610831610ee1565b815260a0830180516020908101516001600160a01b03169083015251604090910190600260200201516001600160a01b031681526020018260e001516001600160a01b0316815260200182610100015181526020018260600151815260200182600001516020015181525091505092915050565b6108ad610cca565b60006108b98484610c15565b90506000806000806000806000808b6001600160a01b031663bfbcff1a8c60018c602001516108e8919061134f565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381865afa158015610929573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109519190810190611381565b975097509750975097509750975097506040518061012001604052808a8152602001891515815260200188815260200187815260200186151581526020018581526020018460028111156109a7576109a7610ee1565b81526001600160a01b0390931660208401526040909201529a9950505050505050505050565b606060006109db8484610c15565b9050806020015167ffffffffffffffff8111156109fa576109fa6111fb565b604051908082528060200260200182016040528015610a6b57816020015b60408051610100810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c083019190915260e08201528252600019909201910181610a185790505b50915060005b8160200151811015610c0d5760008060008060008060008b6001600160a01b031663bfbcff1a8c8a6040518363ffffffff1660e01b8152600401610abf929190918252602082015260400190565b600060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b049190810190611381565b975097505096509650965096509650604051806101000160405280881515815260200187815260200186815260200185151581526020018460016002811115610b4f57610b4f610ee1565b60038110610b5f57610b5f611323565b60200201516001600160a01b0316815260200184600280811115610b8557610b85610ee1565b60038110610b9557610b95611323565b60200201516001600160a01b03168152602001836001600160a01b03168152602001828152508a60018a8c60200151610bce919061134f565b610bd8919061134f565b81518110610be857610be8611323565b6020026020010181905250505050505050508080610c059061146d565b915050610a71565b505092915050565b6040805180820190915260008082526020820152604051634aac84e560e01b81526004810183905260009081906001600160a01b03861690634aac84e590602401606060405180830381865afa158015610c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c979190611486565b50915091506040518060400160405280836003811115610cb957610cb9610ee1565b815260200191909152949350505050565b604080516101608101825260006101208201818152610140830182905282526020820181905291810182905260608101829052608081019190915260a08101610d11610d2c565b81526020016000815260006020820152606060409091015290565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b0381168114610d5f57600080fd5b50565b600060208284031215610d7457600080fd5b8135610d7f81610d4a565b9392505050565b6001600160a01b03169052565b60005b83811015610dae578181015183820152602001610d96565b50506000910152565b60008151808452610dcf816020860160208601610d93565b601f01601f19169290920160200192915050565b60208152610df5602082018351610d86565b60006020830151610e096040840182610d86565b5060408301516101a0806060850152610e266101c0850183610db7565b91506060850151610e3a6080860182610d86565b50608085015160a085015260a085015160c085015260c085015160e085015260e0850151610100818187015280870151915050610120818187015280870151915050610140610e8b81870183610d86565b86015161016086810191909152860151610180808701919091529095015193019290925250919050565b60008060408385031215610ec857600080fd5b8235610ed381610d4a565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60048110610f0757610f07610ee1565b9052565b60038110610f0757610f07610ee1565b602081528151602082015260006020830151610f3a6040840182610ef7565b5060408301518015156060840152506060830151801515608084015250608083015160a083015260a0830151610f7360c0840182610f0b565b5060c0830151610f8660e0840182610d86565b5060e0830151610100610f9b81850183610d86565b8401519050610120610faf84820183610d86565b808501519150506101806101408181860152610fcf6101a0860184610db7565b9086015161016086810191909152909501519301929092525090919050565b610ff9828251610ef7565b602090810151910152565b8060005b60038110156110305781516001600160a01b0316845260209384019390910190600101611008565b50505050565b60208152611048602082018351610fee565b6000602083015161105d606084018215159052565b5060408301516080830152606083015160a0830152608083015161108560c084018215159052565b5060a083015161109860e0840182611004565b5060c08301516110ac610140840182610f0b565b5060e08301516110c0610160840182610d86565b50610100830151610180838101526110dc6101a0840182610db7565b949350505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156111ac57603f198984030185528151610100815115158552888201518986015287820151888601526060808301511515818701525060808083015161115682880182610d86565b505060a08083015161116a82880182610d86565b505060c08083015161117e82880182610d86565b505060e09182015191850181905261119885820183610db7565b96890196945050509086019060010161110b565b509098975050505050505050565b604081016111c88284610fee565b92915050565b6000602082840312156111e057600080fd5b8151610d7f81610d4a565b80516111f681610d4a565b919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611234576112346111fb565b60405290565b600082601f83011261124b57600080fd5b815167ffffffffffffffff80821115611266576112666111fb565b604051601f8301601f19908116603f0116810190828211818310171561128e5761128e6111fb565b816040528381528660208588010111156112a757600080fd5b6112b8846020830160208901610d93565b9695505050505050565b6000602082840312156112d457600080fd5b815167ffffffffffffffff8111156112eb57600080fd5b6110dc8482850161123a565b60006020828403121561130957600080fd5b5051919050565b602081526000610d7f6020830184610db7565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156111c8576111c8611339565b805180151581146111f657600080fd5b8051600381106111f657600080fd5b600080600080600080600080610140898b03121561139e57600080fd5b6113a789611362565b97506020808a0151975060408a015196506113c460608b01611362565b95508a609f8b01126113d557600080fd5b6113dd611211565b8060e08c018d8111156113ef57600080fd5b60808d015b8181101561141457805161140781610d4a565b84529284019284016113f4565b5081975061142181611372565b9650505050506114346101008a016111eb565b915061012089015167ffffffffffffffff81111561145157600080fd5b61145d8b828c0161123a565b9150509295985092959890939650565b60006001820161147f5761147f611339565b5060010190565b60008060006060848603121561149b57600080fd5b8351600481106114aa57600080fd5b60208501516040909501519096949550939250505056fea2646970667358221220635a6d404bfaa67f09a07e5e6cd2fd26888b1cb335a56f7d56e5c98e1d78ee0b64736f6c63430008120033", + "numDeployments": 2, + "solcInputHash": "43d22c659b0bfc53d1499e270ad9a93b", + "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract CurateV2\",\"name\":\"_curate\",\"type\":\"address\"}],\"name\":\"fetchArbitrable\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"governor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"relayerContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"submissionBaseDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removalBaseDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"submissionChallengeBaseDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removalChallengeBaseDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"challengePeriodDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"templateRegistry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"templateIdRegistration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"templateIdRemoval\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"arbitrationCost\",\"type\":\"uint256\"}],\"internalType\":\"struct CurateView.ArbitrableData\",\"name\":\"result\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CurateV2\",\"name\":\"_curate\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"getItem\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"ID\",\"type\":\"bytes32\"},{\"internalType\":\"enum CurateV2.Status\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"disputed\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"resolved\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"},{\"internalType\":\"enum CurateV2.Party\",\"name\":\"ruling\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"submissionTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRequests\",\"type\":\"uint256\"}],\"internalType\":\"struct CurateView.QueryResult\",\"name\":\"result\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CurateV2\",\"name\":\"_curate\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"getItemData\",\"outputs\":[{\"components\":[{\"internalType\":\"enum CurateV2.Status\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRequests\",\"type\":\"uint256\"}],\"internalType\":\"struct CurateView.ItemData\",\"name\":\"item\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CurateV2\",\"name\":\"_curate\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"getItemRequests\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disputed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"submissionTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"resolved\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"}],\"internalType\":\"struct CurateView.ItemRequest[]\",\"name\":\"requests\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CurateV2\",\"name\":\"_curate\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_itemID\",\"type\":\"bytes32\"}],\"name\":\"getLatestRequestData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"enum CurateV2.Status\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"numberOfRequests\",\"type\":\"uint256\"}],\"internalType\":\"struct CurateView.ItemData\",\"name\":\"item\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"disputed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"disputeID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"submissionTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"resolved\",\"type\":\"bool\"},{\"internalType\":\"address payable[3]\",\"name\":\"parties\",\"type\":\"address[3]\"},{\"internalType\":\"enum CurateV2.Party\",\"name\":\"ruling\",\"type\":\"uint8\"},{\"internalType\":\"contract IArbitratorV2\",\"name\":\"arbitrator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"arbitratorExtraData\",\"type\":\"bytes\"}],\"internalType\":\"struct CurateView.RequestData\",\"name\":\"request\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"fetchArbitrable(address)\":{\"details\":\"Fetch Curate storage in a single call.\",\"params\":{\"_curate\":\"The address of the Curate contract to query.\"},\"returns\":{\"result\":\"The latest storage data.\"}},\"getItem(address,bytes32)\":{\"details\":\"Fetch the latest data on an item in a single call.\",\"params\":{\"_curate\":\"The address of the Curate contract to query.\",\"_itemID\":\"The ID of the item to query.\"},\"returns\":{\"result\":\"The item data.\"}},\"getItemData(address,bytes32)\":{\"details\":\"Fetch data of the an item and return a struct.\",\"params\":{\"_curate\":\"The address of the Curate contract to query.\",\"_itemID\":\"The ID of the item to query.\"},\"returns\":{\"item\":\"The item data.\"}},\"getItemRequests(address,bytes32)\":{\"details\":\"Fetch all requests for an item.\",\"params\":{\"_curate\":\"The address of the Curate contract to query.\",\"_itemID\":\"The ID of the item to query.\"},\"returns\":{\"requests\":\"The items requests.\"}},\"getLatestRequestData(address,bytes32)\":{\"details\":\"Fetch the latest request of an item.\",\"params\":{\"_curate\":\"The address of the Curate contract to query.\",\"_itemID\":\"The ID of the item to query.\"},\"returns\":{\"request\":\"The request data.\"}}},\"title\":\"CurateView A view contract to fetch, batch, parse and return Curate contract data efficiently. This contract includes functions that can halt execution due to out-of-gas exceptions. Because of this it should never be relied upon by other contracts.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/CurateView.sol\":\"CurateView\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@kleros/kleros-v2-contracts/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\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.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 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 /**\\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\",\"keccak256\":\"0xbbc8ac883ac3c0078ce5ad3e288fbb3ffcc8a30c3a98c0fda0114d64fc44fca2\",\"license\":\"MIT\"},\"src/CurateV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @mtsalenc, @hbarcelos]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport {IArbitrableV2, IArbitratorV2} from \\\"@kleros/kleros-v2-contracts/arbitration/interfaces/IArbitrableV2.sol\\\";\\nimport {EvidenceModule} from \\\"@kleros/kleros-v2-contracts/arbitration/evidence/EvidenceModule.sol\\\";\\nimport \\\"@kleros/kleros-v2-contracts/arbitration/interfaces/IDisputeTemplateRegistry.sol\\\";\\n\\n/// @title Curate\\n/// Curated registry contract compatible with V2. The V1 version is here https://github.com/kleros/tcr/blob/master/contracts/LightGeneralizedTCR.sol\\ncontract CurateV2 is IArbitrableV2 {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n\\n enum Status {\\n Absent, // The item is not in the registry.\\n Registered, // The item is in the registry.\\n RegistrationRequested, // The item has a request to be added to the registry.\\n ClearingRequested // The item has a request to be removed from the registry.\\n }\\n\\n enum Party {\\n None, // Party per default when there is no challenger or requester. Also used for unconclusive ruling.\\n Requester, // Party that made the request to change a status.\\n Challenger // Party that challenges the request to change a status.\\n }\\n\\n enum RequestType {\\n Registration, // Identifies a request to register an item to the registry.\\n Clearing // Identifies a request to remove an item from the registry.\\n }\\n\\n enum DisputeStatus {\\n None, // No dispute was created.\\n AwaitingRuling, // Dispute was created, but the final ruling was not given yet.\\n Resolved // Dispute was ruled.\\n }\\n\\n struct Item {\\n Status status; // The current status of the item.\\n uint256 sumDeposit; // The total deposit made by the requester and the challenger (if any).\\n uint256 requestCount; // The number of requests.\\n mapping(uint256 => Request) requests; // List of status change requests made for the item in the form requests[requestID].\\n }\\n\\n struct Request {\\n RequestType requestType;\\n uint64 submissionTime; // Time when the request was made. Used to track when the challenge period ends.\\n uint24 arbitrationParamsIndex; // The index for the arbitration params for the request.\\n address payable requester; // Address of the requester.\\n // Pack the requester together with the other parameters, as they are written in the same request.\\n address payable challenger; // Address of the challenger, if any.\\n // TODO: store templateRegistry in case it's changed?\\n }\\n\\n struct DisputeData {\\n uint256 disputeID; // The ID of the dispute on the arbitrator.\\n DisputeStatus status; // The current status of the dispute.\\n Party ruling; // The ruling given to a dispute.\\n }\\n\\n struct ArbitrationParams {\\n IArbitratorV2 arbitrator; // The arbitrator trusted to solve disputes for this request.\\n bytes arbitratorExtraData; // The extra data for the trusted arbitrator of this request.\\n EvidenceModule evidenceModule; // The evidence module for the arbitrator.\\n }\\n\\n struct TemplateRegistryParams {\\n address templateRegistry; // Dispute Template registry address\\n string[2] registrationTemplateParameters; // Template and data mappings json for registration requests.\\n string[2] removalTemplateParameters; // Template and data mappings json for removal requests.\\n }\\n\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n bool private initialized;\\n uint256 public constant RULING_OPTIONS = 2; // The amount of non 0 choices the arbitrator can give.\\n address public relayerContract; // The contract that is used to add or remove items directly to speed up the interchain communication.\\n address public governor; // The address that can make changes to the parameters of the contract.\\n IDisputeTemplateRegistry public templateRegistry; // The dispute template registry.\\n uint256 public templateIdRegistration; // The current dispute template identifier for registration requests.\\n uint256 public templateIdRemoval; // The current dispute template identifier for removal requests.\\n uint256 public submissionBaseDeposit; // The base deposit to submit an item.\\n uint256 public removalBaseDeposit; // The base deposit to remove an item.\\n uint256 public submissionChallengeBaseDeposit; // The base deposit to challenge a submission.\\n uint256 public removalChallengeBaseDeposit; // The base deposit to challenge a removal request.\\n uint256 public challengePeriodDuration; // The time after which a request becomes executable if not challenged.\\n\\n mapping(bytes32 => Item) public items; // Maps the item ID to its data in the form items[_itemID].\\n mapping(address => mapping(uint256 => bytes32)) public arbitratorDisputeIDToItemID; // Maps a dispute ID to the ID of the item with the disputed request in the form arbitratorDisputeIDToItemID[arbitrator][disputeID].\\n mapping(bytes32 => mapping(uint256 => DisputeData)) public requestsDisputeData; // Maps an item and a request to the data of the dispute related to them. requestsDisputeData[itemID][requestIndex]\\n ArbitrationParams[] public arbitrationParamsChanges;\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier onlyGovernor() {\\n require(msg.sender == governor, \\\"The caller must be the governor.\\\");\\n _;\\n }\\n\\n modifier onlyRelayer() {\\n require(msg.sender == relayerContract, \\\"The caller must be the relay.\\\");\\n _;\\n }\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Emitted when a party makes a request, raises a dispute or when a request is resolved.\\n /// @param _itemID The ID of the affected item.\\n /// @param _updatedDirectly Whether this was emitted in either `addItemDirectly` or `removeItemDirectly`. This is used in the subgraph.\\n event ItemStatusChange(bytes32 indexed _itemID, bool _updatedDirectly);\\n\\n /// @dev Emitted when someone submits an item for the first time.\\n /// @param _itemID The ID of the new item.\\n /// @param _data Stringified JSON Object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json.\\n /// @param _addedDirectly Whether the item was added via `addItemDirectly`.\\n event NewItem(bytes32 indexed _itemID, string _data, bool _addedDirectly);\\n\\n /// @dev Emitted when someone submits a request.\\n /// @param _itemID The ID of the affected item.\\n /// @param _requestID Unique dispute identifier within this contract.\\n event RequestSubmitted(bytes32 indexed _itemID, uint256 _requestID);\\n\\n /// @dev Emitted when the address of the connected Curate contract is set. The Curate is an instance of the Curate contract where each item is the address of a Curate contract related to this one.\\n /// @param _connectedList The address of the connected Curate.\\n event ConnectedListSet(address indexed _connectedList);\\n\\n /// @dev Emitted when the list metadata ipfs uri is updated.\\n /// @param _listMetadata Ipfs uri to list metadata.\\n event ListMetadataSet(string _listMetadata);\\n\\n // ************************************* //\\n // * Initializer * //\\n // ************************************* //\\n\\n /// @dev Initialize the arbitrable curated registry.\\n /// @param _governor The trusted governor of this contract.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence contract for the arbitrator.\\n /// @param _connectedList The address of the Curate contract that stores related Curate addresses. This parameter can be left empty.\\n /// @param _templateRegistryParams The dispute template registry.\\n /// - templateRegistry : The dispute template registry.\\n /// - registrationTemplateParameters : Template and data mappings json for registration requests.\\n /// - removalTemplateParameters : Template and data mappings json for removal requests.\\n /// @param _baseDeposits The base deposits for requests/challenges as follows:\\n /// - The base deposit to submit an item.\\n /// - The base deposit to remove an item.\\n /// - The base deposit to challenge a submission.\\n /// - The base deposit to challenge a removal request.\\n /// @param _challengePeriodDuration The time in seconds parties have to challenge a request.\\n /// @param _relayerContract The address of the relayer contract to add/remove items directly.\\n /// @param _listMetadata Stringified JSON object containing list metadata (title, description, isListOfLists, etc.). Example at :- https://cloudflare-ipfs.com/ipfs/QmekLsbXtQfm2jJjdeC5TF1cJcr5qxarZ9bhKmCS9s3ebK/list-metadata.json\\n function initialize(\\n address _governor,\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule,\\n address _connectedList,\\n TemplateRegistryParams calldata _templateRegistryParams,\\n uint256[4] calldata _baseDeposits,\\n uint256 _challengePeriodDuration,\\n address _relayerContract,\\n string calldata _listMetadata\\n ) external {\\n require(!initialized, \\\"Already initialized.\\\");\\n initialized = true;\\n\\n governor = _governor;\\n submissionBaseDeposit = _baseDeposits[0];\\n removalBaseDeposit = _baseDeposits[1];\\n submissionChallengeBaseDeposit = _baseDeposits[2];\\n removalChallengeBaseDeposit = _baseDeposits[3];\\n challengePeriodDuration = _challengePeriodDuration;\\n relayerContract = _relayerContract;\\n\\n templateRegistry = IDisputeTemplateRegistry(_templateRegistryParams.templateRegistry);\\n templateIdRegistration = templateRegistry.setDisputeTemplate(\\n \\\"Registration\\\",\\n _templateRegistryParams.registrationTemplateParameters[0],\\n _templateRegistryParams.registrationTemplateParameters[1]\\n );\\n templateIdRemoval = templateRegistry.setDisputeTemplate(\\n \\\"Removal\\\",\\n _templateRegistryParams.removalTemplateParameters[0],\\n _templateRegistryParams.removalTemplateParameters[1]\\n );\\n\\n arbitrationParamsChanges.push(\\n ArbitrationParams({\\n arbitrator: _arbitrator,\\n arbitratorExtraData: _arbitratorExtraData,\\n evidenceModule: _evidenceModule\\n })\\n );\\n\\n if (_connectedList != address(0)) {\\n emit ConnectedListSet(_connectedList);\\n }\\n\\n emit ListMetadataSet(_listMetadata);\\n }\\n\\n // ************************************* //\\n // * Governance * //\\n // ************************************* //\\n\\n /// @dev Change the duration of the challenge period.\\n /// @param _challengePeriodDuration The new duration of the challenge period.\\n function changeChallengePeriodDuration(uint256 _challengePeriodDuration) external onlyGovernor {\\n challengePeriodDuration = _challengePeriodDuration;\\n }\\n\\n /// @dev Change the base amount required as a deposit to submit an item.\\n /// @param _submissionBaseDeposit The new base amount of wei required to submit an item.\\n function changeSubmissionBaseDeposit(uint256 _submissionBaseDeposit) external onlyGovernor {\\n submissionBaseDeposit = _submissionBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to remove an item.\\n /// @param _removalBaseDeposit The new base amount of wei required to remove an item.\\n function changeRemovalBaseDeposit(uint256 _removalBaseDeposit) external onlyGovernor {\\n removalBaseDeposit = _removalBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to challenge a submission.\\n /// @param _submissionChallengeBaseDeposit The new base amount of wei required to challenge a submission.\\n function changeSubmissionChallengeBaseDeposit(uint256 _submissionChallengeBaseDeposit) external onlyGovernor {\\n submissionChallengeBaseDeposit = _submissionChallengeBaseDeposit;\\n }\\n\\n /// @dev Change the base amount required as a deposit to challenge a removal request.\\n /// @param _removalChallengeBaseDeposit The new base amount of wei required to challenge a removal request.\\n function changeRemovalChallengeBaseDeposit(uint256 _removalChallengeBaseDeposit) external onlyGovernor {\\n removalChallengeBaseDeposit = _removalChallengeBaseDeposit;\\n }\\n\\n /// @dev Change the governor of the curated registry.\\n /// @param _governor The address of the new governor.\\n function changeGovernor(address _governor) external onlyGovernor {\\n governor = _governor;\\n }\\n\\n /// @dev Change the address of connectedList, the Curate instance that stores addresses of Curate contracts related to this one.\\n /// @param _connectedList The address of the connectedList contract to use.\\n function changeConnectedList(address _connectedList) external onlyGovernor {\\n emit ConnectedListSet(_connectedList);\\n }\\n\\n /// @dev Update list metadata ipfs uri.\\n /// @param _listMetadata Ipfs uri to list metadata\\n function changeListMetadata(string calldata _listMetadata) external onlyGovernor {\\n emit ListMetadataSet(_listMetadata);\\n }\\n\\n /// @dev Change the address of the relay contract.\\n /// @param _relayerContract The new address of the relay contract.\\n function changeRelayerContract(address _relayerContract) external onlyGovernor {\\n relayerContract = _relayerContract;\\n }\\n\\n /// @dev Changes the address of Template Registry contract.\\n /// @param _templateRegistry The new template registry.\\n function changeTemplateRegistry(IDisputeTemplateRegistry _templateRegistry) external onlyGovernor {\\n templateRegistry = _templateRegistry;\\n // TODO: automatically set templates upon changing the registry.\\n }\\n\\n /// @dev Changes the dispute template for registration requests.\\n /// @param _templateData The new template data for registration requests.\\n /// @param _templateDataMappings The new data mappings json for registration requests.\\n function changeRegistrationDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyGovernor {\\n templateIdRegistration = templateRegistry.setDisputeTemplate(\\n \\\"Registration\\\",\\n _templateData,\\n _templateDataMappings\\n );\\n }\\n\\n /// @dev Changes the dispute template for removal requests.\\n /// @param _templateData The new template data for removal requests.\\n /// @param _templateDataMappings The new data mappings json for removal requests.\\n function changeRemovalDisputeTemplate(\\n string memory _templateData,\\n string memory _templateDataMappings\\n ) external onlyGovernor {\\n templateIdRemoval = templateRegistry.setDisputeTemplate(\\\"Removal\\\", _templateData, _templateDataMappings);\\n }\\n\\n /// @notice Changes the params related to arbitration.\\n /// @param _arbitrator Arbitrator to resolve potential disputes. The arbitrator is trusted to support appeal periods and not reenter.\\n /// @param _arbitratorExtraData Extra data for the trusted arbitrator contract.\\n /// @param _evidenceModule The evidence module for the arbitrator.\\n function changeArbitrationParams(\\n IArbitratorV2 _arbitrator,\\n bytes calldata _arbitratorExtraData,\\n EvidenceModule _evidenceModule\\n ) external onlyGovernor {\\n arbitrationParamsChanges.push(\\n ArbitrationParams({\\n arbitrator: _arbitrator,\\n arbitratorExtraData: _arbitratorExtraData,\\n evidenceModule: _evidenceModule\\n })\\n );\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Directly add an item to the list bypassing request-challenge. Can only be used by the relayer contract.\\n /// @param _item Stringified JSON Object containing Item data\\n function addItemDirectly(string calldata _item) external onlyRelayer {\\n bytes32 itemID = keccak256(abi.encodePacked(_item));\\n Item storage item = items[itemID];\\n require(item.status == Status.Absent, \\\"Item must be absent to be added.\\\");\\n\\n // Note that if the item is added directly once, the next time it is added it will emit this event again.\\n if (item.requestCount == 0) {\\n emit NewItem(itemID, _item, true);\\n }\\n\\n item.status = Status.Registered;\\n\\n emit ItemStatusChange(itemID, true);\\n }\\n\\n /// @dev Directly remove an item from the list bypassing request-challenge. Can only be used by the relayer contract.\\n /// @param _itemID The ID of the item to remove. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\\n function removeItemDirectly(bytes32 _itemID) external onlyRelayer {\\n Item storage item = items[_itemID];\\n require(item.status == Status.Registered, \\\"Item must be registered to be removed.\\\");\\n\\n item.status = Status.Absent;\\n\\n emit ItemStatusChange(_itemID, true);\\n }\\n\\n /// @dev Submit a request to register an item. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _item Stringified JSON object containing item data. Example at :- https://cloudflare-ipfs.com/ipfs/QmTypFX9416z5V87Fsnf6A89rrskh2X8BSVdaKhwzXNiDb/item.json\\n function addItem(string calldata _item) external payable {\\n bytes32 itemID = keccak256(abi.encodePacked(_item));\\n Item storage item = items[itemID];\\n\\n require(item.status == Status.Absent, \\\"Item must be absent to be added.\\\");\\n\\n // Note that if the item was added previously using `addItemDirectly`, the event will be emitted again here.\\n if (item.requestCount == 0) {\\n emit NewItem(itemID, _item, false);\\n }\\n\\n Request storage request = item.requests[item.requestCount++];\\n uint256 arbitrationParamsIndex = arbitrationParamsChanges.length - 1;\\n IArbitratorV2 arbitrator = arbitrationParamsChanges[arbitrationParamsIndex].arbitrator;\\n bytes storage arbitratorExtraData = arbitrationParamsChanges[arbitrationParamsIndex].arbitratorExtraData;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitratorExtraData);\\n uint256 totalCost = arbitrationCost + submissionBaseDeposit;\\n require(msg.value >= totalCost, \\\"You must fully fund the request.\\\");\\n\\n item.sumDeposit = totalCost;\\n item.status = Status.RegistrationRequested;\\n\\n request.requestType = RequestType.Registration;\\n request.submissionTime = uint64(block.timestamp);\\n request.arbitrationParamsIndex = uint24(arbitrationParamsIndex);\\n request.requester = payable(msg.sender);\\n\\n emit RequestSubmitted(itemID, getRequestID(itemID, item.requestCount - 1));\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Submit a request to remove an item from the list. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _itemID The ID of the item to remove.\\n /// @param _evidence Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\\n function removeItem(bytes32 _itemID, string calldata _evidence) external payable {\\n Item storage item = items[_itemID];\\n\\n require(item.status == Status.Registered, \\\"Item must be registered to be removed.\\\");\\n\\n Request storage request = item.requests[item.requestCount++];\\n uint256 arbitrationParamsIndex = arbitrationParamsChanges.length - 1;\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[arbitrationParamsIndex];\\n IArbitratorV2 arbitrator = arbitrationParams.arbitrator;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitrationParams.arbitratorExtraData);\\n uint256 totalCost = arbitrationCost + removalBaseDeposit;\\n require(msg.value >= totalCost, \\\"You must fully fund the request.\\\");\\n\\n item.sumDeposit = totalCost;\\n item.status = Status.ClearingRequested;\\n\\n request.submissionTime = uint64(block.timestamp);\\n request.arbitrationParamsIndex = uint24(arbitrationParamsIndex);\\n request.requester = payable(msg.sender);\\n request.requestType = RequestType.Clearing;\\n\\n uint256 requestID = getRequestID(_itemID, item.requestCount - 1);\\n emit RequestSubmitted(_itemID, requestID);\\n\\n // Emit evidence if it was provided.\\n if (bytes(_evidence).length > 0) {\\n arbitrationParams.evidenceModule.submitEvidence(requestID, _evidence); // TODO: add a msg.sender parameter to submitEvidence.\\n }\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Challenges the request of the item. Accepts enough ETH to cover the deposit, reimburses the rest.\\n /// @param _itemID The ID of the item which request to challenge.\\n /// @param _evidence Stringified evidence object, example: '{\\\"name\\\" : \\\"Justification\\\", \\\"description\\\" : \\\"Description\\\", \\\"fileURI\\\" : \\\"/ipfs/QmWQV5ZFFhEJiW8Lm7ay2zLxC2XS4wx1b2W7FfdrLMyQQc\\\"}'.\\n function challengeRequest(bytes32 _itemID, string calldata _evidence) external payable {\\n Item storage item = items[_itemID];\\n require(item.status > Status.Registered, \\\"The item must have a pending request.\\\");\\n\\n uint256 lastRequestIndex = item.requestCount - 1;\\n Request storage request = item.requests[lastRequestIndex];\\n require(\\n block.timestamp - request.submissionTime <= challengePeriodDuration,\\n \\\"Challenges must occur during the challenge period.\\\"\\n );\\n\\n DisputeData storage disputeData = requestsDisputeData[_itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.None, \\\"The request should not have already been disputed.\\\");\\n\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n IArbitratorV2 arbitrator = arbitrationParams.arbitrator;\\n\\n uint256 arbitrationCost = arbitrator.arbitrationCost(arbitrationParams.arbitratorExtraData);\\n uint256 totalCost;\\n {\\n uint256 challengerBaseDeposit = item.status == Status.RegistrationRequested\\n ? submissionChallengeBaseDeposit\\n : removalChallengeBaseDeposit;\\n totalCost = arbitrationCost + challengerBaseDeposit;\\n }\\n require(msg.value >= totalCost, \\\"You must fully fund the challenge.\\\");\\n\\n item.sumDeposit = item.sumDeposit + totalCost - arbitrationCost;\\n\\n request.challenger = payable(msg.sender);\\n\\n // Raise a dispute.\\n disputeData.disputeID = arbitrator.createDispute{value: arbitrationCost}(\\n RULING_OPTIONS,\\n arbitrationParams.arbitratorExtraData\\n );\\n disputeData.status = DisputeStatus.AwaitingRuling;\\n\\n arbitratorDisputeIDToItemID[address(arbitrator)][disputeData.disputeID] = _itemID;\\n\\n uint256 requestID = getRequestID(_itemID, lastRequestIndex);\\n uint256 templateId = request.requestType == RequestType.Registration\\n ? templateIdRegistration\\n : templateIdRemoval;\\n emit DisputeRequest(arbitrator, disputeData.disputeID, requestID, templateId, \\\"\\\");\\n\\n // Emit evidence if it was provided.\\n if (bytes(_evidence).length > 0) {\\n arbitrationParams.evidenceModule.submitEvidence(requestID, _evidence); // TODO: add a msg.sender parameter to submitEvidence.\\n }\\n\\n if (msg.value > totalCost) {\\n payable(msg.sender).send(msg.value - totalCost);\\n }\\n }\\n\\n /// @dev Executes an unchallenged request if the challenge period has passed.\\n /// @param _itemID The ID of the item to execute.\\n function executeRequest(bytes32 _itemID) external {\\n Item storage item = items[_itemID];\\n uint256 lastRequestIndex = items[_itemID].requestCount - 1;\\n\\n Request storage request = item.requests[lastRequestIndex];\\n require(\\n block.timestamp - request.submissionTime > challengePeriodDuration,\\n \\\"Time to challenge the request must pass.\\\"\\n );\\n\\n DisputeData storage disputeData = requestsDisputeData[_itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.None, \\\"The request should not be disputed.\\\");\\n\\n if (item.status == Status.RegistrationRequested) {\\n item.status = Status.Registered;\\n } else if (item.status == Status.ClearingRequested) {\\n item.status = Status.Absent;\\n } else {\\n revert(\\\"There must be a request.\\\");\\n }\\n\\n emit ItemStatusChange(_itemID, false);\\n\\n uint256 sumDeposit = item.sumDeposit;\\n item.sumDeposit = 0;\\n\\n if (sumDeposit > 0) {\\n // reimburse the requester\\n request.requester.send(sumDeposit);\\n }\\n }\\n\\n /// @dev Give a ruling for a dispute. Can only be called by the arbitrator. TRUSTED.\\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 \\\"Refused to arbitrate\\\".\\n function rule(uint256 _disputeID, uint256 _ruling) external {\\n require(_ruling <= RULING_OPTIONS, \\\"Invalid ruling option\\\");\\n\\n bytes32 itemID = arbitratorDisputeIDToItemID[msg.sender][_disputeID];\\n Item storage item = items[itemID];\\n uint256 lastRequestIndex = items[itemID].requestCount - 1;\\n Request storage request = item.requests[lastRequestIndex];\\n\\n DisputeData storage disputeData = requestsDisputeData[itemID][lastRequestIndex];\\n require(disputeData.status == DisputeStatus.AwaitingRuling, \\\"The request must not be resolved.\\\");\\n\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n require(address(arbitrationParams.arbitrator) == msg.sender, \\\"Only the arbitrator can give a ruling\\\");\\n\\n emit Ruling(IArbitratorV2(msg.sender), _disputeID, _ruling);\\n\\n Party winner = Party(_ruling);\\n\\n disputeData.status = DisputeStatus.Resolved;\\n disputeData.ruling = winner;\\n\\n uint256 sumDeposit = item.sumDeposit;\\n item.sumDeposit = 0;\\n\\n if (winner == Party.None) {\\n // If the arbitrator refuse to rule, then the item status should be the same it was before the request.\\n // Regarding item.status this is equivalent to the challenger winning the dispute.\\n item.status = item.status == Status.RegistrationRequested ? Status.Absent : Status.Registered;\\n\\n // Since nobody has won, then we reimburse both parties equally.\\n // If item.sumDeposit is odd, 1 wei will remain in the contract balance.\\n uint256 halfSumDeposit = sumDeposit / 2;\\n\\n request.requester.send(halfSumDeposit);\\n request.challenger.send(halfSumDeposit);\\n } else if (winner == Party.Requester) {\\n item.status = item.status == Status.RegistrationRequested ? Status.Registered : Status.Absent;\\n\\n request.requester.send(sumDeposit);\\n } else {\\n item.status = item.status == Status.RegistrationRequested ? Status.Absent : Status.Registered;\\n\\n request.challenger.send(sumDeposit);\\n }\\n\\n emit ItemStatusChange(itemID, false);\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @notice Gets the local dispute ID for a given item and request.\\n /// @param _itemID The ID of the item.\\n /// @param _requestID The ID of the request.\\n /// @return Local dispute ID.\\n function getRequestID(bytes32 _itemID, uint256 _requestID) public pure returns (uint256) {\\n return uint256(keccak256(abi.encodePacked(_itemID, _requestID)));\\n }\\n\\n /// @notice Gets the arbitrator for new requests.\\n /// @dev Gets the latest value in arbitrationParamsChanges.\\n /// @return The arbitrator address.\\n function getArbitrator() external view returns (IArbitratorV2) {\\n return arbitrationParamsChanges[arbitrationParamsChanges.length - 1].arbitrator;\\n }\\n\\n /// @notice Gets the arbitratorExtraData for new requests.\\n /// @dev Gets the latest value in arbitrationParamsChanges.\\n /// @return The arbitrator extra data.\\n function getArbitratorExtraData() external view returns (bytes memory) {\\n return arbitrationParamsChanges[arbitrationParamsChanges.length - 1].arbitratorExtraData;\\n }\\n\\n /// @dev Returns item's information. Includes the total number of requests for the item\\n /// @param _itemID The ID of the queried item.\\n /// @return status The current status of the item.\\n /// @return numberOfRequests Total number of requests for the item.\\n /// @return sumDeposit The total deposit made by the requester and the challenger (if any)\\n function getItemInfo(\\n bytes32 _itemID\\n ) external view returns (Status status, uint256 numberOfRequests, uint256 sumDeposit) {\\n Item storage item = items[_itemID];\\n return (item.status, item.requestCount, item.sumDeposit);\\n }\\n\\n /// @dev Gets information on a request made for the item.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return disputed True if a dispute was raised.\\n /// @return disputeID ID of the dispute, if any.\\n /// @return submissionTime Time when the request was made.\\n /// @return resolved True if the request was executed and/or any raised disputes were resolved.\\n /// @return parties Address of requester and challenger, if any.\\n /// @return ruling The final ruling given, if any.\\n /// @return requestArbitrator The arbitrator trusted to solve disputes for this request.\\n /// @return requestArbitratorExtraData The extra data for the trusted arbitrator of this request.\\n function getRequestInfo(\\n bytes32 _itemID,\\n uint256 _requestID\\n )\\n external\\n view\\n returns (\\n bool disputed,\\n uint256 disputeID,\\n uint256 submissionTime,\\n bool resolved,\\n address payable[3] memory parties,\\n Party ruling,\\n IArbitratorV2 requestArbitrator,\\n bytes memory requestArbitratorExtraData\\n )\\n {\\n Item storage item = items[_itemID];\\n require(item.requestCount > _requestID, \\\"Request does not exist.\\\");\\n\\n Request storage request = items[_itemID].requests[_requestID];\\n\\n submissionTime = request.submissionTime;\\n parties[uint256(Party.Requester)] = request.requester;\\n parties[uint256(Party.Challenger)] = request.challenger;\\n\\n (disputed, disputeID, ruling) = getRequestDisputeData(_itemID, _requestID);\\n\\n (requestArbitrator, requestArbitratorExtraData) = getRequestArbitrationParams(_itemID, _requestID);\\n resolved = getRequestResolvedStatus(_itemID, _requestID);\\n }\\n\\n /// @dev Gets the dispute data relative to a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return disputed True if a dispute was raised.\\n /// @return disputeID ID of the dispute, if any.\\n /// @return ruling The final ruling given, if any.\\n function getRequestDisputeData(\\n bytes32 _itemID,\\n uint256 _requestID\\n ) internal view returns (bool disputed, uint256 disputeID, Party ruling) {\\n DisputeData storage disputeData = requestsDisputeData[_itemID][_requestID];\\n\\n return (disputeData.status >= DisputeStatus.AwaitingRuling, disputeData.disputeID, disputeData.ruling);\\n }\\n\\n /// @dev Gets the arbitration params relative to a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return arbitrator The arbitrator trusted to solve disputes for this request.\\n /// @return arbitratorExtraData The extra data for the trusted arbitrator of this request.\\n function getRequestArbitrationParams(\\n bytes32 _itemID,\\n uint256 _requestID\\n ) internal view returns (IArbitratorV2 arbitrator, bytes memory arbitratorExtraData) {\\n Request storage request = items[_itemID].requests[_requestID];\\n ArbitrationParams storage arbitrationParams = arbitrationParamsChanges[request.arbitrationParamsIndex];\\n\\n return (arbitrationParams.arbitrator, arbitrationParams.arbitratorExtraData);\\n }\\n\\n /// @dev Gets the resovled status of a given item request.\\n /// @param _itemID The ID of the queried item.\\n /// @param _requestID The request to be queried.\\n /// @return resolved True if the request was executed and/or any raised disputes were resolved.\\n function getRequestResolvedStatus(bytes32 _itemID, uint256 _requestID) internal view returns (bool resolved) {\\n Item storage item = items[_itemID];\\n\\n if (item.requestCount == 0) {\\n return false;\\n }\\n\\n if (_requestID < item.requestCount - 1) {\\n // It was resolved because it is not the last request.\\n return true;\\n }\\n\\n return item.sumDeposit == 0;\\n }\\n}\\n\",\"keccak256\":\"0x211ef2de660f69b273898c15fb693cee468fc134354c07545aea6eec2560e709\",\"license\":\"MIT\"},\"src/CurateView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@unknownunknown1, @mtsalenc]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport {CurateV2, IArbitratorV2} from \\\"./CurateV2.sol\\\";\\n\\n/// @title CurateView\\n/// A view contract to fetch, batch, parse and return Curate contract data efficiently.\\n/// This contract includes functions that can halt execution due to out-of-gas exceptions. Because of this it should never be relied upon by other contracts.\\ncontract CurateView {\\n // ************************************* //\\n // * Enums / Structs * //\\n // ************************************* //\\n struct QueryResult {\\n bytes32 ID;\\n CurateV2.Status status;\\n bool disputed;\\n bool resolved;\\n uint256 disputeID;\\n CurateV2.Party ruling;\\n address requester;\\n address challenger;\\n address arbitrator;\\n bytes arbitratorExtraData;\\n uint256 submissionTime;\\n uint256 numberOfRequests;\\n }\\n\\n struct ArbitrableData {\\n address governor;\\n address arbitrator;\\n bytes arbitratorExtraData;\\n address relayerContract;\\n uint256 submissionBaseDeposit;\\n uint256 removalBaseDeposit;\\n uint256 submissionChallengeBaseDeposit;\\n uint256 removalChallengeBaseDeposit;\\n uint256 challengePeriodDuration;\\n address templateRegistry;\\n uint256 templateIdRegistration;\\n uint256 templateIdRemoval;\\n uint256 arbitrationCost;\\n }\\n\\n // Workaround stack too deep limit\\n struct ItemData {\\n CurateV2.Status status;\\n uint256 numberOfRequests;\\n }\\n\\n // Workaround stack too deep limit\\n struct RequestData {\\n ItemData item;\\n bool disputed;\\n uint256 disputeID;\\n uint256 submissionTime;\\n bool resolved;\\n address payable[3] parties;\\n CurateV2.Party ruling;\\n IArbitratorV2 arbitrator;\\n bytes arbitratorExtraData;\\n }\\n\\n // ************************************* //\\n // * Public Views * //\\n // ************************************* //\\n\\n /// @dev Fetch Curate storage in a single call.\\n /// @param _curate The address of the Curate contract to query.\\n /// @return result The latest storage data.\\n function fetchArbitrable(CurateV2 _curate) external view returns (ArbitrableData memory result) {\\n result.governor = _curate.governor();\\n result.arbitrator = address(_curate.getArbitrator());\\n result.arbitratorExtraData = _curate.getArbitratorExtraData();\\n result.relayerContract = _curate.relayerContract();\\n result.submissionBaseDeposit = _curate.submissionBaseDeposit();\\n result.removalBaseDeposit = _curate.removalBaseDeposit();\\n result.submissionChallengeBaseDeposit = _curate.submissionChallengeBaseDeposit();\\n result.removalChallengeBaseDeposit = _curate.removalChallengeBaseDeposit();\\n result.challengePeriodDuration = _curate.challengePeriodDuration();\\n result.templateRegistry = address(_curate.templateRegistry());\\n result.templateIdRegistration = _curate.templateIdRegistration();\\n result.templateIdRemoval = _curate.templateIdRemoval();\\n result.arbitrationCost = IArbitratorV2(result.arbitrator).arbitrationCost(result.arbitratorExtraData);\\n }\\n\\n /// @dev Fetch the latest data on an item in a single call.\\n /// @param _curate The address of the Curate contract to query.\\n /// @param _itemID The ID of the item to query.\\n /// @return result The item data.\\n function getItem(CurateV2 _curate, bytes32 _itemID) public view returns (QueryResult memory result) {\\n RequestData memory request = getLatestRequestData(_curate, _itemID);\\n result = QueryResult({\\n ID: _itemID,\\n status: request.item.status,\\n disputed: request.disputed,\\n resolved: request.resolved,\\n disputeID: request.disputeID,\\n ruling: request.ruling,\\n requester: request.parties[uint256(CurateV2.Party.Requester)],\\n challenger: request.parties[uint256(CurateV2.Party.Challenger)],\\n arbitrator: address(request.arbitrator),\\n arbitratorExtraData: request.arbitratorExtraData,\\n submissionTime: request.submissionTime,\\n numberOfRequests: request.item.numberOfRequests\\n });\\n }\\n\\n struct ItemRequest {\\n bool disputed;\\n uint256 disputeID;\\n uint256 submissionTime;\\n bool resolved;\\n address requester;\\n address challenger;\\n address arbitrator;\\n bytes arbitratorExtraData;\\n }\\n\\n /// @dev Fetch all requests for an item.\\n /// @param _curate The address of the Curate contract to query.\\n /// @param _itemID The ID of the item to query.\\n /// @return requests The items requests.\\n function getItemRequests(CurateV2 _curate, bytes32 _itemID) external view returns (ItemRequest[] memory requests) {\\n ItemData memory itemData = getItemData(_curate, _itemID);\\n requests = new ItemRequest[](itemData.numberOfRequests);\\n for (uint256 i = 0; i < itemData.numberOfRequests; i++) {\\n (\\n bool disputed,\\n uint256 disputeID,\\n uint256 submissionTime,\\n bool resolved,\\n address payable[3] memory parties,\\n ,\\n IArbitratorV2 arbitrator,\\n bytes memory arbitratorExtraData\\n ) = _curate.getRequestInfo(_itemID, i);\\n\\n // Sort requests by newest first.\\n requests[itemData.numberOfRequests - i - 1] = ItemRequest({\\n disputed: disputed,\\n disputeID: disputeID,\\n submissionTime: submissionTime,\\n resolved: resolved,\\n requester: parties[uint256(CurateV2.Party.Requester)],\\n challenger: parties[uint256(CurateV2.Party.Challenger)],\\n arbitrator: address(arbitrator),\\n arbitratorExtraData: arbitratorExtraData\\n });\\n }\\n }\\n\\n /// @dev Fetch data of the an item and return a struct.\\n /// @param _curate The address of the Curate contract to query.\\n /// @param _itemID The ID of the item to query.\\n /// @return item The item data.\\n function getItemData(CurateV2 _curate, bytes32 _itemID) public view returns (ItemData memory item) {\\n (CurateV2.Status status, uint256 numberOfRequests, ) = _curate.getItemInfo(_itemID);\\n item = ItemData(status, numberOfRequests);\\n }\\n\\n /// @dev Fetch the latest request of an item.\\n /// @param _curate The address of the Curate contract to query.\\n /// @param _itemID The ID of the item to query.\\n /// @return request The request data.\\n function getLatestRequestData(CurateV2 _curate, bytes32 _itemID) public view returns (RequestData memory request) {\\n ItemData memory item = getItemData(_curate, _itemID);\\n (\\n bool disputed,\\n uint256 disputeID,\\n uint256 submissionTime,\\n bool resolved,\\n address payable[3] memory parties,\\n CurateV2.Party ruling,\\n IArbitratorV2 arbitrator,\\n bytes memory arbitratorExtraData\\n ) = _curate.getRequestInfo(_itemID, item.numberOfRequests - 1);\\n request = RequestData(\\n item,\\n disputed,\\n disputeID,\\n submissionTime,\\n resolved,\\n parties,\\n ruling,\\n arbitrator,\\n arbitratorExtraData\\n );\\n }\\n}\\n\",\"keccak256\":\"0x78dea9ef57f08474d483336c0fc8714334d86e3892fac7ba97e15227ddae7e53\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506114d2806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630f4d1e731461005c5780633f869479146100855780637d1d8cc2146100a557806387ef093a146100c5578063cefded2e146100e5575b600080fd5b61006f61006a366004610d5c565b610105565b60405161007c9190610ddd565b60405180910390f35b610098610093366004610eaf565b61075c565b60405161007c9190610f15565b6100b86100b3366004610eaf565b6108a5565b60405161007c9190611030565b6100d86100d3366004610eaf565b6109cd565b60405161007c91906110de565b6100f86100f3366004610eaf565b610c0f565b60405161007c91906111b6565b610194604051806101a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b816001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f691906111ca565b6001600160a01b039081168252604080516307e75ba360e11b8152905191841691630fceb746916004808201926020929091908290030181865afa158015610242573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026691906111ca565b81602001906001600160a01b031690816001600160a01b031681525050816001600160a01b0316637932ecf36040518163ffffffff1660e01b8152600401600060405180830381865afa1580156102c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102e991908101906112be565b8160400181905250816001600160a01b031663c669439e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561032f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035391906111ca565b81606001906001600160a01b031690816001600160a01b031681525050816001600160a01b031663bb0b86ff6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d291906112f3565b816080018181525050816001600160a01b031663c2f2beea6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043d91906112f3565b8160a0018181525050816001600160a01b031663a37b6ad46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a891906112f3565b8160c0018181525050816001600160a01b031663787471a96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051391906112f3565b8160e0018181525050816001600160a01b03166282a36d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d91906112f3565b81610100018181525050816001600160a01b031663a0af81f06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e991906111ca565b8161012001906001600160a01b031690816001600160a01b031681525050816001600160a01b031663107a8bfd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610645573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066991906112f3565b81610140018181525050816001600160a01b0316635d06e92c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d591906112f3565b6101608201526020810151604080830151905163f7434ea960e01b81526001600160a01b039092169163f7434ea9916107109160040161130c565b602060405180830381865afa15801561072d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075191906112f3565b610180820152919050565b604080516101808101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082015261014081018290526101608101829052906107c684846108a5565b905060405180610180016040528084815260200182600001516000015160038111156107f4576107f4610edb565b8152602001826020015115158152602001826080015115158152602001826040015181526020018260c00151600281111561083157610831610edb565b815260a0830180516020908101516001600160a01b03169083015251604090910190600260200201516001600160a01b031681526020018260e001516001600160a01b0316815260200182610100015181526020018260600151815260200182600001516020015181525091505092915050565b6108ad610cc4565b60006108b98484610c0f565b90506000806000806000806000808b6001600160a01b031663bfbcff1a8c60018c602001516108e89190611335565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381865afa158015610929573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109519190810190611375565b975097509750975097509750975097506040518061012001604052808a8152602001891515815260200188815260200187815260200186151581526020018581526020018460028111156109a7576109a7610edb565b81526001600160a01b0390931660208401526040909201529a9950505050505050505050565b606060006109db8484610c0f565b9050806020015167ffffffffffffffff8111156109fa576109fa6111f7565b604051908082528060200260200182016040528015610a6b57816020015b60408051610100810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c083019190915260e08201528252600019909201910181610a185790505b50915060005b8160200151811015610c075760008060008060008060008b6001600160a01b031663bfbcff1a8c8a6040518363ffffffff1660e01b8152600401610abf929190918252602082015260400190565b600060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b049190810190611375565b975097505096509650965096509650604051806101000160405280881515815260200187815260200186815260200185151581526020018460016002811115610b4f57610b4f610edb565b60038110610b5f57610b5f61131f565b60200201516001600160a01b0316815260200184600280811115610b8557610b85610edb565b60038110610b9557610b9561131f565b60200201516001600160a01b03168152602001836001600160a01b03168152602001828152508a60018a8c60200151610bce9190611335565b610bd89190611335565b81518110610be857610be861131f565b6020026020010181905250505050505050508080600101915050610a71565b505092915050565b6040805180820190915260008082526020820152604051634aac84e560e01b81526004810183905260009081906001600160a01b03861690634aac84e590602401606060405180830381865afa158015610c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c919190611461565b50915091506040518060400160405280836003811115610cb357610cb3610edb565b815260200191909152949350505050565b604080516101608101825260006101208201818152610140830182905282526020820181905291810182905260608101829052608081019190915260a08101610d0b610d26565b81526020016000815260006020820152606060409091015290565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b0381168114610d5957600080fd5b50565b600060208284031215610d6e57600080fd5b8135610d7981610d44565b9392505050565b6001600160a01b03169052565b60005b83811015610da8578181015183820152602001610d90565b50506000910152565b60008151808452610dc9816020860160208601610d8d565b601f01601f19169290920160200192915050565b60208152610def602082018351610d80565b60006020830151610e036040840182610d80565b5060408301516101a0806060850152610e206101c0850183610db1565b91506060850151610e346080860182610d80565b50608085015160a085015260a085015160c085015260c085015160e085015260e0850151610100818187015280870151915050610120818187015280870151915050610140610e8581870183610d80565b86015161016086810191909152860151610180808701919091529095015193019290925250919050565b60008060408385031215610ec257600080fd5b8235610ecd81610d44565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60048110610f0157610f01610edb565b9052565b60038110610f0157610f01610edb565b602081528151602082015260006020830151610f346040840182610ef1565b5060408301518015156060840152506060830151801515608084015250608083015160a083015260a0830151610f6d60c0840182610f05565b5060c0830151610f8060e0840182610d80565b5060e0830151610100610f9581850183610d80565b8401519050610120610fa984820183610d80565b808501519150506101806101408181860152610fc96101a0860184610db1565b9086015161016086810191909152909501519301929092525090919050565b610ff3828251610ef1565b602090810151910152565b8060005b600381101561102a5781516001600160a01b0316845260209384019390910190600101611002565b50505050565b60208152611042602082018351610fe8565b60006020830151611057606084018215159052565b5060408301516080830152606083015160a0830152608083015161107f60c084018215159052565b5060a083015161109260e0840182610ffe565b5060c08301516110a6610140840182610f05565b5060e08301516110ba610160840182610d80565b50610100830151610180838101526110d66101a0840182610db1565b949350505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156111a857603f198984030185528151610100815115158552888201518986015287820151888601526060808301511515818701525060808083015161115282880182610d80565b505060a08083015161116682880182610d80565b505060c08083015161117a82880182610d80565b505060e09182015191850181905261119485820183610db1565b968901969450505090860190600101611107565b509098975050505050505050565b604081016111c48284610fe8565b92915050565b6000602082840312156111dc57600080fd5b8151610d7981610d44565b80516111f281610d44565b919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611230576112306111f7565b60405290565b600082601f83011261124757600080fd5b815167ffffffffffffffff80821115611262576112626111f7565b604051601f8301601f19908116603f0116810190828211818310171561128a5761128a6111f7565b816040528381528660208588010111156112a357600080fd5b6112b4846020830160208901610d8d565b9695505050505050565b6000602082840312156112d057600080fd5b815167ffffffffffffffff8111156112e757600080fd5b6110d684828501611236565b60006020828403121561130557600080fd5b5051919050565b602081526000610d796020830184610db1565b634e487b7160e01b600052603260045260246000fd5b818103818111156111c457634e487b7160e01b600052601160045260246000fd5b805180151581146111f257600080fd5b8051600381106111f257600080fd5b600080600080600080600080610140898b03121561139257600080fd5b61139b89611356565b97506020808a0151975060408a015196506113b860608b01611356565b95508a609f8b01126113c957600080fd5b6113d161120d565b8060e08c018d8111156113e357600080fd5b60808d015b818110156114085780516113fb81610d44565b84529284019284016113e8565b5081975061141581611366565b9650505050506114286101008a016111e7565b915061012089015167ffffffffffffffff81111561144557600080fd5b6114518b828c01611236565b9150509295985092959890939650565b60008060006060848603121561147657600080fd5b83516004811061148557600080fd5b60208501516040909501519096949550939250505056fea26469706673582212200d885d4523d95a50ff923d0bd0c0f59b53940cabd08838f2039f13f34dead23664736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80630f4d1e731461005c5780633f869479146100855780637d1d8cc2146100a557806387ef093a146100c5578063cefded2e146100e5575b600080fd5b61006f61006a366004610d5c565b610105565b60405161007c9190610ddd565b60405180910390f35b610098610093366004610eaf565b61075c565b60405161007c9190610f15565b6100b86100b3366004610eaf565b6108a5565b60405161007c9190611030565b6100d86100d3366004610eaf565b6109cd565b60405161007c91906110de565b6100f86100f3366004610eaf565b610c0f565b60405161007c91906111b6565b610194604051806101a0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b816001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f691906111ca565b6001600160a01b039081168252604080516307e75ba360e11b8152905191841691630fceb746916004808201926020929091908290030181865afa158015610242573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026691906111ca565b81602001906001600160a01b031690816001600160a01b031681525050816001600160a01b0316637932ecf36040518163ffffffff1660e01b8152600401600060405180830381865afa1580156102c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102e991908101906112be565b8160400181905250816001600160a01b031663c669439e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561032f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035391906111ca565b81606001906001600160a01b031690816001600160a01b031681525050816001600160a01b031663bb0b86ff6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d291906112f3565b816080018181525050816001600160a01b031663c2f2beea6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043d91906112f3565b8160a0018181525050816001600160a01b031663a37b6ad46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a891906112f3565b8160c0018181525050816001600160a01b031663787471a96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051391906112f3565b8160e0018181525050816001600160a01b03166282a36d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d91906112f3565b81610100018181525050816001600160a01b031663a0af81f06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e991906111ca565b8161012001906001600160a01b031690816001600160a01b031681525050816001600160a01b031663107a8bfd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610645573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066991906112f3565b81610140018181525050816001600160a01b0316635d06e92c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d591906112f3565b6101608201526020810151604080830151905163f7434ea960e01b81526001600160a01b039092169163f7434ea9916107109160040161130c565b602060405180830381865afa15801561072d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075191906112f3565b610180820152919050565b604080516101808101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082015261014081018290526101608101829052906107c684846108a5565b905060405180610180016040528084815260200182600001516000015160038111156107f4576107f4610edb565b8152602001826020015115158152602001826080015115158152602001826040015181526020018260c00151600281111561083157610831610edb565b815260a0830180516020908101516001600160a01b03169083015251604090910190600260200201516001600160a01b031681526020018260e001516001600160a01b0316815260200182610100015181526020018260600151815260200182600001516020015181525091505092915050565b6108ad610cc4565b60006108b98484610c0f565b90506000806000806000806000808b6001600160a01b031663bfbcff1a8c60018c602001516108e89190611335565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381865afa158015610929573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109519190810190611375565b975097509750975097509750975097506040518061012001604052808a8152602001891515815260200188815260200187815260200186151581526020018581526020018460028111156109a7576109a7610edb565b81526001600160a01b0390931660208401526040909201529a9950505050505050505050565b606060006109db8484610c0f565b9050806020015167ffffffffffffffff8111156109fa576109fa6111f7565b604051908082528060200260200182016040528015610a6b57816020015b60408051610100810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c083019190915260e08201528252600019909201910181610a185790505b50915060005b8160200151811015610c075760008060008060008060008b6001600160a01b031663bfbcff1a8c8a6040518363ffffffff1660e01b8152600401610abf929190918252602082015260400190565b600060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b049190810190611375565b975097505096509650965096509650604051806101000160405280881515815260200187815260200186815260200185151581526020018460016002811115610b4f57610b4f610edb565b60038110610b5f57610b5f61131f565b60200201516001600160a01b0316815260200184600280811115610b8557610b85610edb565b60038110610b9557610b9561131f565b60200201516001600160a01b03168152602001836001600160a01b03168152602001828152508a60018a8c60200151610bce9190611335565b610bd89190611335565b81518110610be857610be861131f565b6020026020010181905250505050505050508080600101915050610a71565b505092915050565b6040805180820190915260008082526020820152604051634aac84e560e01b81526004810183905260009081906001600160a01b03861690634aac84e590602401606060405180830381865afa158015610c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c919190611461565b50915091506040518060400160405280836003811115610cb357610cb3610edb565b815260200191909152949350505050565b604080516101608101825260006101208201818152610140830182905282526020820181905291810182905260608101829052608081019190915260a08101610d0b610d26565b81526020016000815260006020820152606060409091015290565b60405180606001604052806003906020820280368337509192915050565b6001600160a01b0381168114610d5957600080fd5b50565b600060208284031215610d6e57600080fd5b8135610d7981610d44565b9392505050565b6001600160a01b03169052565b60005b83811015610da8578181015183820152602001610d90565b50506000910152565b60008151808452610dc9816020860160208601610d8d565b601f01601f19169290920160200192915050565b60208152610def602082018351610d80565b60006020830151610e036040840182610d80565b5060408301516101a0806060850152610e206101c0850183610db1565b91506060850151610e346080860182610d80565b50608085015160a085015260a085015160c085015260c085015160e085015260e0850151610100818187015280870151915050610120818187015280870151915050610140610e8581870183610d80565b86015161016086810191909152860151610180808701919091529095015193019290925250919050565b60008060408385031215610ec257600080fd5b8235610ecd81610d44565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60048110610f0157610f01610edb565b9052565b60038110610f0157610f01610edb565b602081528151602082015260006020830151610f346040840182610ef1565b5060408301518015156060840152506060830151801515608084015250608083015160a083015260a0830151610f6d60c0840182610f05565b5060c0830151610f8060e0840182610d80565b5060e0830151610100610f9581850183610d80565b8401519050610120610fa984820183610d80565b808501519150506101806101408181860152610fc96101a0860184610db1565b9086015161016086810191909152909501519301929092525090919050565b610ff3828251610ef1565b602090810151910152565b8060005b600381101561102a5781516001600160a01b0316845260209384019390910190600101611002565b50505050565b60208152611042602082018351610fe8565b60006020830151611057606084018215159052565b5060408301516080830152606083015160a0830152608083015161107f60c084018215159052565b5060a083015161109260e0840182610ffe565b5060c08301516110a6610140840182610f05565b5060e08301516110ba610160840182610d80565b50610100830151610180838101526110d66101a0840182610db1565b949350505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156111a857603f198984030185528151610100815115158552888201518986015287820151888601526060808301511515818701525060808083015161115282880182610d80565b505060a08083015161116682880182610d80565b505060c08083015161117a82880182610d80565b505060e09182015191850181905261119485820183610db1565b968901969450505090860190600101611107565b509098975050505050505050565b604081016111c48284610fe8565b92915050565b6000602082840312156111dc57600080fd5b8151610d7981610d44565b80516111f281610d44565b919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611230576112306111f7565b60405290565b600082601f83011261124757600080fd5b815167ffffffffffffffff80821115611262576112626111f7565b604051601f8301601f19908116603f0116810190828211818310171561128a5761128a6111f7565b816040528381528660208588010111156112a357600080fd5b6112b4846020830160208901610d8d565b9695505050505050565b6000602082840312156112d057600080fd5b815167ffffffffffffffff8111156112e757600080fd5b6110d684828501611236565b60006020828403121561130557600080fd5b5051919050565b602081526000610d796020830184610db1565b634e487b7160e01b600052603260045260246000fd5b818103818111156111c457634e487b7160e01b600052601160045260246000fd5b805180151581146111f257600080fd5b8051600381106111f257600080fd5b600080600080600080600080610140898b03121561139257600080fd5b61139b89611356565b97506020808a0151975060408a015196506113b860608b01611356565b95508a609f8b01126113c957600080fd5b6113d161120d565b8060e08c018d8111156113e357600080fd5b60808d015b818110156114085780516113fb81610d44565b84529284019284016113e8565b5081975061141581611366565b9650505050506114286101008a016111e7565b915061012089015167ffffffffffffffff81111561144557600080fd5b6114518b828c01611236565b9150509295985092959890939650565b60008060006060848603121561147657600080fd5b83516004811061148557600080fd5b60208501516040909501519096949550939250505056fea26469706673582212200d885d4523d95a50ff923d0bd0c0f59b53940cabd08838f2039f13f34dead23664736f6c63430008180033", "devdoc": { "kind": "dev", "methods": { diff --git a/contracts/scripts/setDisputeTemplate.ts b/contracts/scripts/setDisputeTemplate.ts index f4b46ca..c1e106f 100644 --- a/contracts/scripts/setDisputeTemplate.ts +++ b/contracts/scripts/setDisputeTemplate.ts @@ -27,7 +27,7 @@ task("set-dispute-template", "Sets the dispute template").setAction(async (args, console.log(`Found ${events.length} NewList events:`); for (let i = 55; i < events.length; i++) { const event = events[i]; - const curate = await ethers.getContractAt("CurateV2", event.args._address); + const curate = await ethers.getContractAtWithSignerAddress("CurateV2", event.args._address, deployer); const governor = await curate.governor(); console.log( `${i + 1}. List address: ${ diff --git a/templates/index.ts b/templates/index.ts index 21c31f4..1700b3c 100644 --- a/templates/index.ts +++ b/templates/index.ts @@ -7,7 +7,7 @@ const sharedTemplateProperties = ` "arbitrableChainID": "421614", "arbitrableAddress": "{{arbitrableAddress}}", "arbitratorChainID": "421614", - "arbitratorAddress": "0xD08Ab99480d02bf9C092828043f611BcDFEA917b", + "arbitratorAddress": "0x4838e31E0ea315232c431598110FE677cAF2D6E6", "metadata": { "itemName": "{{itemName}}", "itemDescription": "{{itemDescription}}", From 173a6ceee17b6f9b7b6eb9216f8d8c74986b8649 Mon Sep 17 00:00:00 2001 From: jaybuidl Date: Thu, 17 Apr 2025 19:50:03 +0100 Subject: [PATCH 3/3] chore: subgraph redeploy --- subgraph/package.json | 2 +- subgraph/src/Curate.ts | 4 ++-- subgraph/subgraph.yaml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/subgraph/package.json b/subgraph/package.json index 9196913..06d4b55 100644 --- a/subgraph/package.json +++ b/subgraph/package.json @@ -1,6 +1,6 @@ { "name": "@kleros/curate-v2-subgraph", - "version": "0.1.4", + "version": "0.2.0", "license": "MIT", "scripts": { "update:arbitrum-sepolia-devnet": "./scripts/update.sh arbitrumSepoliaDevnet arbitrum-sepolia", diff --git a/subgraph/src/Curate.ts b/subgraph/src/Curate.ts index edcc061..0f0a53b 100644 --- a/subgraph/src/Curate.ts +++ b/subgraph/src/Curate.ts @@ -266,7 +266,7 @@ export function handleRuling(event: Ruling): void { export function handleRequestChallenged(event: DisputeRequest): void { let curate = Curate.bind(event.address); - let itemID = curate.arbitratorDisputeIDToItemID(event.params._arbitrator, event.params._arbitrableDisputeID); + let itemID = curate.arbitratorDisputeIDToItemID(event.params._arbitrator, event.params._arbitratorDisputeID); let graphItemID = itemID.toHexString() + "@" + event.address.toHexString(); let item = Item.load(graphItemID); if (!item) { @@ -294,7 +294,7 @@ export function handleRequestChallenged(event: DisputeRequest): void { request.disputed = true; request.challenger = ensureUser(event.transaction.from.toHexString()).id; request.challengeTime = event.block.timestamp; - request.disputeID = event.params._arbitrableDisputeID; + request.disputeID = event.params._arbitratorDisputeID; request.save(); item.save(); diff --git a/subgraph/subgraph.yaml b/subgraph/subgraph.yaml index e8d5255..6e7bcc5 100644 --- a/subgraph/subgraph.yaml +++ b/subgraph/subgraph.yaml @@ -11,9 +11,9 @@ dataSources: name: CurateFactory network: arbitrum-sepolia source: - address: "0x1d7AEdcBBD73EE03313Ff6Ba32743d365b9A8a38" + address: "0x6f824A72d67bcF76f6F55C12F6E8FcAF531818bD" abi: CurateFactory - startBlock: 34231352 + startBlock: 143682381 mapping: kind: ethereum/events apiVersion: 0.0.6