From 9b8560046ae2946f363f9eba52764743fc9c7685 Mon Sep 17 00:00:00 2001 From: mikhailUshakoff Date: Sat, 29 Jun 2024 00:10:14 +0200 Subject: [PATCH 01/12] Operator set update script --- example/.gitignore | 2 + example/package.json | 14 + example/scripts/abi/BLSApkRegistry.js | 3 + example/scripts/abi/IndexRegistry.js | 3 + .../scripts/abi/NFFLRegistryCoordinator.js | 3 + example/scripts/abi/NFFLRegistryRollup.js | 3 + example/scripts/abi/OperatorStateRetriever.js | 3 + .../abi/SFFLOperatorSetUpdateRegistry.js | 3 + example/scripts/config.json | 7 + example/scripts/contracts.js | 36 +++ example/scripts/updateOperatorSet.js | 81 ++++++ example/yarn.lock | 257 ++++++++++++++++++ 12 files changed, 415 insertions(+) create mode 100644 example/.gitignore create mode 100644 example/package.json create mode 100644 example/scripts/abi/BLSApkRegistry.js create mode 100644 example/scripts/abi/IndexRegistry.js create mode 100644 example/scripts/abi/NFFLRegistryCoordinator.js create mode 100644 example/scripts/abi/NFFLRegistryRollup.js create mode 100644 example/scripts/abi/OperatorStateRetriever.js create mode 100644 example/scripts/abi/SFFLOperatorSetUpdateRegistry.js create mode 100644 example/scripts/config.json create mode 100644 example/scripts/contracts.js create mode 100644 example/scripts/updateOperatorSet.js create mode 100644 example/yarn.lock diff --git a/example/.gitignore b/example/.gitignore new file mode 100644 index 00000000..5d00522b --- /dev/null +++ b/example/.gitignore @@ -0,0 +1,2 @@ +node_modules +secret diff --git a/example/package.json b/example/package.json new file mode 100644 index 00000000..2deedad9 --- /dev/null +++ b/example/package.json @@ -0,0 +1,14 @@ +{ + "name": "nffl-demo", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "scripts": { + "set:update": "node scripts/updateOperatorSet.js" + }, + "dependencies": { + "bignumber.js": "^9.1.2", + "ether": "^0.0.9", + "ethers": "^6.13.1" + } +} diff --git a/example/scripts/abi/BLSApkRegistry.js b/example/scripts/abi/BLSApkRegistry.js new file mode 100644 index 00000000..9f056b37 --- /dev/null +++ b/example/scripts/abi/BLSApkRegistry.js @@ -0,0 +1,3 @@ +const BLSApkRegistryABI = [{"inputs":[{"internalType":"contract IRegistryCoordinator","name":"_registryCoordinator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"indexed":false,"internalType":"struct BN254.G1Point","name":"pubkeyG1","type":"tuple"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"indexed":false,"internalType":"struct BN254.G2Point","name":"pubkeyG2","type":"tuple"}],"name":"NewPubkeyRegistration","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"OperatorAddedToQuorums","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"OperatorRemovedFromQuorums","type":"event"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"apkHistory","outputs":[{"internalType":"bytes24","name":"apkHash","type":"bytes24"},{"internalType":"uint32","name":"updateBlockNumber","type":"uint32"},{"internalType":"uint32","name":"nextUpdateBlockNumber","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"currentApk","outputs":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"deregisterOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"getApk","outputs":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"uint32","name":"blockNumber","type":"uint32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getApkHashAtBlockNumberAndIndex","outputs":[{"internalType":"bytes24","name":"","type":"bytes24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"getApkHistoryLength","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"quorumNumbers","type":"bytes"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getApkIndicesAtBlockNumber","outputs":[{"internalType":"uint32[]","name":"","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getApkUpdateAtIndex","outputs":[{"components":[{"internalType":"bytes24","name":"apkHash","type":"bytes24"},{"internalType":"uint32","name":"updateBlockNumber","type":"uint32"},{"internalType":"uint32","name":"nextUpdateBlockNumber","type":"uint32"}],"internalType":"struct IBLSApkRegistry.ApkUpdate","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"pubkeyHash","type":"bytes32"}],"name":"getOperatorFromPubkeyHash","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"getOperatorId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"getRegisteredPubkey","outputs":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"","type":"tuple"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"initializeQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"operatorToPubkey","outputs":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"operatorToPubkeyHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"pubkeyHashToOperator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyRegistrationSignature","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyG1","type":"tuple"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct BN254.G2Point","name":"pubkeyG2","type":"tuple"}],"internalType":"struct IBLSApkRegistry.PubkeyRegistrationParams","name":"params","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyRegistrationMessageHash","type":"tuple"}],"name":"registerBLSPublicKey","outputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"registerOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"registryCoordinator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]; + +module.exports = {BLSApkRegistryABI}; diff --git a/example/scripts/abi/IndexRegistry.js b/example/scripts/abi/IndexRegistry.js new file mode 100644 index 00000000..f78facdd --- /dev/null +++ b/example/scripts/abi/IndexRegistry.js @@ -0,0 +1,3 @@ +const IndexRegistryABI = [{"inputs":[{"internalType":"contract IRegistryCoordinator","name":"_registryCoordinator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"indexed":false,"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"indexed":false,"internalType":"uint32","name":"newOperatorIndex","type":"uint32"}],"name":"QuorumIndexUpdate","type":"event"},{"inputs":[],"name":"OPERATOR_DOES_NOT_EXIST_ID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"currentOperatorIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"deregisterOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"uint32","name":"operatorIndex","type":"uint32"}],"name":"getLatestOperatorUpdate","outputs":[{"components":[{"internalType":"uint32","name":"fromBlockNumber","type":"uint32"},{"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"internalType":"struct IIndexRegistry.OperatorUpdate","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"getLatestQuorumUpdate","outputs":[{"components":[{"internalType":"uint32","name":"fromBlockNumber","type":"uint32"},{"internalType":"uint32","name":"numOperators","type":"uint32"}],"internalType":"struct IIndexRegistry.QuorumUpdate","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"uint32","name":"blockNumber","type":"uint32"}],"name":"getOperatorListAtBlockNumber","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"uint32","name":"operatorIndex","type":"uint32"},{"internalType":"uint32","name":"arrayIndex","type":"uint32"}],"name":"getOperatorUpdateAtIndex","outputs":[{"components":[{"internalType":"uint32","name":"fromBlockNumber","type":"uint32"},{"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"internalType":"struct IIndexRegistry.OperatorUpdate","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"uint32","name":"quorumIndex","type":"uint32"}],"name":"getQuorumUpdateAtIndex","outputs":[{"components":[{"internalType":"uint32","name":"fromBlockNumber","type":"uint32"},{"internalType":"uint32","name":"numOperators","type":"uint32"}],"internalType":"struct IIndexRegistry.QuorumUpdate","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"initializeQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"registerOperator","outputs":[{"internalType":"uint32[]","name":"","type":"uint32[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"registryCoordinator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"totalOperatorsForQuorum","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}]; + +module.exports = {IndexRegistryABI}; \ No newline at end of file diff --git a/example/scripts/abi/NFFLRegistryCoordinator.js b/example/scripts/abi/NFFLRegistryCoordinator.js new file mode 100644 index 00000000..c0726f17 --- /dev/null +++ b/example/scripts/abi/NFFLRegistryCoordinator.js @@ -0,0 +1,3 @@ +const NFFLRegistryCoordinatorABI = [{"inputs":[{"internalType":"contract IServiceManager","name":"_serviceManager","type":"address"},{"internalType":"contract IStakeRegistry","name":"_stakeRegistry","type":"address"},{"internalType":"contract IBLSApkRegistry","name":"_blsApkRegistry","type":"address"},{"internalType":"contract IIndexRegistry","name":"_indexRegistry","type":"address"},{"internalType":"contract SFFLOperatorSetUpdateRegistry","name":"_operatorSetUpdateRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"prevChurnApprover","type":"address"},{"indexed":false,"internalType":"address","name":"newChurnApprover","type":"address"}],"name":"ChurnApproverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"prevEjector","type":"address"},{"indexed":false,"internalType":"address","name":"newEjector","type":"address"}],"name":"EjectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"name":"OperatorDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"name":"OperatorRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"components":[{"internalType":"uint32","name":"maxOperatorCount","type":"uint32"},{"internalType":"uint16","name":"kickBIPsOfOperatorStake","type":"uint16"},{"internalType":"uint16","name":"kickBIPsOfTotalStake","type":"uint16"}],"indexed":false,"internalType":"struct IRegistryCoordinator.OperatorSetParam","name":"operatorSetParams","type":"tuple"}],"name":"OperatorSetParamsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"indexed":false,"internalType":"string","name":"socket","type":"string"}],"name":"OperatorSocketUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IPauserRegistry","name":"pauserRegistry","type":"address"},{"indexed":false,"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address"}],"name":"PauserRegistrySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"blocknumber","type":"uint256"}],"name":"QuorumBlockNumberUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"OPERATOR_CHURN_APPROVAL_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBKEY_REGISTRATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blsApkRegistry","outputs":[{"internalType":"contract IBLSApkRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"registeringOperatorId","type":"bytes32"},{"components":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"address","name":"operator","type":"address"}],"internalType":"struct IRegistryCoordinator.OperatorKickParam[]","name":"operatorKickParams","type":"tuple[]"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}],"name":"calculateOperatorChurnApprovalDigestHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"churnApprover","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"maxOperatorCount","type":"uint32"},{"internalType":"uint16","name":"kickBIPsOfOperatorStake","type":"uint16"},{"internalType":"uint16","name":"kickBIPsOfTotalStake","type":"uint16"}],"internalType":"struct IRegistryCoordinator.OperatorSetParam","name":"operatorSetParams","type":"tuple"},{"internalType":"uint96","name":"minimumStake","type":"uint96"},{"components":[{"internalType":"contract IStrategy","name":"strategy","type":"address"},{"internalType":"uint96","name":"multiplier","type":"uint96"}],"internalType":"struct IStakeRegistry.StrategyParams[]","name":"strategyParams","type":"tuple[]"}],"name":"createQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"deregisterOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"ejectOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ejector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"name":"getCurrentQuorumBitmap","outputs":[{"internalType":"uint192","name":"","type":"uint192"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"getOperator","outputs":[{"components":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"enum IRegistryCoordinator.OperatorStatus","name":"status","type":"uint8"}],"internalType":"struct IRegistryCoordinator.OperatorInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"name":"getOperatorFromId","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"getOperatorId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"getOperatorSetParams","outputs":[{"components":[{"internalType":"uint32","name":"maxOperatorCount","type":"uint32"},{"internalType":"uint16","name":"kickBIPsOfOperatorStake","type":"uint16"},{"internalType":"uint16","name":"kickBIPsOfTotalStake","type":"uint16"}],"internalType":"struct IRegistryCoordinator.OperatorSetParam","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"getOperatorStatus","outputs":[{"internalType":"enum IRegistryCoordinator.OperatorStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"uint32","name":"blockNumber","type":"uint32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getQuorumBitmapAtBlockNumberByIndex","outputs":[{"internalType":"uint192","name":"","type":"uint192"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"name":"getQuorumBitmapHistoryLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"blockNumber","type":"uint32"},{"internalType":"bytes32[]","name":"operatorIds","type":"bytes32[]"}],"name":"getQuorumBitmapIndicesAtBlockNumber","outputs":[{"internalType":"uint32[]","name":"","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getQuorumBitmapUpdateByIndex","outputs":[{"components":[{"internalType":"uint32","name":"updateBlockNumber","type":"uint32"},{"internalType":"uint32","name":"nextUpdateBlockNumber","type":"uint32"},{"internalType":"uint192","name":"quorumBitmap","type":"uint192"}],"internalType":"struct IRegistryCoordinator.QuorumBitmapUpdate","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"indexRegistry","outputs":[{"internalType":"contract IIndexRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address","name":"_churnApprover","type":"address"},{"internalType":"address","name":"_ejector","type":"address"},{"internalType":"contract IPauserRegistry","name":"_pauserRegistry","type":"address"},{"internalType":"uint256","name":"_initialPausedStatus","type":"uint256"},{"components":[{"internalType":"uint32","name":"maxOperatorCount","type":"uint32"},{"internalType":"uint16","name":"kickBIPsOfOperatorStake","type":"uint16"},{"internalType":"uint16","name":"kickBIPsOfTotalStake","type":"uint16"}],"internalType":"struct IRegistryCoordinator.OperatorSetParam[]","name":"_operatorSetParams","type":"tuple[]"},{"internalType":"uint96[]","name":"_minimumStakes","type":"uint96[]"},{"components":[{"internalType":"contract IStrategy","name":"strategy","type":"address"},{"internalType":"uint96","name":"multiplier","type":"uint96"}],"internalType":"struct IStakeRegistry.StrategyParams[][]","name":"_strategyParams","type":"tuple[][]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"isChurnApproverSaltUsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numRegistries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operatorSetUpdateRegistry","outputs":[{"internalType":"contract SFFLOperatorSetUpdateRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauserRegistry","outputs":[{"internalType":"contract IPauserRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"pubkeyRegistrationMessageHash","outputs":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quorumCount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"quorumUpdateBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"quorumNumbers","type":"bytes"},{"internalType":"string","name":"socket","type":"string"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyRegistrationSignature","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyG1","type":"tuple"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct BN254.G2Point","name":"pubkeyG2","type":"tuple"}],"internalType":"struct IBLSApkRegistry.PubkeyRegistrationParams","name":"params","type":"tuple"},{"components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}],"internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","name":"operatorSignature","type":"tuple"}],"name":"registerOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"quorumNumbers","type":"bytes"},{"internalType":"string","name":"socket","type":"string"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyRegistrationSignature","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyG1","type":"tuple"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct BN254.G2Point","name":"pubkeyG2","type":"tuple"}],"internalType":"struct IBLSApkRegistry.PubkeyRegistrationParams","name":"params","type":"tuple"},{"components":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"address","name":"operator","type":"address"}],"internalType":"struct IRegistryCoordinator.OperatorKickParam[]","name":"operatorKickParams","type":"tuple[]"},{"components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}],"internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","name":"churnApproverSignature","type":"tuple"},{"components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}],"internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","name":"operatorSignature","type":"tuple"}],"name":"registerOperatorWithChurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"registries","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"serviceManager","outputs":[{"internalType":"contract IServiceManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_churnApprover","type":"address"}],"name":"setChurnApprover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ejector","type":"address"}],"name":"setEjector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"components":[{"internalType":"uint32","name":"maxOperatorCount","type":"uint32"},{"internalType":"uint16","name":"kickBIPsOfOperatorStake","type":"uint16"},{"internalType":"uint16","name":"kickBIPsOfTotalStake","type":"uint16"}],"internalType":"struct IRegistryCoordinator.OperatorSetParam","name":"operatorSetParams","type":"tuple"}],"name":"setOperatorSetParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address"}],"name":"setPauserRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeRegistry","outputs":[{"internalType":"contract IStakeRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"operators","type":"address[]"}],"name":"updateOperators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[][]","name":"operatorsPerQuorum","type":"address[][]"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"updateOperatorsForQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"socket","type":"string"}],"name":"updateSocket","outputs":[],"stateMutability":"nonpayable","type":"function"}]; + +module.exports = {NFFLRegistryCoordinatorABI}; \ No newline at end of file diff --git a/example/scripts/abi/NFFLRegistryRollup.js b/example/scripts/abi/NFFLRegistryRollup.js new file mode 100644 index 00000000..0015f9cc --- /dev/null +++ b/example/scripts/abi/NFFLRegistryRollup.js @@ -0,0 +1,3 @@ +const NFFLRegistryRollupABI = [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IPauserRegistry","name":"pauserRegistry","type":"address"},{"indexed":false,"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address"}],"name":"PauserRegistrySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"rollupId","type":"uint32"},{"indexed":true,"internalType":"uint64","name":"blockHeight","type":"uint64"},{"indexed":false,"internalType":"bytes32","name":"stateRoot","type":"bytes32"}],"name":"StateRootUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"PAUSED_UPDATE_OPERATOR_SET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSED_UPDATE_STATE_ROOT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"THRESHOLD_DENOMINATOR","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"aggregator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple"},{"internalType":"uint128","name":"weight","type":"uint128"}],"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]"}],"internalType":"struct OperatorSetUpdate.Message","name":"message","type":"tuple"}],"name":"forceOperatorSetUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getApk","outputs":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"pubkeyHash","type":"bytes32"}],"name":"getOperatorWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getQuorumThreshold","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"}],"name":"getStateRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}],"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple"},{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"storageKey","type":"bytes32"},{"internalType":"bytes","name":"stateTrieWitness","type":"bytes"},{"internalType":"bytes","name":"storageTrieWitness","type":"bytes"}],"internalType":"struct SFFLRegistryBase.ProofParams","name":"proofParams","type":"tuple"}],"name":"getStorageValue","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"quorumThreshold","type":"uint128"},{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_aggregator","type":"address"},{"internalType":"contract IPauserRegistry","name":"_pauserRegistry","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nextOperatorUpdateId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauserRegistry","outputs":[{"internalType":"contract IPauserRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple"},{"internalType":"uint128","name":"weight","type":"uint128"}],"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]"},{"internalType":"uint64","name":"_nextOperatorUpdateId","type":"uint64"}],"name":"setInitialOperatorSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address"}],"name":"setPauserRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newQuorumThreshold","type":"uint128"}],"name":"setQuorumThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}],"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple"},{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"storageKey","type":"bytes32"},{"internalType":"bytes","name":"stateTrieWitness","type":"bytes"},{"internalType":"bytes","name":"storageTrieWitness","type":"bytes"}],"internalType":"struct SFFLRegistryBase.ProofParams","name":"proofParams","type":"tuple"},{"internalType":"bytes","name":"agreement","type":"bytes"}],"name":"updateAndGetStorageValue","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple"},{"internalType":"uint128","name":"weight","type":"uint128"}],"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]"}],"internalType":"struct OperatorSetUpdate.Message","name":"message","type":"tuple"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple"}],"internalType":"struct RollupOperators.SignatureInfo","name":"signatureInfo","type":"tuple"}],"name":"updateOperatorSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}],"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple"}],"internalType":"struct RollupOperators.SignatureInfo","name":"signatureInfo","type":"tuple"}],"name":"updateStateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"}]; + +module.exports = {NFFLRegistryRollupABI} \ No newline at end of file diff --git a/example/scripts/abi/OperatorStateRetriever.js b/example/scripts/abi/OperatorStateRetriever.js new file mode 100644 index 00000000..383ea808 --- /dev/null +++ b/example/scripts/abi/OperatorStateRetriever.js @@ -0,0 +1,3 @@ +const OperatorStateRetrieverABI = [{"inputs":[{"internalType":"contract IRegistryCoordinator","name":"registryCoordinator","type":"address"},{"internalType":"uint32","name":"referenceBlockNumber","type":"uint32"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"},{"internalType":"bytes32[]","name":"nonSignerOperatorIds","type":"bytes32[]"}],"name":"getCheckSignaturesIndices","outputs":[{"components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}],"internalType":"struct OperatorStateRetriever.CheckSignaturesIndices","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IRegistryCoordinator","name":"registryCoordinator","type":"address"},{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"uint32","name":"blockNumber","type":"uint32"}],"name":"getOperatorState","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"uint96","name":"stake","type":"uint96"}],"internalType":"struct OperatorStateRetriever.Operator[][]","name":"","type":"tuple[][]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IRegistryCoordinator","name":"registryCoordinator","type":"address"},{"internalType":"bytes32[]","name":"operatorIds","type":"bytes32[]"},{"internalType":"uint32","name":"blockNumber","type":"uint32"}],"name":"getQuorumBitmapsAtBlockNumber","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]; + +module.exports = {OperatorStateRetrieverABI}; \ No newline at end of file diff --git a/example/scripts/abi/SFFLOperatorSetUpdateRegistry.js b/example/scripts/abi/SFFLOperatorSetUpdateRegistry.js new file mode 100644 index 00000000..080d672a --- /dev/null +++ b/example/scripts/abi/SFFLOperatorSetUpdateRegistry.js @@ -0,0 +1,3 @@ +const SFFLOperatorSetUpdateRegistryABI = [{"inputs":[{"internalType":"contract IRegistryCoordinator","name":"_registryCoordinator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint64","name":"id","type":"uint64"},{"indexed":true,"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"OperatorSetUpdatedAtBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"isWhitelisted","type":"bool"}],"name":"OperatorWhitelistingUpdated","type":"event"},{"inputs":[{"internalType":"uint64","name":"operatorSetUpdateId","type":"uint64"}],"name":"getOperatorSetUpdate","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple"},{"internalType":"uint128","name":"weight","type":"uint128"}],"internalType":"struct RollupOperators.Operator[]","name":"previousOperatorSet","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple"},{"internalType":"uint128","name":"weight","type":"uint128"}],"internalType":"struct RollupOperators.Operator[]","name":"newOperatorSet","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOperatorSetUpdateCount","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOperatorWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"operatorSetUpdateIdToBlockNumber","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recordOperatorSetUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"registryCoordinator","outputs":[{"internalType":"contract IRegistryCoordinator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"isWhitelisted","type":"bool"}],"name":"setOperatorWhitelisting","outputs":[],"stateMutability":"nonpayable","type":"function"}]; + +module.exports = {SFFLOperatorSetUpdateRegistryABI}; \ No newline at end of file diff --git a/example/scripts/config.json b/example/scripts/config.json new file mode 100644 index 00000000..5df2e605 --- /dev/null +++ b/example/scripts/config.json @@ -0,0 +1,7 @@ +{ + "ethRpcUrl": "https://api.tatum.io/v3/blockchain/node/ethereum-holesky", + "ethNetworkId": 17000, + "arbRpcUrl": "https://sepolia-rollup.arbitrum.io/rpc", + "arbNetworkId": 421614, + "aggregator": "http://127.0.0.1:4002" +} \ No newline at end of file diff --git a/example/scripts/contracts.js b/example/scripts/contracts.js new file mode 100644 index 00000000..a3e21159 --- /dev/null +++ b/example/scripts/contracts.js @@ -0,0 +1,36 @@ +const contracts = { + "blsApkRegistry": "0x8919867ca8E87052EB0C8c247B557b8cE3809fFB", + "blsApkRegistryImpl": "0x6c8A74b096D2b6F79196DD18c3dB0906018AE722", + "deployer": "0x7876e514e2Ab4c54A7E26735A512407904FF1fD8", + "indexRegistry": "0xacF92095128ed66750cA1fedf11A67Fa040e0832", + "indexRegistryImpl": "0x60440D7a2C97A510E9b4b2644C46cAfE32a53363", + "operatorSetUpdateRegistry": "0x36943cD9E926fbA4DF695650d81E945bDF3d734c", + "operatorSetUpdateRegistryImpl": "0xD36f3E2eAd270C0937e3183A0B4Be3ff662Ba05a", + "operatorStateRetriever": "0xb4fd76c77e874FadD9Ec7D696FC6179Eb0ab78b1", + "registryCoordinator": "0x254cfb4b4306CA87494d78C9d6Ce06D61dB3d464", + "registryCoordinatorImpl": "0x6529B56F6fBbf10489536A579BAC82D62a6F5C11", + "sfflPauserReg": "0xd1d9a8f648186ABB130de1e708a68A37754aBEE1", + "sfflProxyAdmin": "0xd346c6b84aF715AD7633eFE68d9Ce9e5e439de90", + "sfflServiceManager": "0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0", + "sfflServiceManagerImpl": "0x275b03dE7f1424C0271B9dA06D8d55AA5AA46071", + "sfflTaskManager": "0xFE7F2C8a6da37574aD64c51156473C2b139F5559", + "sfflTaskManagerImpl": "0xee322Ae781c9969dcF765f744a3eAD79CC5f88A6", + "stakeRegistry": "0x325cfd06D82E0df7A1d3f13fdF527F76663B1A40", + "stakeRegistryImpl": "0xBE29fa93C3CaEabFCD0EdBF9E7147eAc08AdD93f" + } + + const arbContracts = { + "addresses": { + "deployer": "0x7876e514e2Ab4c54A7E26735A512407904FF1fD8", + "sfflPauserReg": "0xd346c6b84aF715AD7633eFE68d9Ce9e5e439de90", + "sfflProxyAdmin": "0x1456134dEcb5767b40f45744a701a1a1FcB23AA8", + "sfflRegistryRollup": "0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0", + "sfflRegistryRollupImpl": "0x36943cD9E926fbA4DF695650d81E945bDF3d734c" + }, + "chainInfo": { + "chainId": 421614, + "deploymentBlock": 39603626 + } + } + + module.exports = {contracts,arbContracts} \ No newline at end of file diff --git a/example/scripts/updateOperatorSet.js b/example/scripts/updateOperatorSet.js new file mode 100644 index 00000000..75d91bcd --- /dev/null +++ b/example/scripts/updateOperatorSet.js @@ -0,0 +1,81 @@ + +const { ethers, keccak256 } = require('ethers'); +const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); +const {arbContracts} = require('./contracts'); +const config = require('./config.json'); +const { secretSeedPhrase } = require('../secret/secret'); +const BigNumber = require('bignumber.js'); + +function hashG1Point(pk) { + const xValue = BigNumber(pk.X); + const yValue = BigNumber(pk.Y); + const buf = Buffer.alloc(64); + + // Store in buf + buf.write(xValue.toString(16).padStart(64, '0'), 0, 'hex'); + buf.write(yValue.toString(16).padStart(64, '0'), 32, 'hex'); + // Calculate keccak256 hash of buf + const hashedG1 = keccak256(buf); + + return BigNumber(hashedG1); +} +async function updateOperatorSet() { + // Init provider + const arbProvider = new ethers.JsonRpcProvider(config.arbRpcUrl, config.arbNetworkId); + // Init wallet + const wallet = ethers.Wallet.fromPhrase(secretSeedPhrase); + const account = wallet.connect(arbProvider); + console.log('Wallet address:', await account.getAddress()); + // Get next operator update id + const registryRollup = new ethers.Contract(arbContracts.addresses.sfflRegistryRollup, NFFLRegistryRollupABI, account); + const nextOperatorUpdateId = await registryRollup.nextOperatorUpdateId(); + console.log('nextOperatorUpdateId',nextOperatorUpdateId); + // Fetch data + console.log(`${config.aggregator}/aggregation/operator-set-update?id=${nextOperatorUpdateId}`); + const response = await fetch(`${config.aggregator}/aggregation/operator-set-update?id=${nextOperatorUpdateId}`); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + const respText = await response.text(); + text = respText.replace(/"Weight":\s*(\d+)/g, '"Weight": "$1"'); + data = JSON.parse(text); + const operators = data.Message.Operators.map(({ Pubkey, Weight }) => ({ + pubkey: Pubkey, + weight: Weight + })); + const message = { + id: data.Message.Id, + timestamp: data.Message.Timestamp, + operators + } + console.log('New operators:',message.operators); + // Sort non-signers keys + const nonSignerPubkeys = data.Aggregation.NonSignersPubkeysG1; + nonSignerPubkeys.sort((a, b) => { + const hashA = hashG1Point(a); + const hashB = hashG1Point(b); + return hashA.comparedTo(hashB); // Compare BigNumber values + }); + // Create signature info + const signatureInfo = { + nonSignerPubkeys, + apkG2: { + X: [data.Aggregation.SignersApkG2.X.A1,data.Aggregation.SignersApkG2.X.A0], + Y: [data.Aggregation.SignersApkG2.Y.A1,data.Aggregation.SignersApkG2.Y.A0] + }, + sigma: data.Aggregation.SignersAggSigG1.g1_point + } + // Call contact + const tx = await registryRollup.updateOperatorSet(message,signatureInfo); + console.log('transaction:', tx); + await tx.wait(); + // Get next operator update id + console.log('new nextOperatorUpdateId',await registryRollup.nextOperatorUpdateId()); +} + +updateOperatorSet() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); +}); \ No newline at end of file diff --git a/example/yarn.lock b/example/yarn.lock new file mode 100644 index 00000000..d3896e5c --- /dev/null +++ b/example/yarn.lock @@ -0,0 +1,257 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@types/node@18.15.13": + version "18.15.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" + integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== + +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + +ansi-regex@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-1.1.1.tgz#41c847194646375e6a1a5d10c3ca054ef9fc980d" + integrity sha512-q5i8bFLg2wDfsuR56c1NzlJFPzVD+9mxhDrhqOGigEFa87OZHlF+9dWeGWzVTP/0ECiA/JUGzfzRr2t3eYORRw== + +ansi-styles@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-0.2.0.tgz#359ab4b15dcd64ba6d74734b72c36360a9af2c19" + integrity sha512-YyQBeLj0juxUC9uUXRpQ1ZAzPT1dnsn5vVeJLHYFq4Ct1p0rymUSyvckKCXCH9I0bh3jWDIETA5nXIaZVKlDyA== + +async@~0.2.8: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + integrity sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ== + +bignumber.js@^9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +chalk@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.3.0.tgz#1c98437737f1199ebcc1d4c48fd41b9f9c8e8f23" + integrity sha512-OcfgS16PHpCu2Q4TNMtk0aZNx8PyeNiiB+6AgGH91fhT9hJ3v6pIIJ3lxlaOEDHlTm8t3wDe6bDGamvtIokQTg== + dependencies: + ansi-styles "~0.2.0" + has-color "~0.1.0" + +cli-color@~0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-0.2.3.tgz#0a25ceae5a6a1602be7f77d28563c36700274e88" + integrity sha512-f4DFHXdoe2rGMwuVO+DTBM6CkSt4m9R4a0vjnq5CJkSCKaXbrHbslCmyjG6cz/o50HP2wkjO3G1mXvc7G3V1LQ== + dependencies: + es5-ext "~0.9.2" + memoizee "~0.2.5" + +commander@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" + integrity sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ== + +cookiejar@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-1.3.0.tgz#dd00b35679021e99cbd4e855b9ad041913474765" + integrity sha512-U+NgxxtwHIokuL04FqKEkqsaWBDtnCQo+wvYjUCtBA56Lcg8vpV3SGtBx+RAmw92SV3VT8PwsYcCFK/cC3Dw+A== + +crypto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037" + integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== + +debug@~0.7.2: + version "0.7.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" + integrity sha512-EohAb3+DSHSGx8carOSKJe8G0ayV5/i609OD0J2orCkuyae7SyZSz2aoLmQF2s0Pj5gITDebwPH7GFBlqOUQ1Q== + +emitter-component@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.0.0.tgz#f04dd18fc3dc3e9a74cbc0f310b088666e4c016f" + integrity sha512-GZrLdp4Z7OERecoYQYElVVqf6/gcbGUs8nvaE+nmu2dGy453lLgGyPLNX9DdSyojdMqI86fCT9XQqsWJymciEw== + +es5-ext@~0.9.2: + version "0.9.2" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.9.2.tgz#d2e309d1f223b0718648835acf5b8823a8061f8a" + integrity sha512-wP3OSxZ0L/qK76t6qxPR8gWr2o5F4SzNF9qS5F/mOfVY3Ezcg07v6hSkETDmoekXIzn8xhQbHpp+tVlOE+qOAg== + +ether@^0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/ether/-/ether-0.0.9.tgz#9e3204957ada868a9a07576c5c1e74a7019eb15d" + integrity sha512-KYive1RzWSVsOTnGM0GHCUkeAz/TtNA9XRzd+WS0GndvXlmpKyNQ9n69SF46lJmNeuMtvgcG+LIDXZYhk2/kDQ== + dependencies: + commander "~2.1.0" + inquirer "~0.4.0" + memoizee "~0.2.6" + micro-engine "0.0.1" + sudo-block "~0.3.0" + superagent "~0.16.0" + +ethers@^6.13.1: + version "6.13.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.1.tgz#2b9f9c7455cde9d38b30fe6589972eb083652961" + integrity sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "18.15.13" + aes-js "4.0.0-beta.5" + tslib "2.4.0" + ws "8.17.1" + +event-emitter@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.2.2.tgz#c81e3724eb55407c5a0d5ee3299411f700f54291" + integrity sha512-kdjfxF6jYJ5m/OEe3ZNNJzbCEcagF4lNJeuhgrBSRnlitpdxICDKzCel+Z5Wbl7K9UhBN/7k2MzXBvCvSwfzzg== + dependencies: + es5-ext "~0.9.2" + +formidable@1.0.14: + version "1.0.14" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.14.tgz#2b3f4c411cbb5fdd695c44843e2a23514a43231a" + integrity sha512-aOskFHEfYwkSKSzGui5jhQ+uyLo2NTwpzhndggz2YZHlv0HkAi+zG5ZEBCL3GTvqLyr/FzX9Mvx9DueCmu2HzQ== + +has-color@~0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + integrity sha512-kaNz5OTAYYmt646Hkqw50/qyxP2vFnTVu5AQ1Zmk22Kk5+4Qx6BpO8+u7IKsML5fOsFk0ZT0AcCJNYwcvaLBvw== + +inquirer@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.4.1.tgz#6cf74eb1a347f97a1a207bea8ad1c987d0ff4b81" + integrity sha512-q+Im4T6ukccagPS1iGpVoVXA3aqYYOQGEDfGPkvGCsKPxy/WDiXX2BCJMxQqyz5AJp/sGYcnaM6YfwP2s3uxbQ== + dependencies: + async "~0.2.8" + cli-color "~0.2.2" + lodash "~2.4.1" + mute-stream "0.0.4" + readline2 "~0.1.0" + through "~2.3.4" + +lodash@~2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" + integrity sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw== + +memoizee@~0.2.5, memoizee@~0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.2.6.tgz#bb45a7ad02530082f1612671dab35219cd2e0741" + integrity sha512-0VZI0btwyGk6FSDnJGuJtso4M/eSxhVb5ID5AZNWMFFgT2LexCV18hHI764V4ELKlyfnQ5KMQ+q5H3uvFN3MLw== + dependencies: + es5-ext "~0.9.2" + event-emitter "~0.2.2" + next-tick "0.1.x" + +methods@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/methods/-/methods-0.0.1.tgz#277c90f8bef39709645a8371c51c3b6c648e068c" + integrity sha512-pB8oFfci/xcfUgM6DTxc7lbTKifPPgs3mZUOsEgaH+1TTWpmcmv3sHl+5sUHIj2X2W8aPYa2+nJealRHK+Lo6A== + +micro-engine@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/micro-engine/-/micro-engine-0.0.1.tgz#b2c59fa065f4fb2ad9c9e2a878f0a1dd980b6417" + integrity sha512-HdhhNwLLq3Kk5pwKo3x8sS8x6MZDnMq48kMkWzK10/hCJLptUWMVGAFqk3q4qFcdCW4A/qFDw6om7Vaw6FdSEQ== + dependencies: + should "~2.1.1" + +mime@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.5.tgz#9eed073022a8bf5e16c8566c6867b8832bfbfa13" + integrity sha512-QfwTOA+zRHSZXxl9Y7ue5ifKDhU1prnh0dO67Vgcl7Lcx0+79vL9A1ln0qtVur8CFSdYq5Zhnw9DDZQgwDh8Ng== + +mute-stream@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.4.tgz#a9219960a6d5d5d046597aee51252c6655f7177e" + integrity sha512-amvrY4m/7oZamehMoFi1tbwU/kXbVvRTGM2S7F+PZi3n51Jx+9AcSQ3EQsag3tR+hS2higfgOP/Kl8kri/X52A== + +next-tick@0.1.x: + version "0.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-0.1.0.tgz#1912cce8eb9b697d640fbba94f8f00dec3b94259" + integrity sha512-I44QWeGCHJTx2D3buhnljvSjmPgJua3zdPGtlCQEvA45t9kS/CaHnlVqidTzHwq8LGXhD2SMezjk4hQgP+32Lg== + +qs@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.5.tgz#294b268e4b0d4250f6dde19b3b8b34935dff14ef" + integrity sha512-n7wA/f30O3SsOw2BVkGUDzjWMw7kXvQJWKtDdgfq5HJvDoad+Jbc6osN1AQ0Iain5plo9e7Cs5fE+xR+DVkPTw== + +readline2@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/readline2/-/readline2-0.1.1.tgz#99443ba6e83b830ef3051bfd7dc241a82728d568" + integrity sha512-qs8GGG+hLGMaDOGjd+mDglDoYcHDkjIY7z5RU0/ApsGT0qypyrWskNeemUqD+UxIXiZoMYT5aLwGp4ehoyZhIg== + dependencies: + mute-stream "0.0.4" + strip-ansi "^2.0.1" + +reduce-component@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/reduce-component/-/reduce-component-1.0.1.tgz#e0c93542c574521bea13df0f9488ed82ab77c5da" + integrity sha512-y0wyCcdQul3hI3xHfIs0vg/jSbboQc/YTOAqaxjFG7At+XSexduuOqBVL9SmOLSwa/ldkbzVzdwuk9s2EKTAZg== + +should@~2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/should/-/should-2.1.1.tgz#c648b13a8b464465c2f838ea0c93f12e4ae06c6b" + integrity sha512-w9EBOxgQMNmWxqPgjaCOz21FcuYepdNjTGxw0EyIvibY1CdB4UqHjBqEvN5xj5B+tzwrndTaNFwp79yX2E1cFw== + +strip-ansi@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-2.0.1.tgz#df62c1aa94ed2f114e1d0f21fd1d50482b79a60e" + integrity sha512-2h8q2CP3EeOhDJ+jd932PRMpa3/pOJFGoF22J1U/DNbEK2gSW2DqeF46VjCXsSQXhC+k/l8/gaaRBQKL6hUPfQ== + dependencies: + ansi-regex "^1.0.0" + +sudo-block@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/sudo-block/-/sudo-block-0.3.0.tgz#aec27fbde8763ee32e3e47b8ba3c70584da7eb9c" + integrity sha512-Jv0WZsbu61SeFqeIVF6hSLnXELZafaxWLESVKt1XUW4UPMVccmE3n2ojL39OkbgjRnaYe7qHP7APJobeDxvMDw== + dependencies: + chalk "~0.3.0" + +superagent@~0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-0.16.0.tgz#f38df4a476565dffdbaa07764b81a19f0ab38a4e" + integrity sha512-/CJzCPSwbwEK1DJOllhcUHy7/4yuKiWOI5gvvyS38Dz8ZortROdYSrxJSB0f+1kPsOLentwnB61obWpRsro5+A== + dependencies: + cookiejar "1.3.0" + debug "~0.7.2" + emitter-component "1.0.0" + formidable "1.0.14" + methods "0.0.1" + mime "1.2.5" + qs "0.6.5" + reduce-component "1.0.1" + +through@~2.3.4: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +ws@8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== From ef2f604f76fbb19d912a4a54594cdf2941c1e722 Mon Sep 17 00:00:00 2001 From: mikhailUshakoff Date: Sat, 29 Jun 2024 00:41:48 +0200 Subject: [PATCH 02/12] State Root update script --- example/package.json | 3 +- example/scripts/src/hashG1Point.js | 20 ++++++++ example/scripts/updateOperatorSet.js | 21 ++------ example/scripts/updateStateRoot.js | 71 ++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 17 deletions(-) create mode 100644 example/scripts/src/hashG1Point.js create mode 100644 example/scripts/updateStateRoot.js diff --git a/example/package.json b/example/package.json index 2deedad9..d9f28eb5 100644 --- a/example/package.json +++ b/example/package.json @@ -4,7 +4,8 @@ "main": "index.js", "license": "MIT", "scripts": { - "set:update": "node scripts/updateOperatorSet.js" + "set:update": "node scripts/updateOperatorSet.js", + "state:update": "node scripts/updateStateRoot.js" }, "dependencies": { "bignumber.js": "^9.1.2", diff --git a/example/scripts/src/hashG1Point.js b/example/scripts/src/hashG1Point.js new file mode 100644 index 00000000..fc0c2da6 --- /dev/null +++ b/example/scripts/src/hashG1Point.js @@ -0,0 +1,20 @@ +const { keccak256 } = require('ethers'); +const BigNumber = require('bignumber.js'); +/* + * Hashes a G1 point +*/ +function hashG1Point(pk) { + const xValue = BigNumber(pk.X); + const yValue = BigNumber(pk.Y); + const buf = Buffer.alloc(64); + + // Store in buf + buf.write(xValue.toString(16).padStart(64, '0'), 0, 'hex'); + buf.write(yValue.toString(16).padStart(64, '0'), 32, 'hex'); + // Calculate keccak256 hash of buf + const hashedG1 = keccak256(buf); + + return BigNumber(hashedG1); +} + +module.exports = {hashG1Point} diff --git a/example/scripts/updateOperatorSet.js b/example/scripts/updateOperatorSet.js index 75d91bcd..677d3c9c 100644 --- a/example/scripts/updateOperatorSet.js +++ b/example/scripts/updateOperatorSet.js @@ -1,24 +1,13 @@ -const { ethers, keccak256 } = require('ethers'); +const { ethers } = require('ethers'); const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); const {arbContracts} = require('./contracts'); const config = require('./config.json'); const { secretSeedPhrase } = require('../secret/secret'); -const BigNumber = require('bignumber.js'); - -function hashG1Point(pk) { - const xValue = BigNumber(pk.X); - const yValue = BigNumber(pk.Y); - const buf = Buffer.alloc(64); - - // Store in buf - buf.write(xValue.toString(16).padStart(64, '0'), 0, 'hex'); - buf.write(yValue.toString(16).padStart(64, '0'), 32, 'hex'); - // Calculate keccak256 hash of buf - const hashedG1 = keccak256(buf); - - return BigNumber(hashedG1); -} +const { hashG1Point } = require('./src/hashG1Point'); +/* + * Automatically updates the operator set on Arbitrum. +*/ async function updateOperatorSet() { // Init provider const arbProvider = new ethers.JsonRpcProvider(config.arbRpcUrl, config.arbNetworkId); diff --git a/example/scripts/updateStateRoot.js b/example/scripts/updateStateRoot.js new file mode 100644 index 00000000..5ba06614 --- /dev/null +++ b/example/scripts/updateStateRoot.js @@ -0,0 +1,71 @@ +const { ethers } = require('ethers'); +const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); +const {arbContracts} = require('./contracts'); +const config = require('./config.json'); +const { secretSeedPhrase } = require('../secret/secret'); +const { hashG1Point } = require('./src/hashG1Point'); +/* + * Updates the state root on Arbitrum to the Optimism block state. +*/ +async function updateStateRoot() { + // Init provider + const arbProvider = new ethers.JsonRpcProvider(config.arbRpcUrl, config.arbNetworkId); + // Init wallet + const wallet = ethers.Wallet.fromPhrase(secretSeedPhrase); + const account = wallet.connect(arbProvider); + console.log('Wallet address:', await account.getAddress()); + // Get RegistryRollup contract + const registryRollup = new ethers.Contract(arbContracts.addresses.sfflRegistryRollup, NFFLRegistryRollupABI, account); + // Fetch data + const blockHeight = 13905480; + console.log(`${config.aggregator}/aggregation/state-root-update?rollupId=11155420&blockHeight=${blockHeight}`); + const response = await fetch(`${config.aggregator}/aggregation/state-root-update?rollupId=11155420&blockHeight=${blockHeight}`); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + const data = await response.json(); + // Build message + const nearDaTransactionId = '0x'+Buffer.from(data.Message.NearDaTransactionId).toString('hex'); + const nearDaCommitment = '0x'+Buffer.from(data.Message.NearDaCommitment).toString('hex'); + const stateRoot = '0x'+Buffer.from(data.Message.StateRoot).toString('hex'); + const message = { + rollupId: data.Message.RollupId, + blockHeight: data.Message.BlockHeight, + timestamp:data.Message.Timestamp, + nearDaTransactionId, + nearDaCommitment, + stateRoot + }; + console.log(message); + + // Sort non-signers keys + const nonSignerPubkeys = data.Aggregation.NonSignersPubkeysG1; + nonSignerPubkeys.sort((a, b) => { + const hashA = hashG1Point(a); + const hashB = hashG1Point(b); + return hashA.comparedTo(hashB); // Compare BigNumber values + }); + // Create signature info + const signatureInfo = { + nonSignerPubkeys, + apkG2: { + X: [data.Aggregation.SignersApkG2.X.A1,data.Aggregation.SignersApkG2.X.A0], + Y: [data.Aggregation.SignersApkG2.Y.A1,data.Aggregation.SignersApkG2.Y.A0] + }, + sigma: data.Aggregation.SignersAggSigG1.g1_point + } + console.log(signatureInfo) + + // Update state root + const tx = await registryRollup.updateStateRoot(message,signatureInfo); + console.log('transaction:', tx); + await tx.wait(); + console.log('State root updated'); +} + +updateStateRoot() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); +}); \ No newline at end of file From 06b87c8cc99fee35676c5060931df77fd9b37612 Mon Sep 17 00:00:00 2001 From: mikhailUshakoff Date: Sat, 29 Jun 2024 02:59:38 +0200 Subject: [PATCH 03/12] Add script to get storage value --- example/package.json | 3 +- example/scripts/config.json | 2 + example/scripts/getStorageValue.js | 97 ++++++++++++++++++++++++++++ example/scripts/updateOperatorSet.js | 2 +- example/scripts/updateStateRoot.js | 4 +- example/yarn.lock | 5 -- 6 files changed, 104 insertions(+), 9 deletions(-) create mode 100644 example/scripts/getStorageValue.js diff --git a/example/package.json b/example/package.json index d9f28eb5..b9be50b7 100644 --- a/example/package.json +++ b/example/package.json @@ -5,7 +5,8 @@ "license": "MIT", "scripts": { "set:update": "node scripts/updateOperatorSet.js", - "state:update": "node scripts/updateStateRoot.js" + "state:update": "node scripts/updateStateRoot.js", + "get": "node scripts/getStorageValue.js" }, "dependencies": { "bignumber.js": "^9.1.2", diff --git a/example/scripts/config.json b/example/scripts/config.json index 5df2e605..c3ab9ae2 100644 --- a/example/scripts/config.json +++ b/example/scripts/config.json @@ -3,5 +3,7 @@ "ethNetworkId": 17000, "arbRpcUrl": "https://sepolia-rollup.arbitrum.io/rpc", "arbNetworkId": 421614, + "opRpcUrl": "https://sepolia.optimism.io", + "opNetworkId": 11155420, "aggregator": "http://127.0.0.1:4002" } \ No newline at end of file diff --git a/example/scripts/getStorageValue.js b/example/scripts/getStorageValue.js new file mode 100644 index 00000000..1f1409be --- /dev/null +++ b/example/scripts/getStorageValue.js @@ -0,0 +1,97 @@ +const { ethers } = require('ethers'); +const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); +const {arbContracts} = require('./contracts'); +const config = require('./config.json'); + +/* + * Gets sttorage slot from Optimism. +*/ +const contractAddress = '0xB90101779CC5EB84162f72A80e44307752b778b6'; +const storageKey = '0x0000000000000000000000000000000000000000000000000000000000000000'; +const blockNumber = '0xd42e48';//'13905480'; + +const rlpAddress = '0x7922049B78c4A36341d10636d3c486904d6a0bEd'; +const rlpABI = [ + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "value", + "type": "bytes[]" + } + ], + "name": "getRLPValue", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + } +] +async function getStorageValue() { + // + // Get proof on Optimisp + // + const opProvider = new ethers.JsonRpcProvider(config.opRpcUrl, config.opNetworkId); + // Prepear params + const params = [ + contractAddress, + [storageKey], + blockNumber + ]; + // Send the RPC request + const proof = await opProvider.send("eth_getProof", params); + // Convert proof to RLP + const rlpContract = new ethers.Contract(rlpAddress, rlpABI, opProvider); + const rlpStorageProof = await rlpContract.getRLPValue(proof.storageProof[0].proof); + const rlpAccountProof = await rlpContract.getRLPValue(proof.accountProof); + + // + // Prove on Arbitrum + // + // Get RegistryRollup contract on Arbitrum + const arbProvider = new ethers.JsonRpcProvider(config.arbRpcUrl, config.arbNetworkId); + const registryRollup = new ethers.Contract(arbContracts.addresses.sfflRegistryRollup, NFFLRegistryRollupABI, arbProvider); + // Convert block number from hex + const blockHeight = parseInt(blockNumber, 16); + // Fetch data + const response = await fetch(`${config.aggregator}/aggregation/state-root-update?rollupId=11155420&blockHeight=${blockHeight}`); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + const data = await response.json(); + // Build message + const nearDaTransactionId = '0x'+Buffer.from(data.Message.NearDaTransactionId).toString('hex'); + const nearDaCommitment = '0x'+Buffer.from(data.Message.NearDaCommitment).toString('hex'); + const stateRoot = '0x'+Buffer.from(data.Message.StateRoot).toString('hex'); + const message = { + rollupId: data.Message.RollupId, + blockHeight: data.Message.BlockHeight, + timestamp:data.Message.Timestamp, + nearDaTransactionId, + nearDaCommitment, + stateRoot + }; + // Build proof parameters + const proofParams = { + target: contractAddress, + storageKey: storageKey, + stateTrieWitness: rlpAccountProof, + storageTrieWitness: rlpStorageProof + } + + // Get storage value + const tx = await registryRollup.getStorageValue(message,proofParams); + console.log(`Account ${contractAddress} storage slot ${storageKey} equals to ${tx}`); +} + +getStorageValue() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); +}); \ No newline at end of file diff --git a/example/scripts/updateOperatorSet.js b/example/scripts/updateOperatorSet.js index 677d3c9c..c10dbd56 100644 --- a/example/scripts/updateOperatorSet.js +++ b/example/scripts/updateOperatorSet.js @@ -23,7 +23,7 @@ async function updateOperatorSet() { console.log(`${config.aggregator}/aggregation/operator-set-update?id=${nextOperatorUpdateId}`); const response = await fetch(`${config.aggregator}/aggregation/operator-set-update?id=${nextOperatorUpdateId}`); if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); + throw new Error(`HTTP error! status: ${response.status}`); } const respText = await response.text(); text = respText.replace(/"Weight":\s*(\d+)/g, '"Weight": "$1"'); diff --git a/example/scripts/updateStateRoot.js b/example/scripts/updateStateRoot.js index 5ba06614..a777bd90 100644 --- a/example/scripts/updateStateRoot.js +++ b/example/scripts/updateStateRoot.js @@ -7,6 +7,7 @@ const { hashG1Point } = require('./src/hashG1Point'); /* * Updates the state root on Arbitrum to the Optimism block state. */ +const blockHeight = 13905480; async function updateStateRoot() { // Init provider const arbProvider = new ethers.JsonRpcProvider(config.arbRpcUrl, config.arbNetworkId); @@ -17,11 +18,10 @@ async function updateStateRoot() { // Get RegistryRollup contract const registryRollup = new ethers.Contract(arbContracts.addresses.sfflRegistryRollup, NFFLRegistryRollupABI, account); // Fetch data - const blockHeight = 13905480; console.log(`${config.aggregator}/aggregation/state-root-update?rollupId=11155420&blockHeight=${blockHeight}`); const response = await fetch(`${config.aggregator}/aggregation/state-root-update?rollupId=11155420&blockHeight=${blockHeight}`); if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); + throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); // Build message diff --git a/example/yarn.lock b/example/yarn.lock index d3896e5c..cb1341b5 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -75,11 +75,6 @@ cookiejar@1.3.0: resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-1.3.0.tgz#dd00b35679021e99cbd4e855b9ad041913474765" integrity sha512-U+NgxxtwHIokuL04FqKEkqsaWBDtnCQo+wvYjUCtBA56Lcg8vpV3SGtBx+RAmw92SV3VT8PwsYcCFK/cC3Dw+A== -crypto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037" - integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== - debug@~0.7.2: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" From 5976635927ab4319979c758bfe265810e95ddf14 Mon Sep 17 00:00:00 2001 From: mikhailUshakoff Date: Sun, 30 Jun 2024 22:10:37 +0200 Subject: [PATCH 04/12] Integrate rlp package for encoding --- example/package.json | 3 ++- example/scripts/getStorageValue.js | 30 ++++-------------------------- example/yarn.lock | 5 +++++ 3 files changed, 11 insertions(+), 27 deletions(-) diff --git a/example/package.json b/example/package.json index b9be50b7..3a13ff0b 100644 --- a/example/package.json +++ b/example/package.json @@ -11,6 +11,7 @@ "dependencies": { "bignumber.js": "^9.1.2", "ether": "^0.0.9", - "ethers": "^6.13.1" + "ethers": "^6.13.1", + "rlp": "^3.0.0" } } diff --git a/example/scripts/getStorageValue.js b/example/scripts/getStorageValue.js index 1f1409be..7134da3e 100644 --- a/example/scripts/getStorageValue.js +++ b/example/scripts/getStorageValue.js @@ -2,6 +2,7 @@ const { ethers } = require('ethers'); const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); const {arbContracts} = require('./contracts'); const config = require('./config.json'); +const RLP = require('rlp'); /* * Gets sttorage slot from Optimism. @@ -10,28 +11,6 @@ const contractAddress = '0xB90101779CC5EB84162f72A80e44307752b778b6'; const storageKey = '0x0000000000000000000000000000000000000000000000000000000000000000'; const blockNumber = '0xd42e48';//'13905480'; -const rlpAddress = '0x7922049B78c4A36341d10636d3c486904d6a0bEd'; -const rlpABI = [ - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "value", - "type": "bytes[]" - } - ], - "name": "getRLPValue", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - } -] async function getStorageValue() { // // Get proof on Optimisp @@ -45,10 +24,9 @@ async function getStorageValue() { ]; // Send the RPC request const proof = await opProvider.send("eth_getProof", params); - // Convert proof to RLP - const rlpContract = new ethers.Contract(rlpAddress, rlpABI, opProvider); - const rlpStorageProof = await rlpContract.getRLPValue(proof.storageProof[0].proof); - const rlpAccountProof = await rlpContract.getRLPValue(proof.accountProof); + // Encode proof to RLP + const rlpStorageProof = RLP.encode(proof.storageProof[0].proof); + const rlpAccountProof = RLP.encode(proof.accountProof); // // Prove on Arbitrum diff --git a/example/yarn.lock b/example/yarn.lock index cb1341b5..b1687fd6 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -203,6 +203,11 @@ reduce-component@1.0.1: resolved "https://registry.yarnpkg.com/reduce-component/-/reduce-component-1.0.1.tgz#e0c93542c574521bea13df0f9488ed82ab77c5da" integrity sha512-y0wyCcdQul3hI3xHfIs0vg/jSbboQc/YTOAqaxjFG7At+XSexduuOqBVL9SmOLSwa/ldkbzVzdwuk9s2EKTAZg== +rlp@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-3.0.0.tgz#5a60725ca4314a3a165feecca1836e4f2c1e2343" + integrity sha512-PD6U2PGk6Vq2spfgiWZdomLvRGDreBLxi5jv5M8EpRo3pU6VEm31KO+HFxE18Q3vgqfDrQ9pZA3FP95rkijNKw== + should@~2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/should/-/should-2.1.1.tgz#c648b13a8b464465c2f838ea0c93f12e4ae06c6b" From 247114514cff672b2ef1bee8960b2000f44a8f59 Mon Sep 17 00:00:00 2001 From: mikhailUshakoff Date: Wed, 3 Jul 2024 11:30:45 +0200 Subject: [PATCH 05/12] Add demo nffl cli tool --- {example => demo-nffl-cli}/.gitignore | 1 - demo-nffl-cli/README.md | 41 +++ .../abi/NFFLRegistryRollup.js | 0 demo-nffl-cli/getStorageValue.js | 66 +++++ demo-nffl-cli/index.js | 45 +++ demo-nffl-cli/package-lock.json | 146 ++++++++++ demo-nffl-cli/package.json | 21 ++ .../src/hashG1Point.js | 0 .../updateOperatorSet.js | 28 +- .../updateStateRoot.js | 33 +-- example/package.json | 17 -- example/scripts/abi/BLSApkRegistry.js | 3 - example/scripts/abi/IndexRegistry.js | 3 - .../scripts/abi/NFFLRegistryCoordinator.js | 3 - example/scripts/abi/OperatorStateRetriever.js | 3 - .../abi/SFFLOperatorSetUpdateRegistry.js | 3 - example/scripts/config.json | 9 - example/scripts/contracts.js | 36 --- example/scripts/getStorageValue.js | 75 ----- example/yarn.lock | 257 ------------------ 20 files changed, 339 insertions(+), 451 deletions(-) rename {example => demo-nffl-cli}/.gitignore (65%) create mode 100644 demo-nffl-cli/README.md rename {example/scripts => demo-nffl-cli}/abi/NFFLRegistryRollup.js (100%) create mode 100644 demo-nffl-cli/getStorageValue.js create mode 100755 demo-nffl-cli/index.js create mode 100644 demo-nffl-cli/package-lock.json create mode 100644 demo-nffl-cli/package.json rename {example/scripts => demo-nffl-cli}/src/hashG1Point.js (100%) rename {example/scripts => demo-nffl-cli}/updateOperatorSet.js (65%) rename {example/scripts => demo-nffl-cli}/updateStateRoot.js (61%) delete mode 100644 example/package.json delete mode 100644 example/scripts/abi/BLSApkRegistry.js delete mode 100644 example/scripts/abi/IndexRegistry.js delete mode 100644 example/scripts/abi/NFFLRegistryCoordinator.js delete mode 100644 example/scripts/abi/OperatorStateRetriever.js delete mode 100644 example/scripts/abi/SFFLOperatorSetUpdateRegistry.js delete mode 100644 example/scripts/config.json delete mode 100644 example/scripts/contracts.js delete mode 100644 example/scripts/getStorageValue.js delete mode 100644 example/yarn.lock diff --git a/example/.gitignore b/demo-nffl-cli/.gitignore similarity index 65% rename from example/.gitignore rename to demo-nffl-cli/.gitignore index 5d00522b..3c3629e6 100644 --- a/example/.gitignore +++ b/demo-nffl-cli/.gitignore @@ -1,2 +1 @@ node_modules -secret diff --git a/demo-nffl-cli/README.md b/demo-nffl-cli/README.md new file mode 100644 index 00000000..0a9542cb --- /dev/null +++ b/demo-nffl-cli/README.md @@ -0,0 +1,41 @@ +## How to build +```sh +npm install +npm link +``` + +## How to run +### getStorageValue +Get the storage value of a target contract at a specified block height from the source chain and verifies it on the destination chain +```sh +demo-nffl-cli getStorageValue\ + --srcRpcUrl https://sepolia.optimism.io\ + --contractAddress 0xB90101779CC5EB84162f72A80e44307752b778b6\ + --storageKey 0x0000000000000000000000000000000000000000000000000000000000000000\ + --blockHeight 13905480\ + --dstRpcUrl https://sepolia-rollup.arbitrum.io/rpc\ + --nfflRegistryRollup 0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0\ + --aggregator http://127.0.0.1:4002 + ``` + + ### updateStateRoot + Update the state root for a given rollup in the nfflRegistryRollup contract +```sh +demo-nffl-cli updateStateRoot\ + --rpcUrl https://sepolia-rollup.arbitrum.io/rpc\ + --rollupId 11155420\ + --blockHeight 14095733\ + --nfflRegistryRollup 0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0\ + --aggregator http://127.0.0.1:4002\ + --seedPhrase +``` + +### updateOperatorSet +Update the operator set for the nfflRegistryRollup contract +```sh +demo-nffl-cli updateOperatorSet\ + --rpcUrl https://sepolia-rollup.arbitrum.io/rpc\ + --nfflRegistryRollup 0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0\ + --aggregator http://127.0.0.1:4002\ + --seedPhrase +``` \ No newline at end of file diff --git a/example/scripts/abi/NFFLRegistryRollup.js b/demo-nffl-cli/abi/NFFLRegistryRollup.js similarity index 100% rename from example/scripts/abi/NFFLRegistryRollup.js rename to demo-nffl-cli/abi/NFFLRegistryRollup.js diff --git a/demo-nffl-cli/getStorageValue.js b/demo-nffl-cli/getStorageValue.js new file mode 100644 index 00000000..507242a7 --- /dev/null +++ b/demo-nffl-cli/getStorageValue.js @@ -0,0 +1,66 @@ +const { ethers } = require('ethers'); +const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); +//const {arbContracts} = require('./contracts'); +const RLP = require('rlp'); + +/* + * Get the storage value of a target contract at a specified block height + * from the source chain and verifies it on the destination chain +*/ +async function getStorageValue(options) { + // + // Get proof + // + const srcProvider = new ethers.JsonRpcProvider(options.srcRpcUrl); + //chainId + const { chainId } = await srcProvider.getNetwork(); + // Prepear params + const params = [ + options.contractAddress, + [options.storageKey], + `0x${Number(options.blockHeight).toString(16)}` + ]; + // Send the RPC request + const proof = await srcProvider.send("eth_getProof", params); + // Encode proof to RLP + const rlpStorageProof = RLP.encode(proof.storageProof[0].proof); + const rlpAccountProof = RLP.encode(proof.accountProof); + + // + // Prove + // + // Get RegistryRollup contract + const dstProvider = new ethers.JsonRpcProvider(options.dstRpcUrl); + const registryRollup = new ethers.Contract(options.nfflRegistryRollup, NFFLRegistryRollupABI, dstProvider); + // Fetch data + const response = await fetch(`${options.aggregator}/aggregation/state-root-update?rollupId=${chainId}&blockHeight=${options.blockHeight}`); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + const data = await response.json(); + // Build message + const nearDaTransactionId = '0x'+Buffer.from(data.Message.NearDaTransactionId).toString('hex'); + const nearDaCommitment = '0x'+Buffer.from(data.Message.NearDaCommitment).toString('hex'); + const stateRoot = '0x'+Buffer.from(data.Message.StateRoot).toString('hex'); + const message = { + rollupId: data.Message.RollupId, + blockHeight: data.Message.BlockHeight, + timestamp:data.Message.Timestamp, + nearDaTransactionId, + nearDaCommitment, + stateRoot + }; + // Build proof parameters + const proofParams = { + target: options.contractAddress, + storageKey: options.storageKey, + stateTrieWitness: rlpAccountProof, + storageTrieWitness: rlpStorageProof + } + + // Get storage value + const tx = await registryRollup.getStorageValue(message,proofParams); + console.log(`Account ${options.contractAddress} storage slot ${options.storageKey} equals to ${tx}`); +} + +module.exports = {getStorageValue} \ No newline at end of file diff --git a/demo-nffl-cli/index.js b/demo-nffl-cli/index.js new file mode 100755 index 00000000..42ff5777 --- /dev/null +++ b/demo-nffl-cli/index.js @@ -0,0 +1,45 @@ +#!/usr/bin/env node + +const { program } = require('commander'); +const pkg = require('./package.json'); +const {getStorageValue} = require('./getStorageValue'); +const {updateStateRoot} = require('./updateStateRoot'); +const {updateOperatorSet} = require('./updateOperatorSet'); + +program + .version(pkg.version) + .description('NFFL demo CLI tool'); + +program +.command('getStorageValue') +.description('Get the storage value of a target contract at a specified block height from the source chain and verifies it on the destination chain') +.requiredOption('--srcRpcUrl ', 'Source RPC URL') +.requiredOption('--contractAddress ', 'Address of the target contract') +.requiredOption('--storageKey ', 'Storage key') +.requiredOption('--blockHeight ', 'Block height') +.requiredOption('--dstRpcUrl ', 'Destination RPC URL') +.requiredOption('--nfflRegistryRollup ', 'nfflRegistryRollup contract address on destination chain') +.requiredOption('--aggregator ', 'Aggregator REST API') +.action(getStorageValue); + +program +.command('updateStateRoot') +.description('Update the state root for a given rollup in the nfflRegistryRollup contract') +.requiredOption('--rpcUrl ', 'RPC URL') +.requiredOption('--rollupId ', 'Rollup Id') +.requiredOption('--blockHeight ', 'blockHeight') +.requiredOption('--nfflRegistryRollup ', 'nfflRegistryRollup contract address on destination chain') +.requiredOption('--aggregator ', 'Aggregator REST API') +.requiredOption('--seedPhrase ', 'Seed phrase for message signing') +.action(updateStateRoot); + +program +.command('updateOperatorSet') +.description('Update the operator set for the nfflRegistryRollup contract') +.requiredOption('--rpcUrl ', 'RPC URL') +.requiredOption('--nfflRegistryRollup ', 'nfflRegistryRollup contract address on destination chain') +.requiredOption('--aggregator ', 'Aggregator REST API') +.requiredOption('--seedPhrase ', 'Seed phrase for message signing') +.action(updateOperatorSet); + +program.parse(process.argv); diff --git a/demo-nffl-cli/package-lock.json b/demo-nffl-cli/package-lock.json new file mode 100644 index 00000000..4458dcbb --- /dev/null +++ b/demo-nffl-cli/package-lock.json @@ -0,0 +1,146 @@ +{ + "name": "demo-nffl-cli", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "demo-nffl-cli", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "bignumber.js": "^9.1.2", + "commander": "^12.1.0", + "ethers": "^6.13.1", + "rlp": "^3.0.0" + }, + "bin": { + "my-cli-tool": "index.js" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "license": "MIT" + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", + "license": "MIT" + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "license": "MIT" + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/ethers": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.1.tgz", + "integrity": "sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/rlp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-3.0.0.tgz", + "integrity": "sha512-PD6U2PGk6Vq2spfgiWZdomLvRGDreBLxi5jv5M8EpRo3pU6VEm31KO+HFxE18Q3vgqfDrQ9pZA3FP95rkijNKw==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "license": "0BSD" + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/demo-nffl-cli/package.json b/demo-nffl-cli/package.json new file mode 100644 index 00000000..02f1c8b2 --- /dev/null +++ b/demo-nffl-cli/package.json @@ -0,0 +1,21 @@ +{ + "name": "demo-nffl-cli", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "bignumber.js": "^9.1.2", + "commander": "^12.1.0", + "ethers": "^6.13.1", + "rlp": "^3.0.0" + }, + "bin": { + "demo-nffl-cli": "./index.js" + } +} diff --git a/example/scripts/src/hashG1Point.js b/demo-nffl-cli/src/hashG1Point.js similarity index 100% rename from example/scripts/src/hashG1Point.js rename to demo-nffl-cli/src/hashG1Point.js diff --git a/example/scripts/updateOperatorSet.js b/demo-nffl-cli/updateOperatorSet.js similarity index 65% rename from example/scripts/updateOperatorSet.js rename to demo-nffl-cli/updateOperatorSet.js index c10dbd56..bf0fc3de 100644 --- a/example/scripts/updateOperatorSet.js +++ b/demo-nffl-cli/updateOperatorSet.js @@ -1,27 +1,24 @@ const { ethers } = require('ethers'); const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); -const {arbContracts} = require('./contracts'); -const config = require('./config.json'); -const { secretSeedPhrase } = require('../secret/secret'); const { hashG1Point } = require('./src/hashG1Point'); /* - * Automatically updates the operator set on Arbitrum. + * Automatically updates the operator set */ -async function updateOperatorSet() { +async function updateOperatorSet(options) { // Init provider - const arbProvider = new ethers.JsonRpcProvider(config.arbRpcUrl, config.arbNetworkId); + const provider = new ethers.JsonRpcProvider(options.rpcUrl); // Init wallet - const wallet = ethers.Wallet.fromPhrase(secretSeedPhrase); - const account = wallet.connect(arbProvider); + const wallet = ethers.Wallet.fromPhrase(options.seedPhrase); + const account = wallet.connect(provider); console.log('Wallet address:', await account.getAddress()); // Get next operator update id - const registryRollup = new ethers.Contract(arbContracts.addresses.sfflRegistryRollup, NFFLRegistryRollupABI, account); + const registryRollup = new ethers.Contract(options.nfflRegistryRollup, NFFLRegistryRollupABI, account); const nextOperatorUpdateId = await registryRollup.nextOperatorUpdateId(); console.log('nextOperatorUpdateId',nextOperatorUpdateId); // Fetch data - console.log(`${config.aggregator}/aggregation/operator-set-update?id=${nextOperatorUpdateId}`); - const response = await fetch(`${config.aggregator}/aggregation/operator-set-update?id=${nextOperatorUpdateId}`); + console.log(`${options.aggregator}/aggregation/operator-set-update?id=${nextOperatorUpdateId}`); + const response = await fetch(`${options.aggregator}/aggregation/operator-set-update?id=${nextOperatorUpdateId}`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } @@ -59,12 +56,7 @@ async function updateOperatorSet() { console.log('transaction:', tx); await tx.wait(); // Get next operator update id - console.log('new nextOperatorUpdateId',await registryRollup.nextOperatorUpdateId()); + console.log('New nextOperatorUpdateId',await registryRollup.nextOperatorUpdateId()); } -updateOperatorSet() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); -}); \ No newline at end of file +module.exports = {updateOperatorSet} \ No newline at end of file diff --git a/example/scripts/updateStateRoot.js b/demo-nffl-cli/updateStateRoot.js similarity index 61% rename from example/scripts/updateStateRoot.js rename to demo-nffl-cli/updateStateRoot.js index a777bd90..d9f22fb8 100644 --- a/example/scripts/updateStateRoot.js +++ b/demo-nffl-cli/updateStateRoot.js @@ -1,25 +1,21 @@ const { ethers } = require('ethers'); const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); -const {arbContracts} = require('./contracts'); -const config = require('./config.json'); -const { secretSeedPhrase } = require('../secret/secret'); const { hashG1Point } = require('./src/hashG1Point'); /* - * Updates the state root on Arbitrum to the Optimism block state. + * Updates the state root. */ -const blockHeight = 13905480; -async function updateStateRoot() { +async function updateStateRoot(options) { // Init provider - const arbProvider = new ethers.JsonRpcProvider(config.arbRpcUrl, config.arbNetworkId); + const provider = new ethers.JsonRpcProvider(options.rpcUrl); // Init wallet - const wallet = ethers.Wallet.fromPhrase(secretSeedPhrase); - const account = wallet.connect(arbProvider); + const wallet = ethers.Wallet.fromPhrase(options.seedPhrase); + const account = wallet.connect(provider); console.log('Wallet address:', await account.getAddress()); // Get RegistryRollup contract - const registryRollup = new ethers.Contract(arbContracts.addresses.sfflRegistryRollup, NFFLRegistryRollupABI, account); + const registryRollup = new ethers.Contract(options.nfflRegistryRollup, NFFLRegistryRollupABI, account); // Fetch data - console.log(`${config.aggregator}/aggregation/state-root-update?rollupId=11155420&blockHeight=${blockHeight}`); - const response = await fetch(`${config.aggregator}/aggregation/state-root-update?rollupId=11155420&blockHeight=${blockHeight}`); + console.log(`${options.aggregator}/aggregation/state-root-update?rollupId=${options.rollupId}&blockHeight=${options.blockHeight}`); + const response = await fetch(`${options.aggregator}/aggregation/state-root-update?rollupId=${options.rollupId}&blockHeight=${options.blockHeight}`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } @@ -36,14 +32,12 @@ async function updateStateRoot() { nearDaCommitment, stateRoot }; - console.log(message); - // Sort non-signers keys const nonSignerPubkeys = data.Aggregation.NonSignersPubkeysG1; nonSignerPubkeys.sort((a, b) => { const hashA = hashG1Point(a); const hashB = hashG1Point(b); - return hashA.comparedTo(hashB); // Compare BigNumber values + return hashA.comparedTo(hashB); }); // Create signature info const signatureInfo = { @@ -54,8 +48,6 @@ async function updateStateRoot() { }, sigma: data.Aggregation.SignersAggSigG1.g1_point } - console.log(signatureInfo) - // Update state root const tx = await registryRollup.updateStateRoot(message,signatureInfo); console.log('transaction:', tx); @@ -63,9 +55,4 @@ async function updateStateRoot() { console.log('State root updated'); } -updateStateRoot() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); -}); \ No newline at end of file +module.exports = {updateStateRoot} diff --git a/example/package.json b/example/package.json deleted file mode 100644 index 3a13ff0b..00000000 --- a/example/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "nffl-demo", - "version": "1.0.0", - "main": "index.js", - "license": "MIT", - "scripts": { - "set:update": "node scripts/updateOperatorSet.js", - "state:update": "node scripts/updateStateRoot.js", - "get": "node scripts/getStorageValue.js" - }, - "dependencies": { - "bignumber.js": "^9.1.2", - "ether": "^0.0.9", - "ethers": "^6.13.1", - "rlp": "^3.0.0" - } -} diff --git a/example/scripts/abi/BLSApkRegistry.js b/example/scripts/abi/BLSApkRegistry.js deleted file mode 100644 index 9f056b37..00000000 --- a/example/scripts/abi/BLSApkRegistry.js +++ /dev/null @@ -1,3 +0,0 @@ -const BLSApkRegistryABI = [{"inputs":[{"internalType":"contract IRegistryCoordinator","name":"_registryCoordinator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"indexed":false,"internalType":"struct BN254.G1Point","name":"pubkeyG1","type":"tuple"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"indexed":false,"internalType":"struct BN254.G2Point","name":"pubkeyG2","type":"tuple"}],"name":"NewPubkeyRegistration","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"OperatorAddedToQuorums","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"OperatorRemovedFromQuorums","type":"event"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"apkHistory","outputs":[{"internalType":"bytes24","name":"apkHash","type":"bytes24"},{"internalType":"uint32","name":"updateBlockNumber","type":"uint32"},{"internalType":"uint32","name":"nextUpdateBlockNumber","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"currentApk","outputs":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"deregisterOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"getApk","outputs":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"uint32","name":"blockNumber","type":"uint32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getApkHashAtBlockNumberAndIndex","outputs":[{"internalType":"bytes24","name":"","type":"bytes24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"getApkHistoryLength","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"quorumNumbers","type":"bytes"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getApkIndicesAtBlockNumber","outputs":[{"internalType":"uint32[]","name":"","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getApkUpdateAtIndex","outputs":[{"components":[{"internalType":"bytes24","name":"apkHash","type":"bytes24"},{"internalType":"uint32","name":"updateBlockNumber","type":"uint32"},{"internalType":"uint32","name":"nextUpdateBlockNumber","type":"uint32"}],"internalType":"struct IBLSApkRegistry.ApkUpdate","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"pubkeyHash","type":"bytes32"}],"name":"getOperatorFromPubkeyHash","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"getOperatorId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"getRegisteredPubkey","outputs":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"","type":"tuple"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"initializeQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"operatorToPubkey","outputs":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"operatorToPubkeyHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"pubkeyHashToOperator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyRegistrationSignature","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyG1","type":"tuple"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct BN254.G2Point","name":"pubkeyG2","type":"tuple"}],"internalType":"struct IBLSApkRegistry.PubkeyRegistrationParams","name":"params","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyRegistrationMessageHash","type":"tuple"}],"name":"registerBLSPublicKey","outputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"registerOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"registryCoordinator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]; - -module.exports = {BLSApkRegistryABI}; diff --git a/example/scripts/abi/IndexRegistry.js b/example/scripts/abi/IndexRegistry.js deleted file mode 100644 index f78facdd..00000000 --- a/example/scripts/abi/IndexRegistry.js +++ /dev/null @@ -1,3 +0,0 @@ -const IndexRegistryABI = [{"inputs":[{"internalType":"contract IRegistryCoordinator","name":"_registryCoordinator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"indexed":false,"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"indexed":false,"internalType":"uint32","name":"newOperatorIndex","type":"uint32"}],"name":"QuorumIndexUpdate","type":"event"},{"inputs":[],"name":"OPERATOR_DOES_NOT_EXIST_ID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"currentOperatorIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"deregisterOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"uint32","name":"operatorIndex","type":"uint32"}],"name":"getLatestOperatorUpdate","outputs":[{"components":[{"internalType":"uint32","name":"fromBlockNumber","type":"uint32"},{"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"internalType":"struct IIndexRegistry.OperatorUpdate","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"getLatestQuorumUpdate","outputs":[{"components":[{"internalType":"uint32","name":"fromBlockNumber","type":"uint32"},{"internalType":"uint32","name":"numOperators","type":"uint32"}],"internalType":"struct IIndexRegistry.QuorumUpdate","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"uint32","name":"blockNumber","type":"uint32"}],"name":"getOperatorListAtBlockNumber","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"uint32","name":"operatorIndex","type":"uint32"},{"internalType":"uint32","name":"arrayIndex","type":"uint32"}],"name":"getOperatorUpdateAtIndex","outputs":[{"components":[{"internalType":"uint32","name":"fromBlockNumber","type":"uint32"},{"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"internalType":"struct IIndexRegistry.OperatorUpdate","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"uint32","name":"quorumIndex","type":"uint32"}],"name":"getQuorumUpdateAtIndex","outputs":[{"components":[{"internalType":"uint32","name":"fromBlockNumber","type":"uint32"},{"internalType":"uint32","name":"numOperators","type":"uint32"}],"internalType":"struct IIndexRegistry.QuorumUpdate","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"initializeQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"registerOperator","outputs":[{"internalType":"uint32[]","name":"","type":"uint32[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"registryCoordinator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"totalOperatorsForQuorum","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}]; - -module.exports = {IndexRegistryABI}; \ No newline at end of file diff --git a/example/scripts/abi/NFFLRegistryCoordinator.js b/example/scripts/abi/NFFLRegistryCoordinator.js deleted file mode 100644 index c0726f17..00000000 --- a/example/scripts/abi/NFFLRegistryCoordinator.js +++ /dev/null @@ -1,3 +0,0 @@ -const NFFLRegistryCoordinatorABI = [{"inputs":[{"internalType":"contract IServiceManager","name":"_serviceManager","type":"address"},{"internalType":"contract IStakeRegistry","name":"_stakeRegistry","type":"address"},{"internalType":"contract IBLSApkRegistry","name":"_blsApkRegistry","type":"address"},{"internalType":"contract IIndexRegistry","name":"_indexRegistry","type":"address"},{"internalType":"contract SFFLOperatorSetUpdateRegistry","name":"_operatorSetUpdateRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"prevChurnApprover","type":"address"},{"indexed":false,"internalType":"address","name":"newChurnApprover","type":"address"}],"name":"ChurnApproverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"prevEjector","type":"address"},{"indexed":false,"internalType":"address","name":"newEjector","type":"address"}],"name":"EjectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"name":"OperatorDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"name":"OperatorRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"components":[{"internalType":"uint32","name":"maxOperatorCount","type":"uint32"},{"internalType":"uint16","name":"kickBIPsOfOperatorStake","type":"uint16"},{"internalType":"uint16","name":"kickBIPsOfTotalStake","type":"uint16"}],"indexed":false,"internalType":"struct IRegistryCoordinator.OperatorSetParam","name":"operatorSetParams","type":"tuple"}],"name":"OperatorSetParamsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"indexed":false,"internalType":"string","name":"socket","type":"string"}],"name":"OperatorSocketUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IPauserRegistry","name":"pauserRegistry","type":"address"},{"indexed":false,"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address"}],"name":"PauserRegistrySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"blocknumber","type":"uint256"}],"name":"QuorumBlockNumberUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"OPERATOR_CHURN_APPROVAL_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBKEY_REGISTRATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blsApkRegistry","outputs":[{"internalType":"contract IBLSApkRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"registeringOperatorId","type":"bytes32"},{"components":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"address","name":"operator","type":"address"}],"internalType":"struct IRegistryCoordinator.OperatorKickParam[]","name":"operatorKickParams","type":"tuple[]"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}],"name":"calculateOperatorChurnApprovalDigestHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"churnApprover","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"maxOperatorCount","type":"uint32"},{"internalType":"uint16","name":"kickBIPsOfOperatorStake","type":"uint16"},{"internalType":"uint16","name":"kickBIPsOfTotalStake","type":"uint16"}],"internalType":"struct IRegistryCoordinator.OperatorSetParam","name":"operatorSetParams","type":"tuple"},{"internalType":"uint96","name":"minimumStake","type":"uint96"},{"components":[{"internalType":"contract IStrategy","name":"strategy","type":"address"},{"internalType":"uint96","name":"multiplier","type":"uint96"}],"internalType":"struct IStakeRegistry.StrategyParams[]","name":"strategyParams","type":"tuple[]"}],"name":"createQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"deregisterOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"ejectOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ejector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"name":"getCurrentQuorumBitmap","outputs":[{"internalType":"uint192","name":"","type":"uint192"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"getOperator","outputs":[{"components":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"enum IRegistryCoordinator.OperatorStatus","name":"status","type":"uint8"}],"internalType":"struct IRegistryCoordinator.OperatorInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"name":"getOperatorFromId","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"getOperatorId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"}],"name":"getOperatorSetParams","outputs":[{"components":[{"internalType":"uint32","name":"maxOperatorCount","type":"uint32"},{"internalType":"uint16","name":"kickBIPsOfOperatorStake","type":"uint16"},{"internalType":"uint16","name":"kickBIPsOfTotalStake","type":"uint16"}],"internalType":"struct IRegistryCoordinator.OperatorSetParam","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"getOperatorStatus","outputs":[{"internalType":"enum IRegistryCoordinator.OperatorStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"uint32","name":"blockNumber","type":"uint32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getQuorumBitmapAtBlockNumberByIndex","outputs":[{"internalType":"uint192","name":"","type":"uint192"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"}],"name":"getQuorumBitmapHistoryLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"blockNumber","type":"uint32"},{"internalType":"bytes32[]","name":"operatorIds","type":"bytes32[]"}],"name":"getQuorumBitmapIndicesAtBlockNumber","outputs":[{"internalType":"uint32[]","name":"","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getQuorumBitmapUpdateByIndex","outputs":[{"components":[{"internalType":"uint32","name":"updateBlockNumber","type":"uint32"},{"internalType":"uint32","name":"nextUpdateBlockNumber","type":"uint32"},{"internalType":"uint192","name":"quorumBitmap","type":"uint192"}],"internalType":"struct IRegistryCoordinator.QuorumBitmapUpdate","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"indexRegistry","outputs":[{"internalType":"contract IIndexRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address","name":"_churnApprover","type":"address"},{"internalType":"address","name":"_ejector","type":"address"},{"internalType":"contract IPauserRegistry","name":"_pauserRegistry","type":"address"},{"internalType":"uint256","name":"_initialPausedStatus","type":"uint256"},{"components":[{"internalType":"uint32","name":"maxOperatorCount","type":"uint32"},{"internalType":"uint16","name":"kickBIPsOfOperatorStake","type":"uint16"},{"internalType":"uint16","name":"kickBIPsOfTotalStake","type":"uint16"}],"internalType":"struct IRegistryCoordinator.OperatorSetParam[]","name":"_operatorSetParams","type":"tuple[]"},{"internalType":"uint96[]","name":"_minimumStakes","type":"uint96[]"},{"components":[{"internalType":"contract IStrategy","name":"strategy","type":"address"},{"internalType":"uint96","name":"multiplier","type":"uint96"}],"internalType":"struct IStakeRegistry.StrategyParams[][]","name":"_strategyParams","type":"tuple[][]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"isChurnApproverSaltUsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numRegistries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operatorSetUpdateRegistry","outputs":[{"internalType":"contract SFFLOperatorSetUpdateRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauserRegistry","outputs":[{"internalType":"contract IPauserRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"pubkeyRegistrationMessageHash","outputs":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quorumCount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"quorumUpdateBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"quorumNumbers","type":"bytes"},{"internalType":"string","name":"socket","type":"string"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyRegistrationSignature","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyG1","type":"tuple"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct BN254.G2Point","name":"pubkeyG2","type":"tuple"}],"internalType":"struct IBLSApkRegistry.PubkeyRegistrationParams","name":"params","type":"tuple"},{"components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}],"internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","name":"operatorSignature","type":"tuple"}],"name":"registerOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"quorumNumbers","type":"bytes"},{"internalType":"string","name":"socket","type":"string"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyRegistrationSignature","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkeyG1","type":"tuple"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct BN254.G2Point","name":"pubkeyG2","type":"tuple"}],"internalType":"struct IBLSApkRegistry.PubkeyRegistrationParams","name":"params","type":"tuple"},{"components":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"internalType":"address","name":"operator","type":"address"}],"internalType":"struct IRegistryCoordinator.OperatorKickParam[]","name":"operatorKickParams","type":"tuple[]"},{"components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}],"internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","name":"churnApproverSignature","type":"tuple"},{"components":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"expiry","type":"uint256"}],"internalType":"struct ISignatureUtils.SignatureWithSaltAndExpiry","name":"operatorSignature","type":"tuple"}],"name":"registerOperatorWithChurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"registries","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"serviceManager","outputs":[{"internalType":"contract IServiceManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_churnApprover","type":"address"}],"name":"setChurnApprover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ejector","type":"address"}],"name":"setEjector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"quorumNumber","type":"uint8"},{"components":[{"internalType":"uint32","name":"maxOperatorCount","type":"uint32"},{"internalType":"uint16","name":"kickBIPsOfOperatorStake","type":"uint16"},{"internalType":"uint16","name":"kickBIPsOfTotalStake","type":"uint16"}],"internalType":"struct IRegistryCoordinator.OperatorSetParam","name":"operatorSetParams","type":"tuple"}],"name":"setOperatorSetParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address"}],"name":"setPauserRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeRegistry","outputs":[{"internalType":"contract IStakeRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"operators","type":"address[]"}],"name":"updateOperators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[][]","name":"operatorsPerQuorum","type":"address[][]"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"}],"name":"updateOperatorsForQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"socket","type":"string"}],"name":"updateSocket","outputs":[],"stateMutability":"nonpayable","type":"function"}]; - -module.exports = {NFFLRegistryCoordinatorABI}; \ No newline at end of file diff --git a/example/scripts/abi/OperatorStateRetriever.js b/example/scripts/abi/OperatorStateRetriever.js deleted file mode 100644 index 383ea808..00000000 --- a/example/scripts/abi/OperatorStateRetriever.js +++ /dev/null @@ -1,3 +0,0 @@ -const OperatorStateRetrieverABI = [{"inputs":[{"internalType":"contract IRegistryCoordinator","name":"registryCoordinator","type":"address"},{"internalType":"uint32","name":"referenceBlockNumber","type":"uint32"},{"internalType":"bytes","name":"quorumNumbers","type":"bytes"},{"internalType":"bytes32[]","name":"nonSignerOperatorIds","type":"bytes32[]"}],"name":"getCheckSignaturesIndices","outputs":[{"components":[{"internalType":"uint32[]","name":"nonSignerQuorumBitmapIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"quorumApkIndices","type":"uint32[]"},{"internalType":"uint32[]","name":"totalStakeIndices","type":"uint32[]"},{"internalType":"uint32[][]","name":"nonSignerStakeIndices","type":"uint32[][]"}],"internalType":"struct OperatorStateRetriever.CheckSignaturesIndices","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IRegistryCoordinator","name":"registryCoordinator","type":"address"},{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"uint32","name":"blockNumber","type":"uint32"}],"name":"getOperatorState","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bytes32","name":"operatorId","type":"bytes32"},{"internalType":"uint96","name":"stake","type":"uint96"}],"internalType":"struct OperatorStateRetriever.Operator[][]","name":"","type":"tuple[][]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IRegistryCoordinator","name":"registryCoordinator","type":"address"},{"internalType":"bytes32[]","name":"operatorIds","type":"bytes32[]"},{"internalType":"uint32","name":"blockNumber","type":"uint32"}],"name":"getQuorumBitmapsAtBlockNumber","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]; - -module.exports = {OperatorStateRetrieverABI}; \ No newline at end of file diff --git a/example/scripts/abi/SFFLOperatorSetUpdateRegistry.js b/example/scripts/abi/SFFLOperatorSetUpdateRegistry.js deleted file mode 100644 index 080d672a..00000000 --- a/example/scripts/abi/SFFLOperatorSetUpdateRegistry.js +++ /dev/null @@ -1,3 +0,0 @@ -const SFFLOperatorSetUpdateRegistryABI = [{"inputs":[{"internalType":"contract IRegistryCoordinator","name":"_registryCoordinator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint64","name":"id","type":"uint64"},{"indexed":true,"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"OperatorSetUpdatedAtBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"isWhitelisted","type":"bool"}],"name":"OperatorWhitelistingUpdated","type":"event"},{"inputs":[{"internalType":"uint64","name":"operatorSetUpdateId","type":"uint64"}],"name":"getOperatorSetUpdate","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple"},{"internalType":"uint128","name":"weight","type":"uint128"}],"internalType":"struct RollupOperators.Operator[]","name":"previousOperatorSet","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple"},{"internalType":"uint128","name":"weight","type":"uint128"}],"internalType":"struct RollupOperators.Operator[]","name":"newOperatorSet","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOperatorSetUpdateCount","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOperatorWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"operatorSetUpdateIdToBlockNumber","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recordOperatorSetUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"registryCoordinator","outputs":[{"internalType":"contract IRegistryCoordinator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"isWhitelisted","type":"bool"}],"name":"setOperatorWhitelisting","outputs":[],"stateMutability":"nonpayable","type":"function"}]; - -module.exports = {SFFLOperatorSetUpdateRegistryABI}; \ No newline at end of file diff --git a/example/scripts/config.json b/example/scripts/config.json deleted file mode 100644 index c3ab9ae2..00000000 --- a/example/scripts/config.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "ethRpcUrl": "https://api.tatum.io/v3/blockchain/node/ethereum-holesky", - "ethNetworkId": 17000, - "arbRpcUrl": "https://sepolia-rollup.arbitrum.io/rpc", - "arbNetworkId": 421614, - "opRpcUrl": "https://sepolia.optimism.io", - "opNetworkId": 11155420, - "aggregator": "http://127.0.0.1:4002" -} \ No newline at end of file diff --git a/example/scripts/contracts.js b/example/scripts/contracts.js deleted file mode 100644 index a3e21159..00000000 --- a/example/scripts/contracts.js +++ /dev/null @@ -1,36 +0,0 @@ -const contracts = { - "blsApkRegistry": "0x8919867ca8E87052EB0C8c247B557b8cE3809fFB", - "blsApkRegistryImpl": "0x6c8A74b096D2b6F79196DD18c3dB0906018AE722", - "deployer": "0x7876e514e2Ab4c54A7E26735A512407904FF1fD8", - "indexRegistry": "0xacF92095128ed66750cA1fedf11A67Fa040e0832", - "indexRegistryImpl": "0x60440D7a2C97A510E9b4b2644C46cAfE32a53363", - "operatorSetUpdateRegistry": "0x36943cD9E926fbA4DF695650d81E945bDF3d734c", - "operatorSetUpdateRegistryImpl": "0xD36f3E2eAd270C0937e3183A0B4Be3ff662Ba05a", - "operatorStateRetriever": "0xb4fd76c77e874FadD9Ec7D696FC6179Eb0ab78b1", - "registryCoordinator": "0x254cfb4b4306CA87494d78C9d6Ce06D61dB3d464", - "registryCoordinatorImpl": "0x6529B56F6fBbf10489536A579BAC82D62a6F5C11", - "sfflPauserReg": "0xd1d9a8f648186ABB130de1e708a68A37754aBEE1", - "sfflProxyAdmin": "0xd346c6b84aF715AD7633eFE68d9Ce9e5e439de90", - "sfflServiceManager": "0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0", - "sfflServiceManagerImpl": "0x275b03dE7f1424C0271B9dA06D8d55AA5AA46071", - "sfflTaskManager": "0xFE7F2C8a6da37574aD64c51156473C2b139F5559", - "sfflTaskManagerImpl": "0xee322Ae781c9969dcF765f744a3eAD79CC5f88A6", - "stakeRegistry": "0x325cfd06D82E0df7A1d3f13fdF527F76663B1A40", - "stakeRegistryImpl": "0xBE29fa93C3CaEabFCD0EdBF9E7147eAc08AdD93f" - } - - const arbContracts = { - "addresses": { - "deployer": "0x7876e514e2Ab4c54A7E26735A512407904FF1fD8", - "sfflPauserReg": "0xd346c6b84aF715AD7633eFE68d9Ce9e5e439de90", - "sfflProxyAdmin": "0x1456134dEcb5767b40f45744a701a1a1FcB23AA8", - "sfflRegistryRollup": "0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0", - "sfflRegistryRollupImpl": "0x36943cD9E926fbA4DF695650d81E945bDF3d734c" - }, - "chainInfo": { - "chainId": 421614, - "deploymentBlock": 39603626 - } - } - - module.exports = {contracts,arbContracts} \ No newline at end of file diff --git a/example/scripts/getStorageValue.js b/example/scripts/getStorageValue.js deleted file mode 100644 index 7134da3e..00000000 --- a/example/scripts/getStorageValue.js +++ /dev/null @@ -1,75 +0,0 @@ -const { ethers } = require('ethers'); -const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); -const {arbContracts} = require('./contracts'); -const config = require('./config.json'); -const RLP = require('rlp'); - -/* - * Gets sttorage slot from Optimism. -*/ -const contractAddress = '0xB90101779CC5EB84162f72A80e44307752b778b6'; -const storageKey = '0x0000000000000000000000000000000000000000000000000000000000000000'; -const blockNumber = '0xd42e48';//'13905480'; - -async function getStorageValue() { - // - // Get proof on Optimisp - // - const opProvider = new ethers.JsonRpcProvider(config.opRpcUrl, config.opNetworkId); - // Prepear params - const params = [ - contractAddress, - [storageKey], - blockNumber - ]; - // Send the RPC request - const proof = await opProvider.send("eth_getProof", params); - // Encode proof to RLP - const rlpStorageProof = RLP.encode(proof.storageProof[0].proof); - const rlpAccountProof = RLP.encode(proof.accountProof); - - // - // Prove on Arbitrum - // - // Get RegistryRollup contract on Arbitrum - const arbProvider = new ethers.JsonRpcProvider(config.arbRpcUrl, config.arbNetworkId); - const registryRollup = new ethers.Contract(arbContracts.addresses.sfflRegistryRollup, NFFLRegistryRollupABI, arbProvider); - // Convert block number from hex - const blockHeight = parseInt(blockNumber, 16); - // Fetch data - const response = await fetch(`${config.aggregator}/aggregation/state-root-update?rollupId=11155420&blockHeight=${blockHeight}`); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - const data = await response.json(); - // Build message - const nearDaTransactionId = '0x'+Buffer.from(data.Message.NearDaTransactionId).toString('hex'); - const nearDaCommitment = '0x'+Buffer.from(data.Message.NearDaCommitment).toString('hex'); - const stateRoot = '0x'+Buffer.from(data.Message.StateRoot).toString('hex'); - const message = { - rollupId: data.Message.RollupId, - blockHeight: data.Message.BlockHeight, - timestamp:data.Message.Timestamp, - nearDaTransactionId, - nearDaCommitment, - stateRoot - }; - // Build proof parameters - const proofParams = { - target: contractAddress, - storageKey: storageKey, - stateTrieWitness: rlpAccountProof, - storageTrieWitness: rlpStorageProof - } - - // Get storage value - const tx = await registryRollup.getStorageValue(message,proofParams); - console.log(`Account ${contractAddress} storage slot ${storageKey} equals to ${tx}`); -} - -getStorageValue() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); -}); \ No newline at end of file diff --git a/example/yarn.lock b/example/yarn.lock deleted file mode 100644 index b1687fd6..00000000 --- a/example/yarn.lock +++ /dev/null @@ -1,257 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@adraffy/ens-normalize@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" - integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== - -"@noble/curves@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/hashes@1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - -"@types/node@18.15.13": - version "18.15.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" - integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== - -aes-js@4.0.0-beta.5: - version "4.0.0-beta.5" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" - integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== - -ansi-regex@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-1.1.1.tgz#41c847194646375e6a1a5d10c3ca054ef9fc980d" - integrity sha512-q5i8bFLg2wDfsuR56c1NzlJFPzVD+9mxhDrhqOGigEFa87OZHlF+9dWeGWzVTP/0ECiA/JUGzfzRr2t3eYORRw== - -ansi-styles@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-0.2.0.tgz#359ab4b15dcd64ba6d74734b72c36360a9af2c19" - integrity sha512-YyQBeLj0juxUC9uUXRpQ1ZAzPT1dnsn5vVeJLHYFq4Ct1p0rymUSyvckKCXCH9I0bh3jWDIETA5nXIaZVKlDyA== - -async@~0.2.8: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - integrity sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ== - -bignumber.js@^9.1.2: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - -chalk@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.3.0.tgz#1c98437737f1199ebcc1d4c48fd41b9f9c8e8f23" - integrity sha512-OcfgS16PHpCu2Q4TNMtk0aZNx8PyeNiiB+6AgGH91fhT9hJ3v6pIIJ3lxlaOEDHlTm8t3wDe6bDGamvtIokQTg== - dependencies: - ansi-styles "~0.2.0" - has-color "~0.1.0" - -cli-color@~0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-0.2.3.tgz#0a25ceae5a6a1602be7f77d28563c36700274e88" - integrity sha512-f4DFHXdoe2rGMwuVO+DTBM6CkSt4m9R4a0vjnq5CJkSCKaXbrHbslCmyjG6cz/o50HP2wkjO3G1mXvc7G3V1LQ== - dependencies: - es5-ext "~0.9.2" - memoizee "~0.2.5" - -commander@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" - integrity sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ== - -cookiejar@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-1.3.0.tgz#dd00b35679021e99cbd4e855b9ad041913474765" - integrity sha512-U+NgxxtwHIokuL04FqKEkqsaWBDtnCQo+wvYjUCtBA56Lcg8vpV3SGtBx+RAmw92SV3VT8PwsYcCFK/cC3Dw+A== - -debug@~0.7.2: - version "0.7.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" - integrity sha512-EohAb3+DSHSGx8carOSKJe8G0ayV5/i609OD0J2orCkuyae7SyZSz2aoLmQF2s0Pj5gITDebwPH7GFBlqOUQ1Q== - -emitter-component@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.0.0.tgz#f04dd18fc3dc3e9a74cbc0f310b088666e4c016f" - integrity sha512-GZrLdp4Z7OERecoYQYElVVqf6/gcbGUs8nvaE+nmu2dGy453lLgGyPLNX9DdSyojdMqI86fCT9XQqsWJymciEw== - -es5-ext@~0.9.2: - version "0.9.2" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.9.2.tgz#d2e309d1f223b0718648835acf5b8823a8061f8a" - integrity sha512-wP3OSxZ0L/qK76t6qxPR8gWr2o5F4SzNF9qS5F/mOfVY3Ezcg07v6hSkETDmoekXIzn8xhQbHpp+tVlOE+qOAg== - -ether@^0.0.9: - version "0.0.9" - resolved "https://registry.yarnpkg.com/ether/-/ether-0.0.9.tgz#9e3204957ada868a9a07576c5c1e74a7019eb15d" - integrity sha512-KYive1RzWSVsOTnGM0GHCUkeAz/TtNA9XRzd+WS0GndvXlmpKyNQ9n69SF46lJmNeuMtvgcG+LIDXZYhk2/kDQ== - dependencies: - commander "~2.1.0" - inquirer "~0.4.0" - memoizee "~0.2.6" - micro-engine "0.0.1" - sudo-block "~0.3.0" - superagent "~0.16.0" - -ethers@^6.13.1: - version "6.13.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.1.tgz#2b9f9c7455cde9d38b30fe6589972eb083652961" - integrity sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A== - dependencies: - "@adraffy/ens-normalize" "1.10.1" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@types/node" "18.15.13" - aes-js "4.0.0-beta.5" - tslib "2.4.0" - ws "8.17.1" - -event-emitter@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.2.2.tgz#c81e3724eb55407c5a0d5ee3299411f700f54291" - integrity sha512-kdjfxF6jYJ5m/OEe3ZNNJzbCEcagF4lNJeuhgrBSRnlitpdxICDKzCel+Z5Wbl7K9UhBN/7k2MzXBvCvSwfzzg== - dependencies: - es5-ext "~0.9.2" - -formidable@1.0.14: - version "1.0.14" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.14.tgz#2b3f4c411cbb5fdd695c44843e2a23514a43231a" - integrity sha512-aOskFHEfYwkSKSzGui5jhQ+uyLo2NTwpzhndggz2YZHlv0HkAi+zG5ZEBCL3GTvqLyr/FzX9Mvx9DueCmu2HzQ== - -has-color@~0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - integrity sha512-kaNz5OTAYYmt646Hkqw50/qyxP2vFnTVu5AQ1Zmk22Kk5+4Qx6BpO8+u7IKsML5fOsFk0ZT0AcCJNYwcvaLBvw== - -inquirer@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.4.1.tgz#6cf74eb1a347f97a1a207bea8ad1c987d0ff4b81" - integrity sha512-q+Im4T6ukccagPS1iGpVoVXA3aqYYOQGEDfGPkvGCsKPxy/WDiXX2BCJMxQqyz5AJp/sGYcnaM6YfwP2s3uxbQ== - dependencies: - async "~0.2.8" - cli-color "~0.2.2" - lodash "~2.4.1" - mute-stream "0.0.4" - readline2 "~0.1.0" - through "~2.3.4" - -lodash@~2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" - integrity sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw== - -memoizee@~0.2.5, memoizee@~0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.2.6.tgz#bb45a7ad02530082f1612671dab35219cd2e0741" - integrity sha512-0VZI0btwyGk6FSDnJGuJtso4M/eSxhVb5ID5AZNWMFFgT2LexCV18hHI764V4ELKlyfnQ5KMQ+q5H3uvFN3MLw== - dependencies: - es5-ext "~0.9.2" - event-emitter "~0.2.2" - next-tick "0.1.x" - -methods@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/methods/-/methods-0.0.1.tgz#277c90f8bef39709645a8371c51c3b6c648e068c" - integrity sha512-pB8oFfci/xcfUgM6DTxc7lbTKifPPgs3mZUOsEgaH+1TTWpmcmv3sHl+5sUHIj2X2W8aPYa2+nJealRHK+Lo6A== - -micro-engine@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/micro-engine/-/micro-engine-0.0.1.tgz#b2c59fa065f4fb2ad9c9e2a878f0a1dd980b6417" - integrity sha512-HdhhNwLLq3Kk5pwKo3x8sS8x6MZDnMq48kMkWzK10/hCJLptUWMVGAFqk3q4qFcdCW4A/qFDw6om7Vaw6FdSEQ== - dependencies: - should "~2.1.1" - -mime@1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.5.tgz#9eed073022a8bf5e16c8566c6867b8832bfbfa13" - integrity sha512-QfwTOA+zRHSZXxl9Y7ue5ifKDhU1prnh0dO67Vgcl7Lcx0+79vL9A1ln0qtVur8CFSdYq5Zhnw9DDZQgwDh8Ng== - -mute-stream@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.4.tgz#a9219960a6d5d5d046597aee51252c6655f7177e" - integrity sha512-amvrY4m/7oZamehMoFi1tbwU/kXbVvRTGM2S7F+PZi3n51Jx+9AcSQ3EQsag3tR+hS2higfgOP/Kl8kri/X52A== - -next-tick@0.1.x: - version "0.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-0.1.0.tgz#1912cce8eb9b697d640fbba94f8f00dec3b94259" - integrity sha512-I44QWeGCHJTx2D3buhnljvSjmPgJua3zdPGtlCQEvA45t9kS/CaHnlVqidTzHwq8LGXhD2SMezjk4hQgP+32Lg== - -qs@0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.5.tgz#294b268e4b0d4250f6dde19b3b8b34935dff14ef" - integrity sha512-n7wA/f30O3SsOw2BVkGUDzjWMw7kXvQJWKtDdgfq5HJvDoad+Jbc6osN1AQ0Iain5plo9e7Cs5fE+xR+DVkPTw== - -readline2@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-0.1.1.tgz#99443ba6e83b830ef3051bfd7dc241a82728d568" - integrity sha512-qs8GGG+hLGMaDOGjd+mDglDoYcHDkjIY7z5RU0/ApsGT0qypyrWskNeemUqD+UxIXiZoMYT5aLwGp4ehoyZhIg== - dependencies: - mute-stream "0.0.4" - strip-ansi "^2.0.1" - -reduce-component@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/reduce-component/-/reduce-component-1.0.1.tgz#e0c93542c574521bea13df0f9488ed82ab77c5da" - integrity sha512-y0wyCcdQul3hI3xHfIs0vg/jSbboQc/YTOAqaxjFG7At+XSexduuOqBVL9SmOLSwa/ldkbzVzdwuk9s2EKTAZg== - -rlp@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-3.0.0.tgz#5a60725ca4314a3a165feecca1836e4f2c1e2343" - integrity sha512-PD6U2PGk6Vq2spfgiWZdomLvRGDreBLxi5jv5M8EpRo3pU6VEm31KO+HFxE18Q3vgqfDrQ9pZA3FP95rkijNKw== - -should@~2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/should/-/should-2.1.1.tgz#c648b13a8b464465c2f838ea0c93f12e4ae06c6b" - integrity sha512-w9EBOxgQMNmWxqPgjaCOz21FcuYepdNjTGxw0EyIvibY1CdB4UqHjBqEvN5xj5B+tzwrndTaNFwp79yX2E1cFw== - -strip-ansi@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-2.0.1.tgz#df62c1aa94ed2f114e1d0f21fd1d50482b79a60e" - integrity sha512-2h8q2CP3EeOhDJ+jd932PRMpa3/pOJFGoF22J1U/DNbEK2gSW2DqeF46VjCXsSQXhC+k/l8/gaaRBQKL6hUPfQ== - dependencies: - ansi-regex "^1.0.0" - -sudo-block@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/sudo-block/-/sudo-block-0.3.0.tgz#aec27fbde8763ee32e3e47b8ba3c70584da7eb9c" - integrity sha512-Jv0WZsbu61SeFqeIVF6hSLnXELZafaxWLESVKt1XUW4UPMVccmE3n2ojL39OkbgjRnaYe7qHP7APJobeDxvMDw== - dependencies: - chalk "~0.3.0" - -superagent@~0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-0.16.0.tgz#f38df4a476565dffdbaa07764b81a19f0ab38a4e" - integrity sha512-/CJzCPSwbwEK1DJOllhcUHy7/4yuKiWOI5gvvyS38Dz8ZortROdYSrxJSB0f+1kPsOLentwnB61obWpRsro5+A== - dependencies: - cookiejar "1.3.0" - debug "~0.7.2" - emitter-component "1.0.0" - formidable "1.0.14" - methods "0.0.1" - mime "1.2.5" - qs "0.6.5" - reduce-component "1.0.1" - -through@~2.3.4: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -ws@8.17.1: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" - integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== From 223f614118ae2b2fb3867ba85d01fbaf7dc76514 Mon Sep 17 00:00:00 2001 From: mikhailUshakoff Date: Wed, 3 Jul 2024 17:06:42 +0200 Subject: [PATCH 06/12] Get private key from environment variable --- demo-nffl-cli/.gitignore | 145 ++++++++++++++++++++++++++++- demo-nffl-cli/README.md | 4 +- demo-nffl-cli/getStorageValue.js | 7 +- demo-nffl-cli/index.js | 6 +- demo-nffl-cli/package.json | 7 +- demo-nffl-cli/src/createWallet.js | 24 +++++ demo-nffl-cli/updateOperatorSet.js | 13 ++- demo-nffl-cli/updateStateRoot.js | 3 +- 8 files changed, 189 insertions(+), 20 deletions(-) create mode 100644 demo-nffl-cli/src/createWallet.js diff --git a/demo-nffl-cli/.gitignore b/demo-nffl-cli/.gitignore index 3c3629e6..3224a903 100644 --- a/demo-nffl-cli/.gitignore +++ b/demo-nffl-cli/.gitignore @@ -1 +1,144 @@ -node_modules +# Created by https://www.toptal.com/developers/gitignore/api/node +# Edit at https://www.toptal.com/developers/gitignore?templates=node + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit + +# End of https://www.toptal.com/developers/gitignore/api/node \ No newline at end of file diff --git a/demo-nffl-cli/README.md b/demo-nffl-cli/README.md index 0a9542cb..e5067df3 100644 --- a/demo-nffl-cli/README.md +++ b/demo-nffl-cli/README.md @@ -27,7 +27,7 @@ demo-nffl-cli updateStateRoot\ --blockHeight 14095733\ --nfflRegistryRollup 0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0\ --aggregator http://127.0.0.1:4002\ - --seedPhrase + --envKey PRIVATE_KEY ``` ### updateOperatorSet @@ -37,5 +37,5 @@ demo-nffl-cli updateOperatorSet\ --rpcUrl https://sepolia-rollup.arbitrum.io/rpc\ --nfflRegistryRollup 0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0\ --aggregator http://127.0.0.1:4002\ - --seedPhrase + --envKey PRIVATE_KEY ``` \ No newline at end of file diff --git a/demo-nffl-cli/getStorageValue.js b/demo-nffl-cli/getStorageValue.js index 507242a7..c7a46e23 100644 --- a/demo-nffl-cli/getStorageValue.js +++ b/demo-nffl-cli/getStorageValue.js @@ -1,6 +1,5 @@ const { ethers } = require('ethers'); const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); -//const {arbContracts} = require('./contracts'); const RLP = require('rlp'); /* @@ -14,7 +13,7 @@ async function getStorageValue(options) { const srcProvider = new ethers.JsonRpcProvider(options.srcRpcUrl); //chainId const { chainId } = await srcProvider.getNetwork(); - // Prepear params + // Prepare params const params = [ options.contractAddress, [options.storageKey], @@ -59,8 +58,8 @@ async function getStorageValue(options) { } // Get storage value - const tx = await registryRollup.getStorageValue(message,proofParams); - console.log(`Account ${options.contractAddress} storage slot ${options.storageKey} equals to ${tx}`); + const storageValue = await registryRollup.getStorageValue(message,proofParams); + console.log(`Account ${options.contractAddress} storage slot ${options.storageKey} equals to ${storageValue}`); } module.exports = {getStorageValue} \ No newline at end of file diff --git a/demo-nffl-cli/index.js b/demo-nffl-cli/index.js index 42ff5777..5deb40ef 100755 --- a/demo-nffl-cli/index.js +++ b/demo-nffl-cli/index.js @@ -1,7 +1,9 @@ #!/usr/bin/env node const { program } = require('commander'); + const pkg = require('./package.json'); + const {getStorageValue} = require('./getStorageValue'); const {updateStateRoot} = require('./updateStateRoot'); const {updateOperatorSet} = require('./updateOperatorSet'); @@ -30,7 +32,7 @@ program .requiredOption('--blockHeight ', 'blockHeight') .requiredOption('--nfflRegistryRollup ', 'nfflRegistryRollup contract address on destination chain') .requiredOption('--aggregator ', 'Aggregator REST API') -.requiredOption('--seedPhrase ', 'Seed phrase for message signing') +.requiredOption('--envKey ', 'Name of the environment variable containing the private key') .action(updateStateRoot); program @@ -39,7 +41,7 @@ program .requiredOption('--rpcUrl ', 'RPC URL') .requiredOption('--nfflRegistryRollup ', 'nfflRegistryRollup contract address on destination chain') .requiredOption('--aggregator ', 'Aggregator REST API') -.requiredOption('--seedPhrase ', 'Seed phrase for message signing') +.requiredOption('--envKey ', 'Name of the environment variable containing the private key') .action(updateOperatorSet); program.parse(process.argv); diff --git a/demo-nffl-cli/package.json b/demo-nffl-cli/package.json index 02f1c8b2..00c04703 100644 --- a/demo-nffl-cli/package.json +++ b/demo-nffl-cli/package.json @@ -1,13 +1,14 @@ { + "private": true, "name": "demo-nffl-cli", - "version": "1.0.0", + "version": "0.0.1", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], - "author": "", - "license": "ISC", + "author": "Near.org", + "license": "MIT", "description": "", "dependencies": { "bignumber.js": "^9.1.2", diff --git a/demo-nffl-cli/src/createWallet.js b/demo-nffl-cli/src/createWallet.js new file mode 100644 index 00000000..bcca4cdc --- /dev/null +++ b/demo-nffl-cli/src/createWallet.js @@ -0,0 +1,24 @@ +const { ethers } = require('ethers'); + +// Function to get private key from evironment variable +function getPrivateKey(envKey) { + if (envKey && process.env[envKey]) { + return process.env[envKey]; + } + console.error('Error: Private key is not provided.')``; + process.exit(1); +} + +// Function to create a wallet from a evironment variable containing the private key +function createWallet(envKey) { + const privateKey = getPrivateKey(envKey); + try { + const wallet = new ethers.Wallet(privateKey); + return wallet; + } catch (error) { + console.error('Invalid private key.'); + process.exit(1); + } +} + +module.exports = {createWallet} diff --git a/demo-nffl-cli/updateOperatorSet.js b/demo-nffl-cli/updateOperatorSet.js index bf0fc3de..015ffe79 100644 --- a/demo-nffl-cli/updateOperatorSet.js +++ b/demo-nffl-cli/updateOperatorSet.js @@ -2,6 +2,7 @@ const { ethers } = require('ethers'); const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); const { hashG1Point } = require('./src/hashG1Point'); +const { createWallet } = require('./src/createWallet'); /* * Automatically updates the operator set */ @@ -9,7 +10,7 @@ async function updateOperatorSet(options) { // Init provider const provider = new ethers.JsonRpcProvider(options.rpcUrl); // Init wallet - const wallet = ethers.Wallet.fromPhrase(options.seedPhrase); + const wallet = createWallet(options.envKey); const account = wallet.connect(provider); console.log('Wallet address:', await account.getAddress()); // Get next operator update id @@ -23,12 +24,10 @@ async function updateOperatorSet(options) { throw new Error(`HTTP error! status: ${response.status}`); } const respText = await response.text(); + // stringifying weight manually to avoid possible overflow issues when parsing text = respText.replace(/"Weight":\s*(\d+)/g, '"Weight": "$1"'); - data = JSON.parse(text); - const operators = data.Message.Operators.map(({ Pubkey, Weight }) => ({ - pubkey: Pubkey, - weight: Weight - })); + const data = JSON.parse(text); + const operators = data.Message.Operators.map(({ Pubkey: pubkey, Weight: weight }) => ({ pubkey, weight })); const message = { id: data.Message.Id, timestamp: data.Message.Timestamp, @@ -51,7 +50,7 @@ async function updateOperatorSet(options) { }, sigma: data.Aggregation.SignersAggSigG1.g1_point } - // Call contact + // Call contract const tx = await registryRollup.updateOperatorSet(message,signatureInfo); console.log('transaction:', tx); await tx.wait(); diff --git a/demo-nffl-cli/updateStateRoot.js b/demo-nffl-cli/updateStateRoot.js index d9f22fb8..c6121365 100644 --- a/demo-nffl-cli/updateStateRoot.js +++ b/demo-nffl-cli/updateStateRoot.js @@ -1,6 +1,7 @@ const { ethers } = require('ethers'); const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); const { hashG1Point } = require('./src/hashG1Point'); +const { createWallet } = require('./src/createWallet'); /* * Updates the state root. */ @@ -8,7 +9,7 @@ async function updateStateRoot(options) { // Init provider const provider = new ethers.JsonRpcProvider(options.rpcUrl); // Init wallet - const wallet = ethers.Wallet.fromPhrase(options.seedPhrase); + const wallet = createWallet(options.envKey); const account = wallet.connect(provider); console.log('Wallet address:', await account.getAddress()); // Get RegistryRollup contract From 2f9f6b16eab32b387abbc7658ae13b7a05086f24 Mon Sep 17 00:00:00 2001 From: Franco Barpp Gomes Date: Fri, 9 Aug 2024 11:35:17 -0300 Subject: [PATCH 07/12] chore: Restructure nffl-cli directories --- {demo-nffl-cli => examples/nffl-cli}/.gitignore | 0 {demo-nffl-cli => examples/nffl-cli}/README.md | 6 +++--- .../nffl-cli}/abi/NFFLRegistryRollup.js | 0 {demo-nffl-cli => examples/nffl-cli}/getStorageValue.js | 0 {demo-nffl-cli => examples/nffl-cli}/index.js | 0 {demo-nffl-cli => examples/nffl-cli}/package-lock.json | 0 {demo-nffl-cli => examples/nffl-cli}/package.json | 4 ++-- {demo-nffl-cli => examples/nffl-cli}/src/createWallet.js | 0 {demo-nffl-cli => examples/nffl-cli}/src/hashG1Point.js | 0 {demo-nffl-cli => examples/nffl-cli}/updateOperatorSet.js | 0 {demo-nffl-cli => examples/nffl-cli}/updateStateRoot.js | 0 11 files changed, 5 insertions(+), 5 deletions(-) rename {demo-nffl-cli => examples/nffl-cli}/.gitignore (100%) rename {demo-nffl-cli => examples/nffl-cli}/README.md (92%) rename {demo-nffl-cli => examples/nffl-cli}/abi/NFFLRegistryRollup.js (100%) rename {demo-nffl-cli => examples/nffl-cli}/getStorageValue.js (100%) rename {demo-nffl-cli => examples/nffl-cli}/index.js (100%) rename {demo-nffl-cli => examples/nffl-cli}/package-lock.json (100%) rename {demo-nffl-cli => examples/nffl-cli}/package.json (85%) rename {demo-nffl-cli => examples/nffl-cli}/src/createWallet.js (100%) rename {demo-nffl-cli => examples/nffl-cli}/src/hashG1Point.js (100%) rename {demo-nffl-cli => examples/nffl-cli}/updateOperatorSet.js (100%) rename {demo-nffl-cli => examples/nffl-cli}/updateStateRoot.js (100%) diff --git a/demo-nffl-cli/.gitignore b/examples/nffl-cli/.gitignore similarity index 100% rename from demo-nffl-cli/.gitignore rename to examples/nffl-cli/.gitignore diff --git a/demo-nffl-cli/README.md b/examples/nffl-cli/README.md similarity index 92% rename from demo-nffl-cli/README.md rename to examples/nffl-cli/README.md index e5067df3..9c49e7c0 100644 --- a/demo-nffl-cli/README.md +++ b/examples/nffl-cli/README.md @@ -8,7 +8,7 @@ npm link ### getStorageValue Get the storage value of a target contract at a specified block height from the source chain and verifies it on the destination chain ```sh -demo-nffl-cli getStorageValue\ +nffl-cli getStorageValue\ --srcRpcUrl https://sepolia.optimism.io\ --contractAddress 0xB90101779CC5EB84162f72A80e44307752b778b6\ --storageKey 0x0000000000000000000000000000000000000000000000000000000000000000\ @@ -21,7 +21,7 @@ demo-nffl-cli getStorageValue\ ### updateStateRoot Update the state root for a given rollup in the nfflRegistryRollup contract ```sh -demo-nffl-cli updateStateRoot\ +nffl-cli updateStateRoot\ --rpcUrl https://sepolia-rollup.arbitrum.io/rpc\ --rollupId 11155420\ --blockHeight 14095733\ @@ -33,7 +33,7 @@ demo-nffl-cli updateStateRoot\ ### updateOperatorSet Update the operator set for the nfflRegistryRollup contract ```sh -demo-nffl-cli updateOperatorSet\ +nffl-cli updateOperatorSet\ --rpcUrl https://sepolia-rollup.arbitrum.io/rpc\ --nfflRegistryRollup 0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0\ --aggregator http://127.0.0.1:4002\ diff --git a/demo-nffl-cli/abi/NFFLRegistryRollup.js b/examples/nffl-cli/abi/NFFLRegistryRollup.js similarity index 100% rename from demo-nffl-cli/abi/NFFLRegistryRollup.js rename to examples/nffl-cli/abi/NFFLRegistryRollup.js diff --git a/demo-nffl-cli/getStorageValue.js b/examples/nffl-cli/getStorageValue.js similarity index 100% rename from demo-nffl-cli/getStorageValue.js rename to examples/nffl-cli/getStorageValue.js diff --git a/demo-nffl-cli/index.js b/examples/nffl-cli/index.js similarity index 100% rename from demo-nffl-cli/index.js rename to examples/nffl-cli/index.js diff --git a/demo-nffl-cli/package-lock.json b/examples/nffl-cli/package-lock.json similarity index 100% rename from demo-nffl-cli/package-lock.json rename to examples/nffl-cli/package-lock.json diff --git a/demo-nffl-cli/package.json b/examples/nffl-cli/package.json similarity index 85% rename from demo-nffl-cli/package.json rename to examples/nffl-cli/package.json index 00c04703..4a1ffc6d 100644 --- a/demo-nffl-cli/package.json +++ b/examples/nffl-cli/package.json @@ -1,6 +1,6 @@ { "private": true, - "name": "demo-nffl-cli", + "name": "nffl-cli", "version": "0.0.1", "main": "index.js", "scripts": { @@ -17,6 +17,6 @@ "rlp": "^3.0.0" }, "bin": { - "demo-nffl-cli": "./index.js" + "nffl-cli": "./index.js" } } diff --git a/demo-nffl-cli/src/createWallet.js b/examples/nffl-cli/src/createWallet.js similarity index 100% rename from demo-nffl-cli/src/createWallet.js rename to examples/nffl-cli/src/createWallet.js diff --git a/demo-nffl-cli/src/hashG1Point.js b/examples/nffl-cli/src/hashG1Point.js similarity index 100% rename from demo-nffl-cli/src/hashG1Point.js rename to examples/nffl-cli/src/hashG1Point.js diff --git a/demo-nffl-cli/updateOperatorSet.js b/examples/nffl-cli/updateOperatorSet.js similarity index 100% rename from demo-nffl-cli/updateOperatorSet.js rename to examples/nffl-cli/updateOperatorSet.js diff --git a/demo-nffl-cli/updateStateRoot.js b/examples/nffl-cli/updateStateRoot.js similarity index 100% rename from demo-nffl-cli/updateStateRoot.js rename to examples/nffl-cli/updateStateRoot.js From 9627f1a69dc191acdea25a8d9bdcc9c55953b2ed Mon Sep 17 00:00:00 2001 From: Franco Barpp Gomes Date: Fri, 9 Aug 2024 22:28:33 -0300 Subject: [PATCH 08/12] refactor: Port CLI to TS --- examples/nffl-cli/README.md | 41 - examples/nffl-cli/abi/NFFLRegistryRollup.js | 3 - examples/nffl-cli/abi/SFFLRegistryRollup.json | 1 + examples/nffl-cli/getStorageValue.js | 65 -- examples/nffl-cli/index.js | 47 - examples/nffl-cli/package-lock.json | 663 +++++++++++- examples/nffl-cli/package.json | 11 +- .../nffl-cli/src/commands/getStorageProof.ts | 16 + .../src/commands/updateOperatorSet.ts | 25 + .../nffl-cli/src/commands/updateStateRoot.ts | 26 + examples/nffl-cli/src/createWallet.js | 24 - examples/nffl-cli/src/hashG1Point.js | 20 - examples/nffl-cli/src/index.ts | 42 + examples/nffl-cli/src/utils/api.ts | 126 +++ examples/nffl-cli/src/utils/storage.ts | 44 + .../typechain-types/SFFLRegistryRollup.ts | 912 ++++++++++++++++ examples/nffl-cli/typechain-types/common.ts | 131 +++ .../factories/SFFLRegistryRollup__factory.ts | 982 ++++++++++++++++++ .../typechain-types/factories/index.ts | 4 + examples/nffl-cli/typechain-types/index.ts | 6 + examples/nffl-cli/updateOperatorSet.js | 61 -- examples/nffl-cli/updateStateRoot.js | 59 -- 22 files changed, 2954 insertions(+), 355 deletions(-) delete mode 100644 examples/nffl-cli/README.md delete mode 100644 examples/nffl-cli/abi/NFFLRegistryRollup.js create mode 100644 examples/nffl-cli/abi/SFFLRegistryRollup.json delete mode 100644 examples/nffl-cli/getStorageValue.js delete mode 100755 examples/nffl-cli/index.js create mode 100644 examples/nffl-cli/src/commands/getStorageProof.ts create mode 100644 examples/nffl-cli/src/commands/updateOperatorSet.ts create mode 100644 examples/nffl-cli/src/commands/updateStateRoot.ts delete mode 100644 examples/nffl-cli/src/createWallet.js delete mode 100644 examples/nffl-cli/src/hashG1Point.js create mode 100644 examples/nffl-cli/src/index.ts create mode 100644 examples/nffl-cli/src/utils/api.ts create mode 100644 examples/nffl-cli/src/utils/storage.ts create mode 100644 examples/nffl-cli/typechain-types/SFFLRegistryRollup.ts create mode 100644 examples/nffl-cli/typechain-types/common.ts create mode 100644 examples/nffl-cli/typechain-types/factories/SFFLRegistryRollup__factory.ts create mode 100644 examples/nffl-cli/typechain-types/factories/index.ts create mode 100644 examples/nffl-cli/typechain-types/index.ts delete mode 100644 examples/nffl-cli/updateOperatorSet.js delete mode 100644 examples/nffl-cli/updateStateRoot.js diff --git a/examples/nffl-cli/README.md b/examples/nffl-cli/README.md deleted file mode 100644 index 9c49e7c0..00000000 --- a/examples/nffl-cli/README.md +++ /dev/null @@ -1,41 +0,0 @@ -## How to build -```sh -npm install -npm link -``` - -## How to run -### getStorageValue -Get the storage value of a target contract at a specified block height from the source chain and verifies it on the destination chain -```sh -nffl-cli getStorageValue\ - --srcRpcUrl https://sepolia.optimism.io\ - --contractAddress 0xB90101779CC5EB84162f72A80e44307752b778b6\ - --storageKey 0x0000000000000000000000000000000000000000000000000000000000000000\ - --blockHeight 13905480\ - --dstRpcUrl https://sepolia-rollup.arbitrum.io/rpc\ - --nfflRegistryRollup 0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0\ - --aggregator http://127.0.0.1:4002 - ``` - - ### updateStateRoot - Update the state root for a given rollup in the nfflRegistryRollup contract -```sh -nffl-cli updateStateRoot\ - --rpcUrl https://sepolia-rollup.arbitrum.io/rpc\ - --rollupId 11155420\ - --blockHeight 14095733\ - --nfflRegistryRollup 0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0\ - --aggregator http://127.0.0.1:4002\ - --envKey PRIVATE_KEY -``` - -### updateOperatorSet -Update the operator set for the nfflRegistryRollup contract -```sh -nffl-cli updateOperatorSet\ - --rpcUrl https://sepolia-rollup.arbitrum.io/rpc\ - --nfflRegistryRollup 0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0\ - --aggregator http://127.0.0.1:4002\ - --envKey PRIVATE_KEY -``` \ No newline at end of file diff --git a/examples/nffl-cli/abi/NFFLRegistryRollup.js b/examples/nffl-cli/abi/NFFLRegistryRollup.js deleted file mode 100644 index 0015f9cc..00000000 --- a/examples/nffl-cli/abi/NFFLRegistryRollup.js +++ /dev/null @@ -1,3 +0,0 @@ -const NFFLRegistryRollupABI = [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IPauserRegistry","name":"pauserRegistry","type":"address"},{"indexed":false,"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address"}],"name":"PauserRegistrySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"rollupId","type":"uint32"},{"indexed":true,"internalType":"uint64","name":"blockHeight","type":"uint64"},{"indexed":false,"internalType":"bytes32","name":"stateRoot","type":"bytes32"}],"name":"StateRootUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"PAUSED_UPDATE_OPERATOR_SET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSED_UPDATE_STATE_ROOT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"THRESHOLD_DENOMINATOR","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"aggregator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple"},{"internalType":"uint128","name":"weight","type":"uint128"}],"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]"}],"internalType":"struct OperatorSetUpdate.Message","name":"message","type":"tuple"}],"name":"forceOperatorSetUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getApk","outputs":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"pubkeyHash","type":"bytes32"}],"name":"getOperatorWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getQuorumThreshold","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"}],"name":"getStateRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}],"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple"},{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"storageKey","type":"bytes32"},{"internalType":"bytes","name":"stateTrieWitness","type":"bytes"},{"internalType":"bytes","name":"storageTrieWitness","type":"bytes"}],"internalType":"struct SFFLRegistryBase.ProofParams","name":"proofParams","type":"tuple"}],"name":"getStorageValue","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"quorumThreshold","type":"uint128"},{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_aggregator","type":"address"},{"internalType":"contract IPauserRegistry","name":"_pauserRegistry","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nextOperatorUpdateId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauserRegistry","outputs":[{"internalType":"contract IPauserRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple"},{"internalType":"uint128","name":"weight","type":"uint128"}],"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]"},{"internalType":"uint64","name":"_nextOperatorUpdateId","type":"uint64"}],"name":"setInitialOperatorSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address"}],"name":"setPauserRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newQuorumThreshold","type":"uint128"}],"name":"setQuorumThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}],"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple"},{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"storageKey","type":"bytes32"},{"internalType":"bytes","name":"stateTrieWitness","type":"bytes"},{"internalType":"bytes","name":"storageTrieWitness","type":"bytes"}],"internalType":"struct SFFLRegistryBase.ProofParams","name":"proofParams","type":"tuple"},{"internalType":"bytes","name":"agreement","type":"bytes"}],"name":"updateAndGetStorageValue","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple"},{"internalType":"uint128","name":"weight","type":"uint128"}],"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]"}],"internalType":"struct OperatorSetUpdate.Message","name":"message","type":"tuple"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple"}],"internalType":"struct RollupOperators.SignatureInfo","name":"signatureInfo","type":"tuple"}],"name":"updateOperatorSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}],"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple"},{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple"}],"internalType":"struct RollupOperators.SignatureInfo","name":"signatureInfo","type":"tuple"}],"name":"updateStateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"}]; - -module.exports = {NFFLRegistryRollupABI} \ No newline at end of file diff --git a/examples/nffl-cli/abi/SFFLRegistryRollup.json b/examples/nffl-cli/abi/SFFLRegistryRollup.json new file mode 100644 index 00000000..06b04e7d --- /dev/null +++ b/examples/nffl-cli/abi/SFFLRegistryRollup.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"PAUSED_UPDATE_OPERATOR_SET","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"PAUSED_UPDATE_STATE_ROOT","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"THRESHOLD_DENOMINATOR","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"pure"},{"type":"function","name":"aggregator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"forceOperatorSetUpdate","inputs":[{"name":"message","type":"tuple","internalType":"struct OperatorSetUpdate.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"operators","type":"tuple[]","internalType":"struct RollupOperators.Operator[]","components":[{"name":"pubkey","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"weight","type":"uint128","internalType":"uint128"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getApk","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getOperatorWeight","inputs":[{"name":"pubkeyHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"getQuorumThreshold","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"getStateRoot","inputs":[{"name":"rollupId","type":"uint32","internalType":"uint32"},{"name":"blockHeight","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStorageValue","inputs":[{"name":"message","type":"tuple","internalType":"struct StateRootUpdate.Message","components":[{"name":"rollupId","type":"uint32","internalType":"uint32"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"nearDaTransactionId","type":"bytes32","internalType":"bytes32"},{"name":"nearDaCommitment","type":"bytes32","internalType":"bytes32"},{"name":"stateRoot","type":"bytes32","internalType":"bytes32"}]},{"name":"proofParams","type":"tuple","internalType":"struct SFFLRegistryBase.ProofParams","components":[{"name":"target","type":"address","internalType":"address"},{"name":"storageKey","type":"bytes32","internalType":"bytes32"},{"name":"stateTrieWitness","type":"bytes","internalType":"bytes"},{"name":"storageTrieWitness","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getTotalWeight","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"quorumThreshold","type":"uint128","internalType":"uint128"},{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_aggregator","type":"address","internalType":"address"},{"name":"_pauserRegistry","type":"address","internalType":"contract IPauserRegistry"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nextOperatorUpdateId","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[{"name":"newPausedStatus","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"pauseAll","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[{"name":"index","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"pauserRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPauserRegistry"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setInitialOperatorSet","inputs":[{"name":"operators","type":"tuple[]","internalType":"struct RollupOperators.Operator[]","components":[{"name":"pubkey","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"weight","type":"uint128","internalType":"uint128"}]},{"name":"_nextOperatorUpdateId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPauserRegistry","inputs":[{"name":"newPauserRegistry","type":"address","internalType":"contract IPauserRegistry"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setQuorumThreshold","inputs":[{"name":"newQuorumThreshold","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unpause","inputs":[{"name":"newPausedStatus","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateAndGetStorageValue","inputs":[{"name":"message","type":"tuple","internalType":"struct StateRootUpdate.Message","components":[{"name":"rollupId","type":"uint32","internalType":"uint32"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"nearDaTransactionId","type":"bytes32","internalType":"bytes32"},{"name":"nearDaCommitment","type":"bytes32","internalType":"bytes32"},{"name":"stateRoot","type":"bytes32","internalType":"bytes32"}]},{"name":"proofParams","type":"tuple","internalType":"struct SFFLRegistryBase.ProofParams","components":[{"name":"target","type":"address","internalType":"address"},{"name":"storageKey","type":"bytes32","internalType":"bytes32"},{"name":"stateTrieWitness","type":"bytes","internalType":"bytes"},{"name":"storageTrieWitness","type":"bytes","internalType":"bytes"}]},{"name":"agreement","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"updateOperatorSet","inputs":[{"name":"message","type":"tuple","internalType":"struct OperatorSetUpdate.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"operators","type":"tuple[]","internalType":"struct RollupOperators.Operator[]","components":[{"name":"pubkey","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"weight","type":"uint128","internalType":"uint128"}]}]},{"name":"signatureInfo","type":"tuple","internalType":"struct RollupOperators.SignatureInfo","components":[{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateStateRoot","inputs":[{"name":"message","type":"tuple","internalType":"struct StateRootUpdate.Message","components":[{"name":"rollupId","type":"uint32","internalType":"uint32"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"nearDaTransactionId","type":"bytes32","internalType":"bytes32"},{"name":"nearDaCommitment","type":"bytes32","internalType":"bytes32"},{"name":"stateRoot","type":"bytes32","internalType":"bytes32"}]},{"name":"signatureInfo","type":"tuple","internalType":"struct RollupOperators.SignatureInfo","components":[{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"newPausedStatus","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PauserRegistrySet","inputs":[{"name":"pauserRegistry","type":"address","indexed":false,"internalType":"contract IPauserRegistry"},{"name":"newPauserRegistry","type":"address","indexed":false,"internalType":"contract IPauserRegistry"}],"anonymous":false},{"type":"event","name":"StateRootUpdated","inputs":[{"name":"rollupId","type":"uint32","indexed":true,"internalType":"uint32"},{"name":"blockHeight","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"stateRoot","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"newPausedStatus","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6143c280620000f46000396000f3fe608060405234801561001057600080fd5b50600436106101845760003560e01c8063715018a6116100d9578063d5d4bb5a11610087578063d5d4bb5a1461036c578063dd64766e1461037f578063e0f5d9f014610392578063ef024458146103bd578063f2fde38b146103c4578063f4db0571146103d7578063fabc1cbc146103df57600080fd5b8063715018a6146102f457806382616b7b146102fc578063886f11951461030f5780638da5cb5b1461032257806390540c3714610333578063b128aeee14610346578063b3a9e53b1461035957600080fd5b80632db52ea5116101365780632db52ea5146102425780632f65284e146102555780634afa71b914610276578063595c6a671461028e5780635ac86ab7146102965780635c975abb146102c95780636f5b9918146102d157600080fd5b80630510c1911461018957806306aba0e1146101a857806310d67a2f146101cd578063136439dd146101e25780631df9e1d2146101f55780631fb4d41114610208578063245a7bfc1461021b575b600080fd5b610191600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b03909116815260200161019f565b6101e06101db366004613746565b6103f2565b005b6101e06101f0366004613763565b6104ae565b6101e0610203366004613794565b6105db565b6101e06102163660046137ec565b6106cc565b60ce5461023590600160401b90046001600160a01b031681565b60405161019f919061383a565b6101e0610250366004613865565b610755565b610268610263366004613892565b610768565b60405190815260200161019f565b60cd54600160801b90046001600160801b03166101b5565b6101e0610887565b6102b96102a4366004613935565b606654600160ff9092169190911b9081161490565b604051901515815260200161019f565b606654610268565b6102d9610941565b6040805182518152602092830151928101929092520161019f565b6101e0610964565b6101e061030a366004613958565b610978565b606554610235906001600160a01b031681565b6033546001600160a01b0316610235565b6101e06103413660046139b1565b610a9d565b6101e0610354366004613aff565b610bed565b610268610367366004613bd3565b610cd1565b61026861037a366004613c06565b610d02565b6101b561038d366004613763565b610e5b565b60ce546103a5906001600160401b031681565b6040516001600160401b03909116815260200161019f565b60646101b5565b6101e06103d2366004613746565b610e78565b610191600081565b6101e06103ed366004613763565b610eee565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104699190613c4a565b6001600160a01b0316336001600160a01b0316146104a25760405162461bcd60e51b815260040161049990613c67565b60405180910390fd5b6104ab81611045565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906104de90339060040161383a565b602060405180830381865afa1580156104fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f9190613cb1565b61053b5760405162461bcd60e51b815260040161049990613cd3565b606654818116146105af5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610499565b6066819055604051818152339060008051602061434d833981519152906020015b60405180910390a250565b6105e361113c565b60ce546001600160401b03166105fc6020830183613d1b565b6001600160401b0316146106225760405162461bcd60e51b815260040161049990613d36565b61062f6020820182613d1b565b61063a906001613d76565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104ab61066b6040830183613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b7576106a860608302860136819003810190613df0565b8152602001906001019061068b565b505050505060ca61119690919063ffffffff16565b606654600190600290811614156106f55760405162461bcd60e51b815260040161049990613e0c565b61070a6107018461139f565b60ca9084611420565b6107265760405162461bcd60e51b815260040161049990613e3f565b6107506107366020850185613e67565b6107466040860160208701613d1b565b8560a0013561180a565b505050565b61075d61113c565b6104ab60ca82611870565b60006060850135158015906107805750608085013515155b6107c75760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610499565b60006097816107d96020890189613e67565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906108089190613d1b565b6001600160401b0316815260208101919091526040016000205490508061087357826108685760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610499565b610873868585611929565b61087d8686610d02565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906108b790339060040161383a565b602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190613cb1565b6109145760405162461bcd60e51b815260040161049990613cd3565b6000196066819055604051908152339060008051602061434d8339815191529060200160405180910390a2565b61094961361d565b506040805180820190915260cb54815260cc54602082015290565b61096c61113c565b610976600061193a565b565b606654600090600190811614156109a15760405162461bcd60e51b815260040161049990613e0c565b60ce546001600160401b03166109ba6020850185613d1b565b6001600160401b0316146109e05760405162461bcd60e51b815260040161049990613d36565b6109ec6107018461198c565b610a085760405162461bcd60e51b815260040161049990613e3f565b610a156020840184613d1b565b610a20906001613d76565b60ce805467ffffffffffffffff19166001600160401b0392909216919091179055610750610a516040850185613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b757610a8e60608302860136819003810190613df0565b81526020019060010190610a71565b600054610100900460ff1615808015610abd5750600054600160ff909116105b80610ad75750303b158015610ad7575060005460ff166001145b610b3a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610499565b6000805460ff191660011790558015610b5d576000805461ff0019166101001790555b610b688260006119c0565b610b718461193a565b610b7c60ca86611870565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610be6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610c495760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b6044820152606401610499565b60cd546001600160801b031615610ca25760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a65646044820152606401610499565b610cad60ca83611196565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d156020870187613e67565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610d449190613d1b565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610db45760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610499565b610e53610dc46020850185613746565b602085013583610dd76040880188613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e19925050506060890189613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a9892505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610cfc565b610e8061113c565b6001600160a01b038116610ee55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610499565b6104ab8161193a565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f659190613c4a565b6001600160a01b0316336001600160a01b031614610f955760405162461bcd60e51b815260040161049990613c67565b60665419811960665419161461100e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610499565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016105d0565b6001600160a01b0381166110d35760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610499565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b61119e613637565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b8451811015611364578481815181106111e5576111e5613ec8565b6020026020010151935060006112108560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b03908116911681141561127c5760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b6044820152606401610499565b602086015161128b8286613ede565b6112959190613f06565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b0392831617905590945081166112e05785516112d9908690611bd3565b945061130c565b60208601516001600160801b031661130c576113096113028760000151611c6a565b8690611bd3565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a25050808061135c90613f28565b9150506111ca565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016113d39190613f43565b60405160208183030381529060405280519060200120604051602001611403929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820181905260038501549091906001600160801b0316806114945760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a65646044820152606401610499565b60006114a08580613fad565b90506001600160401b038111156114b9576114b9613a0b565b6040519080825280602002602001820160405280156114e2578160200160208202803683370190505b50905060005b6114f28680613fad565b90508110156116cb576115456115088780613fad565b8381811061151857611518613ec8565b90506040020180360381019061152e9190613ff6565b805160009081526020918201519091526040902090565b82828151811061155757611557613ec8565b602090810291909101015280156115ee5781611574600183614012565b8151811061158457611584613ec8565b602002602001015160001c8282815181106115a1576115a1613ec8565b602002602001015160001c116115ee5760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b6044820152606401610499565b600088600001600084848151811061160857611608613ec8565b6020908102919091018101518252810191909152604001600020546001600160801b03169050806116765760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b6044820152606401610499565b6116a96116838880613fad565b8481811061169357611693613ec8565b9050604002018036038101906113029190613ff6565b94506116b58185614012565b93505080806116c390613f28565b9150506114e8565b506116f96116d884611c6a565b6040805180820190915260018a0154815260028a0154602082015290611bd3565b925060008061172c8886611715368b90038b0160208c01614098565b611727368c90038c0160a08d01613ff6565b611cf9565b915091508161177d5760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c656400006044820152606401610499565b806117c15760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b6044820152606401610499565b60038901546064906117e5906001600160801b03600160801b8204811691166140d7565b6117ef919061411c565b6001600160801b0316841015955050505050505b9392505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b03821611156118dc5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b6064820152608401610499565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b8161193484826106cc565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f826040516020016113d39190614142565b6065546001600160a01b03161580156119e157506001600160a01b03821615155b611a635760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610499565b6066819055604051818152339060008051602061434d8339815191529060200160405180910390a2611a9482611045565b5050565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611ad8906034016040516020818303038152906040528688611e58565b9150915081611b225760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610499565b6000611b2d82611e81565b9050600080611b628a604051602001611b4891815260200190565b604051602081830303815290604052888560400151611e58565b9150915081611bb35760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610499565b611bc4611bbf82611f45565b611f58565b9b9a5050505050505050505050565b611bdb61361d565b611be3613657565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611c2257611c24565bfe5b5080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610499565b505092915050565b611c7261361d565b8151158015611c8357506020820151155b15611ca1575050604080518082019091526000808252602082015290565b60405180604001604052808360000151815260200160008051602061436d8339815191528460200151611cd4919061421a565b611cec9060008051602061436d833981519152614012565b905292915050565b919050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611d4157611d41613ec8565b60200201518951600160200201518a60200151600060028110611d6657611d66613ec8565b60200201518b60200151600160028110611d8257611d82613ec8565b602090810291909101518c518d830151604051611ddf9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611e02919061421a565b9050611e4a611e146113028884611f87565b611e1c612003565b611e40611e3185611e2b6120c3565b90611f87565b611e3a8c6120e4565b90611bd3565b886201d4c0612168565b909890975095505050505050565b600060606000611e678661238c565b9050611e748186866123be565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611eae83612499565b90506040518060800160405280611ede83600081518110611ed157611ed1613ec8565b60200260200101516124ac565b8152602001611ef983600181518110611ed157611ed1613ec8565b8152602001611f2183600281518110611f1457611f14613ec8565b60200260200101516124b3565b8152602001611f3c83600381518110611f1457611f14613ec8565b90529392505050565b6060610cfc611f5383612555565b612582565b6000806000602084511115611f6e576020611f71565b83515b60209485015194036008029390931c9392505050565b611f8f61361d565b611f97613675565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611c22575080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610499565b61200b613693565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6120cb61361d565b5060408051808201909152600181526002602082015290565b6120ec61361d565b6000808061210860008051602061436d8339815191528661421a565b90505b6121148161260d565b909350915060008051602061436d83398151915282830983141561214e576040805180820190915290815260208101919091529392505050565b60008051602061436d83398151915260018208905061210b565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061219a6136b8565b60005b600281101561235f5760006121b382600661422e565b90508482600281106121c7576121c7613ec8565b602002015151836121d983600061424d565b600c81106121e9576121e9613ec8565b602002015284826002811061220057612200613ec8565b60200201516020015183826001612217919061424d565b600c811061222757612227613ec8565b602002015283826002811061223e5761223e613ec8565b602002015151518361225183600261424d565b600c811061226157612261613ec8565b602002015283826002811061227857612278613ec8565b602002015151600160200201518361229183600361424d565b600c81106122a1576122a1613ec8565b60200201528382600281106122b8576122b8613ec8565b6020020151602001516000600281106122d3576122d3613ec8565b6020020151836122e483600461424d565b600c81106122f4576122f4613ec8565b602002015283826002811061230b5761230b613ec8565b60200201516020015160016002811061232657612326613ec8565b60200201518361233783600561424d565b600c811061234757612347613ec8565b6020020152508061235781613f28565b91505061219d565b506123686136d7565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606081805190602001206040516020016123a891815260200190565b6040516020818303038152906040529050919050565b6000606060006123cd8561268f565b905060008060006123df848a89612789565b815192955090935091501580806123f35750815b61243f5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610499565b60008161245b5760405180602001604052806000815250612487565b6124878661246a600188614012565b8151811061247a5761247a613ec8565b6020026020010151612bad565b919b919a509098505050505050505050565b6060610cfc6124a783612555565b612bd7565b6000610cfc825b60006021826000015111156124da5760405162461bcd60e51b815260040161049990614265565b60008060006124e885612dbd565b9194509250905060008160018111156125035761250361429c565b146125205760405162461bcd60e51b815260040161049990614265565b6000838660200151612532919061424d565b8051909150602084101561087d5760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060600080600061259285612dbd565b9194509250905060008160018111156125ad576125ad61429c565b146125f55760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610499565b612604856020015184846130f3565b95945050505050565b6000808060008051602061436d833981519152600360008051602061436d8339815191528660008051602061436d833981519152888909090890506000612683827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5260008051602061436d8339815191526131d1565b91959194509092505050565b6060600061269c83612499565b9050600081516001600160401b038111156126b9576126b9613a0b565b6040519080825280602002602001820160405280156126fe57816020015b60408051808201909152606080825260208201528152602001906001900390816126d75790505b50905060005b825181101561278157600061273184838151811061272457612724613ec8565b6020026020010151612582565b9050604051806040016040528082815260200161274d83612499565b81525083838151811061276257612762613ec8565b602002602001018190525050808061277990613f28565b915050612704565b509392505050565b6000606081808061279987613279565b905060008690506000806127c0604051806040016040528060608152602001606081525090565b60005b8c51811015612b85578c81815181106127de576127de613ec8565b6020026020010151915082846127f4919061424d565b935061280160018861424d565b965083612859578151805160209091012085146128545760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610499565b612916565b8151516020116128bb578151805160209091012085146128545760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610499565b846128c983600001516133b3565b146129165760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610499565b6129226010600161424d565b826020015151141561299b57855184141561293c57612b85565b600086858151811061295057612950613ec8565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061297b5761297b613ec8565b6020026020010151905061298e816133db565b9650600194505050612b73565b60028260200151511415612b2b5760006129b483613411565b90506000816000815181106129cb576129cb613ec8565b016020015160f81c905060006129e26002836142b2565b6129ed9060026142d4565b905060006129fe848360ff16613435565b90506000612a0c8b8a613435565b90506000612a1a838361346b565b905060ff851660021480612a31575060ff85166003145b15612a6b57808351148015612a465750808251145b15612a5857612a55818b61424d565b99505b50600160ff1b9950612b85945050505050565b60ff85161580612a7e575060ff85166001145b15612ad45782518114612a9e5750600160ff1b9950612b85945050505050565b612ac58860200151600181518110612ab857612ab8613ec8565b60200260200101516133db565b9a509750612b73945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610499565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610499565b80612b7d81613f28565b9150506127c3565b50600160ff1b841486612b988786613435565b909e909d50909b509950505050505050505050565b60208101518051606091610cfc91612bc790600190614012565b8151811061272457612724613ec8565b6060600080612be584612dbd565b91935090915060019050816001811115612c0157612c0161429c565b14612c485760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610499565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612c615790505090506000835b8651811015612db25760208210612cfa5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610499565b600080612d376040518060400160405280858c60000151612d1b9190614012565b8152602001858c60200151612d30919061424d565b9052612dbd565b509150915060405180604001604052808383612d53919061424d565b8152602001848b60200151612d68919061424d565b815250858581518110612d7d57612d7d613ec8565b6020908102919091010152612d9360018561424d565b9350612d9f818361424d565b612da9908461424d565b92505050612c8e565b508152949350505050565b600080600080846000015111612e105760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610499565b6020840151805160001a607f8111612e355760006001600094509450945050506130ec565b60b78111612ead576000612e4a608083614012565b905080876000015111612e9b5760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610499565b600195509350600092506130ec915050565b60bf8111612f97576000612ec260b783614012565b905080876000015111612f175760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610499565b600183015160208290036101000a9004612f31818361424d565b885111612f7b5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610499565b612f8682600161424d565b96509450600093506130ec92505050565b60f7811161300c576000612fac60c083614012565b905080876000015111612ffb5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610499565b6001955093508492506130ec915050565b600061301960f783614012565b90508087600001511161306e5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610499565b600183015160208290036101000a9004613088818361424d565b8851116130d05760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610499565b6130db82600161424d565b96509450600193506130ec92505050565b9193909250565b60606000826001600160401b0381111561310f5761310f613a0b565b6040519080825280601f01601f191660200182016040528015613139576020820181803683370190505b50905080516000141561314d579050611803565b6000613159858761424d565b90506020820160005b61316d6020876142f7565b8110156131a4578251825261318360208461424d565b925061319060208361424d565b91508061319c81613f28565b915050613162565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6000806131dc6136d7565b6131e46136f5565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611c2257508261326e5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610499565b505195945050505050565b606060008251600261328b919061422e565b6001600160401b038111156132a2576132a2613a0b565b6040519080825280601f01601f1916602001820160405280156132cc576020820181803683370190505b50905060005b83518110156133ac5760048482815181106132ef576132ef613ec8565b01602001516001600160f81b031916901c8261330c83600261422e565b8151811061331c5761331c613ec8565b60200101906001600160f81b031916908160001a905350601084828151811061334757613347613ec8565b0160200151613359919060f81c6142b2565b60f81b8261336883600261422e565b61337390600161424d565b8151811061338357613383613ec8565b60200101906001600160f81b031916908160001a905350806133a481613f28565b9150506132d2565b5092915050565b60006020825110156133c757506020015190565b81806020019051810190610cfc919061430b565b600060606020836000015110156133fc576133f5836134e7565b9050613408565b61340583612582565b90505b611803816133b3565b6060610cfc613430836020015160008151811061272457612724613ec8565b613279565b6060825182106134545750604080516020810190915260008152610cfc565b61180383838486516134669190614012565b6134f2565b6000805b80845111801561347f5750808351115b80156134d0575082818151811061349857613498613ec8565b602001015160f81c60f81b6001600160f81b0319168482815181106134bf576134bf613ec8565b01602001516001600160f81b031916145b1561180357806134df81613f28565b91505061346f565b6060610cfc82613607565b60608161350081601f61424d565b101561351e5760405162461bcd60e51b815260040161049990614324565b82613529838261424d565b10156135475760405162461bcd60e51b815260040161049990614324565b613551828461424d565b845110156135955760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610499565b6060821580156135b457604051915060008252602082016040526135fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156135ed5780518352602092830192016135d5565b5050858452601f01601f1916604052505b50949350505050565b6060610cfc8260200151600084600001516130f3565b604051806040016040528060008152602001600081525090565b604051806040016040528061364a61361d565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806136a6613713565b81526020016136b3613713565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104ab57600080fd5b60006020828403121561375857600080fd5b813561180381613731565b60006020828403121561377557600080fd5b5035919050565b60006060828403121561378e57600080fd5b50919050565b6000602082840312156137a657600080fd5b81356001600160401b038111156137bc57600080fd5b610e538482850161377c565b600060c0828403121561378e57600080fd5b600060e0828403121561378e57600080fd5b60008060e083850312156137ff57600080fd5b61380984846137c8565b915060c08301356001600160401b0381111561382457600080fd5b613830858286016137da565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611cf457600080fd5b60006020828403121561387757600080fd5b6118038261384e565b60006080828403121561378e57600080fd5b60008060008061010085870312156138a957600080fd5b6138b386866137c8565b935060c08501356001600160401b03808211156138cf57600080fd5b6138db88838901613880565b945060e08701359150808211156138f157600080fd5b818701915087601f83011261390557600080fd5b81358181111561391457600080fd5b88602082850101111561392657600080fd5b95989497505060200194505050565b60006020828403121561394757600080fd5b813560ff8116811461180357600080fd5b6000806040838503121561396b57600080fd5b82356001600160401b038082111561398257600080fd5b61398e8683870161377c565b935060208501359150808211156139a457600080fd5b50613830858286016137da565b600080600080608085870312156139c757600080fd5b6139d08561384e565b935060208501356139e081613731565b925060408501356139f081613731565b91506060850135613a0081613731565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a4357613a43613a0b565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613a7157613a71613a0b565b604052919050565b600060408284031215613a8b57600080fd5b613a93613a21565b9050813581526020820135602082015292915050565b600060608284031215613abb57600080fd5b613ac3613a21565b9050613acf8383613a79565b8152613add6040830161384e565b602082015292915050565b80356001600160401b0381168114611cf457600080fd5b60008060408385031215613b1257600080fd5b82356001600160401b0380821115613b2957600080fd5b818501915085601f830112613b3d57600080fd5b8135602082821115613b5157613b51613a0b565b613b5f818360051b01613a49565b82815281810193506060928302850182019289841115613b7e57600080fd5b948201945b83861015613ba457613b958a87613aa9565b85529485019493820193613b83565b509550613bb2878201613ae8565b9450505050509250929050565b803563ffffffff81168114611cf457600080fd5b60008060408385031215613be657600080fd5b613bef83613bbf565b9150613bfd60208401613ae8565b90509250929050565b60008060e08385031215613c1957600080fd5b613c2384846137c8565b915060c08301356001600160401b03811115613c3e57600080fd5b61383085828601613880565b600060208284031215613c5c57600080fd5b815161180381613731565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613cc357600080fd5b8151801515811461180357600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613d2d57600080fd5b61180382613ae8565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613d9857613d98613d60565b01949350505050565b6000808335601e19843603018112613db857600080fd5b8301803591506001600160401b03821115613dd257600080fd5b6020019150606081023603821315613de957600080fd5b9250929050565b600060608284031215613e0257600080fd5b6118038383613aa9565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613e7957600080fd5b61180382613bbf565b6000808335601e19843603018112613e9957600080fd5b8301803591506001600160401b03821115613eb357600080fd5b602001915036819003821315613de957600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613efe57613efe613d60565b039392505050565b60006001600160801b03828116848216808303821115613d9857613d98613d60565b6000600019821415613f3c57613f3c613d60565b5060010190565b60c0810163ffffffff613f5584613bbf565b168252613f6460208401613ae8565b6001600160401b03808216602085015280613f8160408701613ae8565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e19843603018112613fc457600080fd5b8301803591506001600160401b03821115613fde57600080fd5b6020019150600681901b3603821315613de957600080fd5b60006040828403121561400857600080fd5b6118038383613a79565b60008282101561402457614024613d60565b500390565b600082601f83011261403a57600080fd5b604051604081018181106001600160401b038211171561405c5761405c613a0b565b806040525080604084018581111561407357600080fd5b845b8181101561408d578035835260209283019201614075565b509195945050505050565b6000608082840312156140aa57600080fd5b6140b2613a21565b6140bc8484614029565b81526140cb8460408501614029565b60208201529392505050565b60006001600160801b03828116848216811515828404821116156140fd576140fd613d60565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061413657614136614106565b92169190910492915050565b60006020808352608083016001600160401b038061415f87613ae8565b168386015261416f838701613ae8565b604082821681880152808801359150601e1988360301821261419057600080fd5b908701908135838111156141a357600080fd5b6060935083810236038913156141b857600080fd5b87840184905293849052908401926000919060a088015b8184101561420d578535815286860135878201526001600160801b036141f684880161384e565b1681840152948401946001939093019284016141cf565b9998505050505050505050565b60008261422957614229614106565b500690565b600081600019048311821515161561424857614248613d60565b500290565b6000821982111561426057614260613d60565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff8316806142c5576142c5614106565b8060ff84160691505092915050565b600060ff821660ff8416808210156142ee576142ee613d60565b90039392505050565b60008261430657614306614106565b500490565b60006020828403121561431d57600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212208d5a00bdfaa5c82d49e9710d06eeebb3a877dc10568c3e210691372ed37183ab64736f6c634300080c0033","sourceMap":"1185:6345:128:-:0;;;2233:53;;;;;;;;;-1:-1:-1;2257:22:128;:20;:22::i;:::-;1185:6345;;5388:279:1;5456:13;;;;;;;5455:14;5447:66;;;;-1:-1:-1;;;5447:66:1;;216:2:136;5447:66:1;;;198:21:136;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:136;;;338:37;392:19;;5447:66:1;;;;;;;;5527:12;;5542:15;5527:12;;;:30;5523:138;;;5573:12;:30;;-1:-1:-1;;5573:30:1;5588:15;5573:30;;;;;;5622:28;;564:36:136;;;5622:28:1;;552:2:136;537:18;5622:28:1;;;;;;;5523:138;5388:279::o;422:184:136:-;1185:6345:128;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106101845760003560e01c8063715018a6116100d9578063d5d4bb5a11610087578063d5d4bb5a1461036c578063dd64766e1461037f578063e0f5d9f014610392578063ef024458146103bd578063f2fde38b146103c4578063f4db0571146103d7578063fabc1cbc146103df57600080fd5b8063715018a6146102f457806382616b7b146102fc578063886f11951461030f5780638da5cb5b1461032257806390540c3714610333578063b128aeee14610346578063b3a9e53b1461035957600080fd5b80632db52ea5116101365780632db52ea5146102425780632f65284e146102555780634afa71b914610276578063595c6a671461028e5780635ac86ab7146102965780635c975abb146102c95780636f5b9918146102d157600080fd5b80630510c1911461018957806306aba0e1146101a857806310d67a2f146101cd578063136439dd146101e25780631df9e1d2146101f55780631fb4d41114610208578063245a7bfc1461021b575b600080fd5b610191600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b03909116815260200161019f565b6101e06101db366004613746565b6103f2565b005b6101e06101f0366004613763565b6104ae565b6101e0610203366004613794565b6105db565b6101e06102163660046137ec565b6106cc565b60ce5461023590600160401b90046001600160a01b031681565b60405161019f919061383a565b6101e0610250366004613865565b610755565b610268610263366004613892565b610768565b60405190815260200161019f565b60cd54600160801b90046001600160801b03166101b5565b6101e0610887565b6102b96102a4366004613935565b606654600160ff9092169190911b9081161490565b604051901515815260200161019f565b606654610268565b6102d9610941565b6040805182518152602092830151928101929092520161019f565b6101e0610964565b6101e061030a366004613958565b610978565b606554610235906001600160a01b031681565b6033546001600160a01b0316610235565b6101e06103413660046139b1565b610a9d565b6101e0610354366004613aff565b610bed565b610268610367366004613bd3565b610cd1565b61026861037a366004613c06565b610d02565b6101b561038d366004613763565b610e5b565b60ce546103a5906001600160401b031681565b6040516001600160401b03909116815260200161019f565b60646101b5565b6101e06103d2366004613746565b610e78565b610191600081565b6101e06103ed366004613763565b610eee565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104699190613c4a565b6001600160a01b0316336001600160a01b0316146104a25760405162461bcd60e51b815260040161049990613c67565b60405180910390fd5b6104ab81611045565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906104de90339060040161383a565b602060405180830381865afa1580156104fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f9190613cb1565b61053b5760405162461bcd60e51b815260040161049990613cd3565b606654818116146105af5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610499565b6066819055604051818152339060008051602061434d833981519152906020015b60405180910390a250565b6105e361113c565b60ce546001600160401b03166105fc6020830183613d1b565b6001600160401b0316146106225760405162461bcd60e51b815260040161049990613d36565b61062f6020820182613d1b565b61063a906001613d76565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104ab61066b6040830183613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b7576106a860608302860136819003810190613df0565b8152602001906001019061068b565b505050505060ca61119690919063ffffffff16565b606654600190600290811614156106f55760405162461bcd60e51b815260040161049990613e0c565b61070a6107018461139f565b60ca9084611420565b6107265760405162461bcd60e51b815260040161049990613e3f565b6107506107366020850185613e67565b6107466040860160208701613d1b565b8560a0013561180a565b505050565b61075d61113c565b6104ab60ca82611870565b60006060850135158015906107805750608085013515155b6107c75760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610499565b60006097816107d96020890189613e67565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906108089190613d1b565b6001600160401b0316815260208101919091526040016000205490508061087357826108685760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610499565b610873868585611929565b61087d8686610d02565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906108b790339060040161383a565b602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190613cb1565b6109145760405162461bcd60e51b815260040161049990613cd3565b6000196066819055604051908152339060008051602061434d8339815191529060200160405180910390a2565b61094961361d565b506040805180820190915260cb54815260cc54602082015290565b61096c61113c565b610976600061193a565b565b606654600090600190811614156109a15760405162461bcd60e51b815260040161049990613e0c565b60ce546001600160401b03166109ba6020850185613d1b565b6001600160401b0316146109e05760405162461bcd60e51b815260040161049990613d36565b6109ec6107018461198c565b610a085760405162461bcd60e51b815260040161049990613e3f565b610a156020840184613d1b565b610a20906001613d76565b60ce805467ffffffffffffffff19166001600160401b0392909216919091179055610750610a516040850185613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b757610a8e60608302860136819003810190613df0565b81526020019060010190610a71565b600054610100900460ff1615808015610abd5750600054600160ff909116105b80610ad75750303b158015610ad7575060005460ff166001145b610b3a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610499565b6000805460ff191660011790558015610b5d576000805461ff0019166101001790555b610b688260006119c0565b610b718461193a565b610b7c60ca86611870565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610be6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610c495760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b6044820152606401610499565b60cd546001600160801b031615610ca25760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a65646044820152606401610499565b610cad60ca83611196565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d156020870187613e67565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610d449190613d1b565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610db45760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610499565b610e53610dc46020850185613746565b602085013583610dd76040880188613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e19925050506060890189613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a9892505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610cfc565b610e8061113c565b6001600160a01b038116610ee55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610499565b6104ab8161193a565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f659190613c4a565b6001600160a01b0316336001600160a01b031614610f955760405162461bcd60e51b815260040161049990613c67565b60665419811960665419161461100e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610499565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016105d0565b6001600160a01b0381166110d35760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610499565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b61119e613637565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b8451811015611364578481815181106111e5576111e5613ec8565b6020026020010151935060006112108560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b03908116911681141561127c5760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b6044820152606401610499565b602086015161128b8286613ede565b6112959190613f06565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b0392831617905590945081166112e05785516112d9908690611bd3565b945061130c565b60208601516001600160801b031661130c576113096113028760000151611c6a565b8690611bd3565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a25050808061135c90613f28565b9150506111ca565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016113d39190613f43565b60405160208183030381529060405280519060200120604051602001611403929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820181905260038501549091906001600160801b0316806114945760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a65646044820152606401610499565b60006114a08580613fad565b90506001600160401b038111156114b9576114b9613a0b565b6040519080825280602002602001820160405280156114e2578160200160208202803683370190505b50905060005b6114f28680613fad565b90508110156116cb576115456115088780613fad565b8381811061151857611518613ec8565b90506040020180360381019061152e9190613ff6565b805160009081526020918201519091526040902090565b82828151811061155757611557613ec8565b602090810291909101015280156115ee5781611574600183614012565b8151811061158457611584613ec8565b602002602001015160001c8282815181106115a1576115a1613ec8565b602002602001015160001c116115ee5760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b6044820152606401610499565b600088600001600084848151811061160857611608613ec8565b6020908102919091018101518252810191909152604001600020546001600160801b03169050806116765760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b6044820152606401610499565b6116a96116838880613fad565b8481811061169357611693613ec8565b9050604002018036038101906113029190613ff6565b94506116b58185614012565b93505080806116c390613f28565b9150506114e8565b506116f96116d884611c6a565b6040805180820190915260018a0154815260028a0154602082015290611bd3565b925060008061172c8886611715368b90038b0160208c01614098565b611727368c90038c0160a08d01613ff6565b611cf9565b915091508161177d5760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c656400006044820152606401610499565b806117c15760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b6044820152606401610499565b60038901546064906117e5906001600160801b03600160801b8204811691166140d7565b6117ef919061411c565b6001600160801b0316841015955050505050505b9392505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b03821611156118dc5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b6064820152608401610499565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b8161193484826106cc565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f826040516020016113d39190614142565b6065546001600160a01b03161580156119e157506001600160a01b03821615155b611a635760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610499565b6066819055604051818152339060008051602061434d8339815191529060200160405180910390a2611a9482611045565b5050565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611ad8906034016040516020818303038152906040528688611e58565b9150915081611b225760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610499565b6000611b2d82611e81565b9050600080611b628a604051602001611b4891815260200190565b604051602081830303815290604052888560400151611e58565b9150915081611bb35760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610499565b611bc4611bbf82611f45565b611f58565b9b9a5050505050505050505050565b611bdb61361d565b611be3613657565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611c2257611c24565bfe5b5080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610499565b505092915050565b611c7261361d565b8151158015611c8357506020820151155b15611ca1575050604080518082019091526000808252602082015290565b60405180604001604052808360000151815260200160008051602061436d8339815191528460200151611cd4919061421a565b611cec9060008051602061436d833981519152614012565b905292915050565b919050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611d4157611d41613ec8565b60200201518951600160200201518a60200151600060028110611d6657611d66613ec8565b60200201518b60200151600160028110611d8257611d82613ec8565b602090810291909101518c518d830151604051611ddf9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611e02919061421a565b9050611e4a611e146113028884611f87565b611e1c612003565b611e40611e3185611e2b6120c3565b90611f87565b611e3a8c6120e4565b90611bd3565b886201d4c0612168565b909890975095505050505050565b600060606000611e678661238c565b9050611e748186866123be565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611eae83612499565b90506040518060800160405280611ede83600081518110611ed157611ed1613ec8565b60200260200101516124ac565b8152602001611ef983600181518110611ed157611ed1613ec8565b8152602001611f2183600281518110611f1457611f14613ec8565b60200260200101516124b3565b8152602001611f3c83600381518110611f1457611f14613ec8565b90529392505050565b6060610cfc611f5383612555565b612582565b6000806000602084511115611f6e576020611f71565b83515b60209485015194036008029390931c9392505050565b611f8f61361d565b611f97613675565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611c22575080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610499565b61200b613693565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6120cb61361d565b5060408051808201909152600181526002602082015290565b6120ec61361d565b6000808061210860008051602061436d8339815191528661421a565b90505b6121148161260d565b909350915060008051602061436d83398151915282830983141561214e576040805180820190915290815260208101919091529392505050565b60008051602061436d83398151915260018208905061210b565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061219a6136b8565b60005b600281101561235f5760006121b382600661422e565b90508482600281106121c7576121c7613ec8565b602002015151836121d983600061424d565b600c81106121e9576121e9613ec8565b602002015284826002811061220057612200613ec8565b60200201516020015183826001612217919061424d565b600c811061222757612227613ec8565b602002015283826002811061223e5761223e613ec8565b602002015151518361225183600261424d565b600c811061226157612261613ec8565b602002015283826002811061227857612278613ec8565b602002015151600160200201518361229183600361424d565b600c81106122a1576122a1613ec8565b60200201528382600281106122b8576122b8613ec8565b6020020151602001516000600281106122d3576122d3613ec8565b6020020151836122e483600461424d565b600c81106122f4576122f4613ec8565b602002015283826002811061230b5761230b613ec8565b60200201516020015160016002811061232657612326613ec8565b60200201518361233783600561424d565b600c811061234757612347613ec8565b6020020152508061235781613f28565b91505061219d565b506123686136d7565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606081805190602001206040516020016123a891815260200190565b6040516020818303038152906040529050919050565b6000606060006123cd8561268f565b905060008060006123df848a89612789565b815192955090935091501580806123f35750815b61243f5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610499565b60008161245b5760405180602001604052806000815250612487565b6124878661246a600188614012565b8151811061247a5761247a613ec8565b6020026020010151612bad565b919b919a509098505050505050505050565b6060610cfc6124a783612555565b612bd7565b6000610cfc825b60006021826000015111156124da5760405162461bcd60e51b815260040161049990614265565b60008060006124e885612dbd565b9194509250905060008160018111156125035761250361429c565b146125205760405162461bcd60e51b815260040161049990614265565b6000838660200151612532919061424d565b8051909150602084101561087d5760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060600080600061259285612dbd565b9194509250905060008160018111156125ad576125ad61429c565b146125f55760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610499565b612604856020015184846130f3565b95945050505050565b6000808060008051602061436d833981519152600360008051602061436d8339815191528660008051602061436d833981519152888909090890506000612683827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5260008051602061436d8339815191526131d1565b91959194509092505050565b6060600061269c83612499565b9050600081516001600160401b038111156126b9576126b9613a0b565b6040519080825280602002602001820160405280156126fe57816020015b60408051808201909152606080825260208201528152602001906001900390816126d75790505b50905060005b825181101561278157600061273184838151811061272457612724613ec8565b6020026020010151612582565b9050604051806040016040528082815260200161274d83612499565b81525083838151811061276257612762613ec8565b602002602001018190525050808061277990613f28565b915050612704565b509392505050565b6000606081808061279987613279565b905060008690506000806127c0604051806040016040528060608152602001606081525090565b60005b8c51811015612b85578c81815181106127de576127de613ec8565b6020026020010151915082846127f4919061424d565b935061280160018861424d565b965083612859578151805160209091012085146128545760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610499565b612916565b8151516020116128bb578151805160209091012085146128545760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610499565b846128c983600001516133b3565b146129165760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610499565b6129226010600161424d565b826020015151141561299b57855184141561293c57612b85565b600086858151811061295057612950613ec8565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061297b5761297b613ec8565b6020026020010151905061298e816133db565b9650600194505050612b73565b60028260200151511415612b2b5760006129b483613411565b90506000816000815181106129cb576129cb613ec8565b016020015160f81c905060006129e26002836142b2565b6129ed9060026142d4565b905060006129fe848360ff16613435565b90506000612a0c8b8a613435565b90506000612a1a838361346b565b905060ff851660021480612a31575060ff85166003145b15612a6b57808351148015612a465750808251145b15612a5857612a55818b61424d565b99505b50600160ff1b9950612b85945050505050565b60ff85161580612a7e575060ff85166001145b15612ad45782518114612a9e5750600160ff1b9950612b85945050505050565b612ac58860200151600181518110612ab857612ab8613ec8565b60200260200101516133db565b9a509750612b73945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610499565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610499565b80612b7d81613f28565b9150506127c3565b50600160ff1b841486612b988786613435565b909e909d50909b509950505050505050505050565b60208101518051606091610cfc91612bc790600190614012565b8151811061272457612724613ec8565b6060600080612be584612dbd565b91935090915060019050816001811115612c0157612c0161429c565b14612c485760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610499565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612c615790505090506000835b8651811015612db25760208210612cfa5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610499565b600080612d376040518060400160405280858c60000151612d1b9190614012565b8152602001858c60200151612d30919061424d565b9052612dbd565b509150915060405180604001604052808383612d53919061424d565b8152602001848b60200151612d68919061424d565b815250858581518110612d7d57612d7d613ec8565b6020908102919091010152612d9360018561424d565b9350612d9f818361424d565b612da9908461424d565b92505050612c8e565b508152949350505050565b600080600080846000015111612e105760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610499565b6020840151805160001a607f8111612e355760006001600094509450945050506130ec565b60b78111612ead576000612e4a608083614012565b905080876000015111612e9b5760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610499565b600195509350600092506130ec915050565b60bf8111612f97576000612ec260b783614012565b905080876000015111612f175760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610499565b600183015160208290036101000a9004612f31818361424d565b885111612f7b5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610499565b612f8682600161424d565b96509450600093506130ec92505050565b60f7811161300c576000612fac60c083614012565b905080876000015111612ffb5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610499565b6001955093508492506130ec915050565b600061301960f783614012565b90508087600001511161306e5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610499565b600183015160208290036101000a9004613088818361424d565b8851116130d05760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610499565b6130db82600161424d565b96509450600193506130ec92505050565b9193909250565b60606000826001600160401b0381111561310f5761310f613a0b565b6040519080825280601f01601f191660200182016040528015613139576020820181803683370190505b50905080516000141561314d579050611803565b6000613159858761424d565b90506020820160005b61316d6020876142f7565b8110156131a4578251825261318360208461424d565b925061319060208361424d565b91508061319c81613f28565b915050613162565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6000806131dc6136d7565b6131e46136f5565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611c2257508261326e5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610499565b505195945050505050565b606060008251600261328b919061422e565b6001600160401b038111156132a2576132a2613a0b565b6040519080825280601f01601f1916602001820160405280156132cc576020820181803683370190505b50905060005b83518110156133ac5760048482815181106132ef576132ef613ec8565b01602001516001600160f81b031916901c8261330c83600261422e565b8151811061331c5761331c613ec8565b60200101906001600160f81b031916908160001a905350601084828151811061334757613347613ec8565b0160200151613359919060f81c6142b2565b60f81b8261336883600261422e565b61337390600161424d565b8151811061338357613383613ec8565b60200101906001600160f81b031916908160001a905350806133a481613f28565b9150506132d2565b5092915050565b60006020825110156133c757506020015190565b81806020019051810190610cfc919061430b565b600060606020836000015110156133fc576133f5836134e7565b9050613408565b61340583612582565b90505b611803816133b3565b6060610cfc613430836020015160008151811061272457612724613ec8565b613279565b6060825182106134545750604080516020810190915260008152610cfc565b61180383838486516134669190614012565b6134f2565b6000805b80845111801561347f5750808351115b80156134d0575082818151811061349857613498613ec8565b602001015160f81c60f81b6001600160f81b0319168482815181106134bf576134bf613ec8565b01602001516001600160f81b031916145b1561180357806134df81613f28565b91505061346f565b6060610cfc82613607565b60608161350081601f61424d565b101561351e5760405162461bcd60e51b815260040161049990614324565b82613529838261424d565b10156135475760405162461bcd60e51b815260040161049990614324565b613551828461424d565b845110156135955760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610499565b6060821580156135b457604051915060008252602082016040526135fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156135ed5780518352602092830192016135d5565b5050858452601f01601f1916604052505b50949350505050565b6060610cfc8260200151600084600001516130f3565b604051806040016040528060008152602001600081525090565b604051806040016040528061364a61361d565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806136a6613713565b81526020016136b3613713565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104ab57600080fd5b60006020828403121561375857600080fd5b813561180381613731565b60006020828403121561377557600080fd5b5035919050565b60006060828403121561378e57600080fd5b50919050565b6000602082840312156137a657600080fd5b81356001600160401b038111156137bc57600080fd5b610e538482850161377c565b600060c0828403121561378e57600080fd5b600060e0828403121561378e57600080fd5b60008060e083850312156137ff57600080fd5b61380984846137c8565b915060c08301356001600160401b0381111561382457600080fd5b613830858286016137da565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611cf457600080fd5b60006020828403121561387757600080fd5b6118038261384e565b60006080828403121561378e57600080fd5b60008060008061010085870312156138a957600080fd5b6138b386866137c8565b935060c08501356001600160401b03808211156138cf57600080fd5b6138db88838901613880565b945060e08701359150808211156138f157600080fd5b818701915087601f83011261390557600080fd5b81358181111561391457600080fd5b88602082850101111561392657600080fd5b95989497505060200194505050565b60006020828403121561394757600080fd5b813560ff8116811461180357600080fd5b6000806040838503121561396b57600080fd5b82356001600160401b038082111561398257600080fd5b61398e8683870161377c565b935060208501359150808211156139a457600080fd5b50613830858286016137da565b600080600080608085870312156139c757600080fd5b6139d08561384e565b935060208501356139e081613731565b925060408501356139f081613731565b91506060850135613a0081613731565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a4357613a43613a0b565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613a7157613a71613a0b565b604052919050565b600060408284031215613a8b57600080fd5b613a93613a21565b9050813581526020820135602082015292915050565b600060608284031215613abb57600080fd5b613ac3613a21565b9050613acf8383613a79565b8152613add6040830161384e565b602082015292915050565b80356001600160401b0381168114611cf457600080fd5b60008060408385031215613b1257600080fd5b82356001600160401b0380821115613b2957600080fd5b818501915085601f830112613b3d57600080fd5b8135602082821115613b5157613b51613a0b565b613b5f818360051b01613a49565b82815281810193506060928302850182019289841115613b7e57600080fd5b948201945b83861015613ba457613b958a87613aa9565b85529485019493820193613b83565b509550613bb2878201613ae8565b9450505050509250929050565b803563ffffffff81168114611cf457600080fd5b60008060408385031215613be657600080fd5b613bef83613bbf565b9150613bfd60208401613ae8565b90509250929050565b60008060e08385031215613c1957600080fd5b613c2384846137c8565b915060c08301356001600160401b03811115613c3e57600080fd5b61383085828601613880565b600060208284031215613c5c57600080fd5b815161180381613731565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613cc357600080fd5b8151801515811461180357600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613d2d57600080fd5b61180382613ae8565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613d9857613d98613d60565b01949350505050565b6000808335601e19843603018112613db857600080fd5b8301803591506001600160401b03821115613dd257600080fd5b6020019150606081023603821315613de957600080fd5b9250929050565b600060608284031215613e0257600080fd5b6118038383613aa9565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613e7957600080fd5b61180382613bbf565b6000808335601e19843603018112613e9957600080fd5b8301803591506001600160401b03821115613eb357600080fd5b602001915036819003821315613de957600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613efe57613efe613d60565b039392505050565b60006001600160801b03828116848216808303821115613d9857613d98613d60565b6000600019821415613f3c57613f3c613d60565b5060010190565b60c0810163ffffffff613f5584613bbf565b168252613f6460208401613ae8565b6001600160401b03808216602085015280613f8160408701613ae8565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e19843603018112613fc457600080fd5b8301803591506001600160401b03821115613fde57600080fd5b6020019150600681901b3603821315613de957600080fd5b60006040828403121561400857600080fd5b6118038383613a79565b60008282101561402457614024613d60565b500390565b600082601f83011261403a57600080fd5b604051604081018181106001600160401b038211171561405c5761405c613a0b565b806040525080604084018581111561407357600080fd5b845b8181101561408d578035835260209283019201614075565b509195945050505050565b6000608082840312156140aa57600080fd5b6140b2613a21565b6140bc8484614029565b81526140cb8460408501614029565b60208201529392505050565b60006001600160801b03828116848216811515828404821116156140fd576140fd613d60565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061413657614136614106565b92169190910492915050565b60006020808352608083016001600160401b038061415f87613ae8565b168386015261416f838701613ae8565b604082821681880152808801359150601e1988360301821261419057600080fd5b908701908135838111156141a357600080fd5b6060935083810236038913156141b857600080fd5b87840184905293849052908401926000919060a088015b8184101561420d578535815286860135878201526001600160801b036141f684880161384e565b1681840152948401946001939093019284016141cf565b9998505050505050505050565b60008261422957614229614106565b500690565b600081600019048311821515161561424857614248613d60565b500290565b6000821982111561426057614260613d60565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff8316806142c5576142c5614106565b8060ff84160691505092915050565b600060ff821660ff8416808210156142ee576142ee613d60565b90039392505050565b60008261430657614306614106565b500490565b60006020828403121561431d57600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212208d5a00bdfaa5c82d49e9710d06eeebb3a877dc10568c3e210691372ed37183ab64736f6c634300080c0033","sourceMap":"1185:6345:128:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1707:50;;1756:1;1707:50;;;;;186:4:136;174:17;;;156:36;;144:2;129:18;1707:50:128;;;;;;;;6909:106;6984:24;;-1:-1:-1;;;;;6984:24:128;6909:106;;;-1:-1:-1;;;;;367:32:136;;;349:51;;337:2;322:18;6909:106:128;203:203:136;5826:138:45;;;;;;:::i;:::-;;:::i;:::-;;3832:392;;;;;;:::i;:::-;;:::i;5681:272:128:-;;;;;;:::i;:::-;;:::i;4396:387::-;;;;;;:::i;:::-;;:::i;2080:25::-;;;;;-1:-1:-1;;;2080:25:128;;-1:-1:-1;;;;;2080:25:128;;;;;;;;;;:::i;6129:150::-;;;;;;:::i;:::-;;:::i;2347:670:117:-;;;;;;:::i;:::-;;:::i;:::-;;;4264:25:136;;;4252:2;4237:18;2347:670:117;4118:177:136;7136:114:128;7215:28;;-1:-1:-1;;;7215:28:128;;-1:-1:-1;;;;;7215:28:128;7136:114;;4299:136:45;;;:::i;5606:149::-;;;;;;:::i;:::-;5724:7;;5695:1;:10;;;;;;;;5724:14;;;5723:24;;5606:149;;;;4739:14:136;;4732:22;4714:41;;4702:2;4687:18;5606:149:45;4574:187:136;5418:87:45;5491:7;;5418:87;;6693:103:128;;;:::i;:::-;;;;5164:13:136;;5146:32;;5234:4;5222:17;;;5216:24;5194:20;;;5187:54;;;;5119:18;6693:103:128;4948:299:136;2071:101:0;;;:::i;3679:482:128:-;;;;;;:::i;:::-;;:::i;1825:37:45:-;;;;;-1:-1:-1;;;;;1825:37:45;;;1441:85:0;1513:6;;-1:-1:-1;;;;;1513:6:0;1441:85;;2567:377:128;;;;;;:::i;:::-;;:::i;3134:336::-;;;;;;:::i;:::-;;:::i;1748:155:117:-;;;;;;:::i;:::-;;:::i;3258:550::-;;;;;;:::i;:::-;;:::i;6419:145:128:-;;;;;;:::i;:::-;;:::i;1948:34::-;;;;;-1:-1:-1;;;;;1948:34:128;;;;;;-1:-1:-1;;;;;10616:31:136;;;10598:50;;10586:2;10571:18;1948:34:128;10454:200:136;7402:126:128;697:3:120;7402:126:128;;2321:198:0;;;;;;:::i;:::-;;:::i;1572:52:128:-;;1623:1;1572:52;;4911:437:45;;;;;;:::i;:::-;;:::i;5826:138::-;2285:14;;;;;;;;;-1:-1:-1;;;;;2285:14:45;-1:-1:-1;;;;;2285:23:45;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2271:39:45;:10;-1:-1:-1;;;;;2271:39:45;;2263:94;;;;-1:-1:-1;;;2263:94:45;;;;;;;:::i;:::-;;;;;;;;;5920:37:::1;5939:17;5920:18;:37::i;:::-;5826:138:::0;:::o;3832:392::-;2125:14;;:35;;-1:-1:-1;;;2125:35:45;;-1:-1:-1;;;;;2125:14:45;;;;:23;;:35;;2149:10;;2125:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2117:88;;;;-1:-1:-1;;;2117:88:45;;;;;;;:::i;:::-;4064:7:::1;::::0;4034:25;;::::1;4033:38;4025:107;;;::::0;-1:-1:-1;;;4025:107:45;;12505:2:136;4025:107:45::1;::::0;::::1;12487:21:136::0;12544:2;12524:18;;;12517:30;12583:34;12563:18;;;12556:62;-1:-1:-1;;;12634:18:136;;;12627:54;12698:19;;4025:107:45::1;12303:420:136::0;4025:107:45::1;4142:7;:25:::0;;;4182:35:::1;::::0;4264:25:136;;;4189:10:45::1;::::0;-1:-1:-1;;;;;;;;;;;4182:35:45;4252:2:136;4237:18;4182:35:45::1;;;;;;;;3832:392:::0;:::o;5681:272:128:-;1334:13:0;:11;:13::i;:::-;5808:20:128::1;::::0;-1:-1:-1;;;;;5808:20:128::1;5794:10;;::::0;::::1;:7:::0;:10:::1;:::i;:::-;-1:-1:-1::0;;;;;5794:34:128::1;;5786:63;;;;-1:-1:-1::0;;;5786:63:128::1;;;;;;;:::i;:::-;5883:10;;::::0;::::1;:7:::0;:10:::1;:::i;:::-;:14;::::0;5896:1:::1;5883:14;:::i;:::-;5860:20;:37:::0;;-1:-1:-1;;5860:37:128::1;-1:-1:-1::0;;;;;5860:37:128;;;::::1;::::0;;;::::1;::::0;;5908:38:::1;5928:17;;::::0;::::1;::::0;::::1;:::i;:::-;5908:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;:12;:19;;:38;;;;:::i;4396:387::-:0;5724:7:45;;1756:1:128;;5695:10:45;5724:14;;;5723:24;2767:14;2759:52;;;;-1:-1:-1;;;2759:52:45;;;;;;;:::i;:::-;4608:66:128::1;4636:22;:7;:20;:22::i;:::-;4608:12;::::0;4660:13;4608:27:::1;:66::i;:::-;4600:93;;;;-1:-1:-1::0;;;4600:93:128::1;;;;;;;:::i;:::-;4704:72;4719:16;;::::0;::::1;:7:::0;:16:::1;:::i;:::-;4737:19;::::0;;;::::1;::::0;::::1;;:::i;:::-;4758:7;:17;;;4704:14;:72::i;:::-;4396:387:::0;;;:::o;6129:150::-;1334:13:0;:11;:13::i;:::-;6221:51:128::1;:12;6253:18:::0;6221:31:::1;:51::i;2347:670:117:-:0;2531:7;2571:27;;;;:41;;;;:83;;-1:-1:-1;2616:24:117;;;;:38;;2571:83;2550:154;;;;-1:-1:-1;;;2550:154:117;;15540:2:136;2550:154:117;;;15522:21:136;15579:2;15559:18;;;15552:30;-1:-1:-1;;;15598:18:136;;;15591:54;15662:18;;2550:154:117;15338:348:136;2550:154:117;2715:17;2735;2715;2753:16;;;;:7;:16;:::i;:::-;2735:35;;;;;;;;;;;;;;;:56;2771:7;:19;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2735:56:117;;;;;;;;;;;;-1:-1:-1;2735:56:117;;;-1:-1:-1;2806:23:117;2802:154;;2853:21;2845:49;;;;-1:-1:-1;;;2845:49:117;;15893:2:136;2845:49:117;;;15875:21:136;15932:2;15912:18;;;15905:30;-1:-1:-1;;;15951:18:136;;;15944:45;16006:18;;2845:49:117;15691:339:136;2845:49:117;2909:36;2926:7;2935:9;;2909:16;:36::i;:::-;2973:37;2989:7;2998:11;2973:15;:37::i;:::-;2966:44;2347:670;-1:-1:-1;;;;;;2347:670:117:o;4299:136:45:-;2125:14;;:35;;-1:-1:-1;;;2125:35:45;;-1:-1:-1;;;;;2125:14:45;;;;:23;;:35;;2149:10;;2125:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2117:88;;;;-1:-1:-1;;;2117:88:45;;;;;;;:::i;:::-;-1:-1:-1;;4349:7:45::1;:27:::0;;;4391:37:::1;::::0;4264:25:136;;;4398:10:45::1;::::0;-1:-1:-1;;;;;;;;;;;4391:37:45;4252:2:136;4237:18;4391:37:45::1;;;;;;;4299:136::o:0;6693:103:128:-;6734:20;;:::i;:::-;-1:-1:-1;6766:23:128;;;;;;;;;6773:16;6766:23;;;;;;;;;;6693:103::o;2071:101:0:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;3679:482:128:-;5724:7:45;;1623:1:128;;5695::45;5724:14;;;5723:24;2767:14;2759:52;;;;-1:-1:-1;;;2759:52:45;;;;;;;:::i;:::-;3913:20:128::1;::::0;-1:-1:-1;;;;;3913:20:128::1;3899:10;;::::0;::::1;:7:::0;:10:::1;:::i;:::-;-1:-1:-1::0;;;;;3899:34:128::1;;3891:63;;;;-1:-1:-1::0;;;3891:63:128::1;;;;;;;:::i;:::-;3972:66;4000:22;:7;:20;:22::i;3972:66::-;3964:93;;;;-1:-1:-1::0;;;3964:93:128::1;;;;;;;:::i;:::-;4091:10;;::::0;::::1;:7:::0;:10:::1;:::i;:::-;:14;::::0;4104:1:::1;4091:14;:::i;:::-;4068:20;:37:::0;;-1:-1:-1;;4068:37:128::1;-1:-1:-1::0;;;;;4068:37:128;;;::::1;::::0;;;::::1;::::0;;4116:38:::1;4136:17;;::::0;::::1;::::0;::::1;:::i;:::-;4116:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;2567:377:::0;3111:19:1;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:1;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:1;1476:19:3;:23;;;3219:66:1;;-1:-1:-1;3268:12:1;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:1;;16237:2:136;3157:201:1;;;16219:21:136;16276:2;16256:18;;;16249:30;16315:34;16295:18;;;16288:62;-1:-1:-1;;;16366:18:136;;;16359:44;16420:19;;3157:201:1;16035:410:136;3157:201:1;3368:12;:16;;-1:-1:-1;;3368:16:1;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:1;;;;;3394:65;2755:47:128::1;2773:15;2000:1:45;2755:17:128;:47::i;:::-;2812:32;2831:12;2812:18;:32::i;:::-;2854:48;:12;2886:15:::0;2854:31:::1;:48::i;:::-;2913:10;:24:::0;;-1:-1:-1;;;;;;;;2913:24:128::1;-1:-1:-1::0;;;;;;;;2913:24:128;::::1;;;::::0;;3479:99:1;;;;3529:5;3513:21;;-1:-1:-1;;3513:21:1;;;3553:14;;-1:-1:-1;156:36:136;;3553:14:1;;144:2:136;129:18;3553:14:1;;;;;;;3479:99;3101:483;2567:377:128;;;;:::o;3134:336::-;2170:10;;-1:-1:-1;;;2170:10:128;;-1:-1:-1;;;;;2170:10:128;2156;:24;2148:61;;;;-1:-1:-1;;;2148:61:128;;16851:2:136;2148:61:128;;;16833:21:136;16890:2;16870:18;;;16863:30;-1:-1:-1;;;16909:18:136;;;16902:54;16973:18;;2148:61:128;16649:348:136;2148:61:128;3302:24;;-1:-1:-1;;;;;3302:24:128::1;:29:::0;3294:74:::1;;;::::0;-1:-1:-1;;;3294:74:128;;17204:2:136;3294:74:128::1;::::0;::::1;17186:21:136::0;;;17223:18;;;17216:30;17282:34;17262:18;;;17255:62;17334:18;;3294:74:128::1;17002:356:136::0;3294:74:128::1;3379:30;:12;3399:9:::0;3379:19:::1;:30::i;:::-;3419:20;:44:::0;;-1:-1:-1;;3419:44:128::1;-1:-1:-1::0;;;;;3419:44:128;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;3134:336:128:o;1748:155:117:-;1856:27;;;1830:7;1856:27;;;:17;:27;;;;;;;;-1:-1:-1;;;;;1856:40:117;;;;;;;;;;1748:155;;;;;:::o;3258:550::-;3404:7;;3447:17;3404:7;3465:16;;;;:7;:16;:::i;:::-;3447:35;;;;;;;;;;;;;;;:56;3483:7;:19;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3447:56:117;-1:-1:-1;;;;;3447:56:117;;;;;;;;;;;;;3427:76;;3535:7;:17;;;3522:9;:30;3514:66;;;;-1:-1:-1;;;3514:66:117;;17565:2:136;3514:66:117;;;17547:21:136;17604:2;17584:18;;;17577:30;-1:-1:-1;;;17623:18:136;;;17616:53;17686:18;;3514:66:117;17363:347:136;3514:66:117;3598:203;3628:18;;;;:11;:18;:::i;:::-;3660:22;;;;3696:9;3719:28;;;;3660:11;3719:28;:::i;:::-;3598:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3761:30:117;;-1:-1:-1;;;3761:30:117;;;;;:::i;:::-;3598:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3598:16:117;;-1:-1:-1;;;3598:203:117:i;:::-;3591:210;3258:550;-1:-1:-1;;;;3258:550:117:o;6419:145:128:-;6489:7;2584:35:120;;;6515:12:128;2584:35:120;;;;;;-1:-1:-1;;;;;2584:35:120;6515:42:128;2462:164:120;2321:198:0;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:0;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:0;;18443:2:136;2401:73:0::1;::::0;::::1;18425:21:136::0;18482:2;18462:18;;;18455:30;18521:34;18501:18;;;18494:62;-1:-1:-1;;;18572:18:136;;;18565:36;18618:19;;2401:73:0::1;18241:402:136::0;2401:73:0::1;2484:28;2503:8;2484:18;:28::i;4911:437:45:-:0;2285:14;;;;;;;;;-1:-1:-1;;;;;2285:14:45;-1:-1:-1;;;;;2285:23:45;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2271:39:45;:10;-1:-1:-1;;;;;2271:39:45;;2263:94;;;;-1:-1:-1;;;2263:94:45;;;;;;;:::i;:::-;5164:7:::1;;5163:8;5141:15;5140:16;5128:7;;5127:8;5126:31;5125:47;5104:150;;;::::0;-1:-1:-1;;;5104:150:45;;18850:2:136;5104:150:45::1;::::0;::::1;18832:21:136::0;18889:2;18869:18;;;18862:30;18928:34;18908:18;;;18901:62;-1:-1:-1;;;18979:18:136;;;18972:54;19043:19;;5104:150:45::1;18648:420:136::0;5104:150:45::1;5264:7;:25:::0;;;5304:37:::1;::::0;4264:25:136;;;5313:10:45::1;::::0;5304:37:::1;::::0;4252:2:136;4237:18;5304:37:45::1;4118:177:136::0;6024:360:45;-1:-1:-1;;;;;6127:40:45;;6106:160;;;;-1:-1:-1;;;6106:160:45;;19275:2:136;6106:160:45;;;19257:21:136;19314:2;19294:18;;;19287:30;19353:34;19333:18;;;19326:62;19424:34;19404:18;;;19397:62;-1:-1:-1;;;19475:19:136;;;19468:40;19525:19;;6106:160:45;19073:477:136;6106:160:45;6299:14;;6281:52;;;-1:-1:-1;;;;;6299:14:45;;;19815:34:136;;19885:15;;;19880:2;19865:18;;19858:43;6281:52:45;;19750:18:136;6281:52:45;;;;;;;6343:14;:34;;-1:-1:-1;;;;;;6343:34:45;-1:-1:-1;;;;;6343:34:45;;;;;;;;;;6024:360::o;1599:130:0:-;1513:6;;-1:-1:-1;;;;;1513:6:0;929:10:4;1662:23:0;1654:68;;;;-1:-1:-1;;;1654:68:0;;20114:2:136;1654:68:0;;;20096:21:136;;;20133:18;;;20126:30;20192:34;20172:18;;;20165:62;20244:18;;1654:68:0;19912:356:136;2828:1048:120;2918:24;;:::i;:::-;2953:38;;;;;;;;;2983:8;;;2953:38;;;;;;;;;;;3026:16;;;;-1:-1:-1;;;;;3026:16:120;2953:27;3053:746;3077:9;:16;3073:1;:20;3053:746;;;3125:9;3135:1;3125:12;;;;;;;;:::i;:::-;;;;;;;3114:23;;3152:18;3173:29;:8;:15;;;10534:9:71;;10473:16;10524:20;;;10580:4;10576:13;;;10570:20;10557:34;;;10629:4;10616:18;;;10404:246;3173:29:120;3216:21;3240:35;;;;;;;;;;;;3298:15;;;;3152:50;;-1:-1:-1;;;;;;3240:35:120;;;;3298:32;;;;3290:67;;;;-1:-1:-1;;;3290:67:120;;20607:2:136;3290:67:120;;;20589:21:136;20646:2;20626:18;;;20619:30;-1:-1:-1;;;20665:18:136;;;20658:52;20727:18;;3290:67:120;20405:346:136;3290:67:120;3422:15;;;;3389:30;3406:13;3389:14;:30;:::i;:::-;:48;;;;:::i;:::-;3490:15;;;;;3452:23;:35;;;;;;;;;;;:53;;-1:-1:-1;;;;;;3452:53:120;-1:-1:-1;;;;;3452:53:120;;;;;;3372:65;;-1:-1:-1;3524:18:120;;3520:205;;3583:15;;3571:28;;:6;;:11;:28::i;:::-;3562:37;;3520:205;;;3624:15;;;;-1:-1:-1;;;;;3624:20:120;3620:105;;3673:37;3685:24;:8;:15;;;:22;:24::i;:::-;3673:6;;:11;:37::i;:::-;3664:46;;3620:105;3772:15;;;;;3744:44;;-1:-1:-1;;;;;367:32:136;;;349:51;;3760:10:120;;3744:44;;322:18:136;3744:44:120;;;;;;;3100:699;;3095:3;;;;;:::i;:::-;;;;3053:746;;;-1:-1:-1;3809:16:120;;;:33;;-1:-1:-1;;;;;;3809:33:120;-1:-1:-1;;;;;3809:33:120;;;;;;;;;;3852:17;;-1:-1:-1;3852:8:120;;:17;;;;-1:-1:-1;3852:17:120;;;;;;;-1:-1:-1;;2828:1048:120:o;1127:188:119:-;1198:7;939:41;1297:7;1286:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;1276:30;;;;;;1234:73;;;;;;;;22278:25:136;;;22334:2;22319:18;;22312:34;22266:2;22251:18;;22104:248;1234:73:119;;;;;;;;;;;;;1224:84;;;;;;1217:91;;1127:188;;;:::o;4236:1467:120:-;4435:19;;;;;;;;;4388:4;4435:19;;;;;;;;;4481:16;;;;4388:4;;4435:19;-1:-1:-1;;;;;4481:16:120;4516:11;4508:56;;;;-1:-1:-1;;;4508:56:120;;22559:2:136;4508:56:120;;;22541:21:136;;;22578:18;;;22571:30;22637:34;22617:18;;;22610:62;22689:18;;4508:56:120;22357:356:136;4508:56:120;4575:38;4630:30;:13;;:30;:::i;:::-;:37;;-1:-1:-1;;;;;4616:52:120;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4616:52:120;;4575:93;;4684:9;4679:592;4703:30;:13;;:30;:::i;:::-;:37;;4699:1;:41;4679:592;;;4788:47;:30;:13;;:30;:::i;:::-;4819:1;4788:33;;;;;;;:::i;:::-;;;;;;:45;;;;;;;;;;:::i;:::-;10534:9:71;;10473:16;10524:20;;;10580:4;10576:13;;;10570:20;10557:34;;;10629:4;10616:18;;;10404:246;4788:47:120;4761:21;4783:1;4761:24;;;;;;;;:::i;:::-;;;;;;;;;;:74;4854:6;;4850:149;;4932:21;4954:5;4958:1;4954;:5;:::i;:::-;4932:28;;;;;;;;:::i;:::-;;;;;;;4924:37;;4896:21;4918:1;4896:24;;;;;;;;:::i;:::-;;;;;;;4888:33;;:73;4880:104;;;;-1:-1:-1;;;4880:104:120;;23861:2:136;4880:104:120;;;23843:21:136;23900:2;23880:18;;;23873:30;-1:-1:-1;;;23919:18:136;;;23912:48;23977:18;;4880:104:120;23659:342:136;4880:104:120;5013:22;5038:4;:23;;:49;5062:21;5084:1;5062:24;;;;;;;;:::i;:::-;;;;;;;;;;;;5038:49;;;;;;;;;;-1:-1:-1;5038:49:120;;-1:-1:-1;;;;;5038:49:120;;-1:-1:-1;5110:19:120;5102:56;;;;-1:-1:-1;;;5102:56:120;;24208:2:136;5102:56:120;;;24190:21:136;24247:2;24227:18;;;24220:30;-1:-1:-1;;;24266:18:136;;;24259:54;24330:18;;5102:56:120;24006:348:136;5102:56:120;5179:43;5188:30;:13;;:30;:::i;:::-;5219:1;5188:33;;;;;;;:::i;:::-;;;;;;5179:43;;;;;;;;;;:::i;:::-;5173:49;-1:-1:-1;5236:24:120;5246:14;5236:24;;:::i;:::-;;;4747:524;4742:3;;;;;:::i;:::-;;;;4679:592;;;;5287:27;5301:12;:3;:10;:12::i;:::-;5287:13;;;;;;;;;:8;;;:13;;;;;;;;;;;;;:27::i;:::-;5281:33;-1:-1:-1;5326:22:120;;5387:86;5418:7;5281:33;5387:86;;;;;;;5432:19;;;5387:86;:::i;:::-;;;;;;;;5453:19;;;5387:86;:::i;:::-;:30;:86::i;:::-;5325:148;;;;5492:17;5484:60;;;;-1:-1:-1;;;5484:60:120;;25608:2:136;5484:60:120;;;25590:21:136;25647:2;25627:18;;;25620:30;25686:32;25666:18;;;25659:60;25736:18;;5484:60:120;25406:354:136;5484:60:120;5562:16;5554:49;;;;-1:-1:-1;;;5554:49:120;;25967:2:136;5554:49:120;;;25949:21:136;26006:2;25986:18;;;25979:30;-1:-1:-1;;;26025:18:136;;;26018:50;26085:18;;5554:49:120;25765:344:136;5554:49:120;5651:20;;;;697:3;;5632:39;;-1:-1:-1;;;;;;;;5651:20:120;;;;;5632:16;:39;:::i;:::-;5631:65;;;;:::i;:::-;-1:-1:-1;;;;;5621:75:120;:6;:75;;5614:82;;;;;;;4236:1467;;;;;;:::o;6380:224:117:-;6479:27;;;;;;;:17;:27;;;;;;;;-1:-1:-1;;;;;6479:40:117;;;;;;;;;;;;:52;;;6547:50;4264:25:136;;;6479:40:117;;:27;6547:50;;4237:18:136;6547:50:117;;;;;;;6380:224;;;:::o;1987:303:120:-;697:3;-1:-1:-1;;;;;2093:40:120;;;;2085:94;;;;-1:-1:-1;;;2085:94:120;;26931:2:136;2085:94:120;;;26913:21:136;26970:2;26950:18;;;26943:30;27009:34;26989:18;;;26982:62;-1:-1:-1;;;27060:18:136;;;27053:39;27109:19;;2085:94:120;26729:405:136;2085:94:120;2190:20;;;:38;;-1:-1:-1;;;;;2190:38:120;;;-1:-1:-1;;;2190:38:120;;;;;;;;;;2244:39;;;;-1:-1:-1;;2244:39:120;1987:303;;:::o;5000:349:128:-;5256:27;5303:39;5319:7;5256:27;5303:15;:39::i;:::-;5143:206;5000:349;;;:::o;2673:187:0:-;2765:6;;;-1:-1:-1;;;;;2781:17:0;;;-1:-1:-1;;;;;;2781:17:0;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;913:190:118:-;984:7;720:43;1085:7;1074:19;;;;;;;;:::i;2943:441:45:-;3077:14;;-1:-1:-1;;;;;3077:14:45;3069:37;:79;;;;-1:-1:-1;;;;;;3110:38:45;;;;3069:79;3048:197;;;;-1:-1:-1;;;3048:197:45;;28809:2:136;3048:197:45;;;28791:21:136;28848:2;28828:18;;;28821:30;28887:34;28867:18;;;28860:62;28958:34;28938:18;;;28931:62;-1:-1:-1;;;29009:19:136;;;29002:38;29057:19;;3048:197:45;28607:475:136;3048:197:45;3255:7;:26;;;3296:36;;4264:25:136;;;3303:10:45;;-1:-1:-1;;;;;;;;;;;3296:36:45;4252:2:136;4237:18;3296:36:45;;;;;;;3342:35;3361:15;3342:18;:35::i;:::-;2943:441;;:::o;4378:840:117:-;4695:24;;-1:-1:-1;;29236:2:136;29232:15;;;29228:53;4695:24:117;;;29216:66:136;4586:7:117;;;;;;4670:79;;29298:12:136;;4695:24:117;;;;;;;;;;;;4721:16;4739:9;4670:24;:79::i;:::-;4605:144;;;;4768:6;4760:41;;;;-1:-1:-1;;;4760:41:117;;29523:2:136;4760:41:117;;;29505:21:136;29562:2;29542:18;;;29535:30;-1:-1:-1;;;29581:18:136;;;29574:52;29643:18;;4760:41:117;29321:346:136;4760:41:117;4812:38;4853:53;4883:22;4853:29;:53::i;:::-;4812:94;;4918:18;4938:27;4981:89;5023:4;5006:22;;;;;;29801:19:136;;29845:2;29836:12;;29672:182;5006:22:117;;;;;;;;;;;;;5030:18;5050:7;:19;;;4981:24;:89::i;:::-;4917:153;;;;5089:13;5081:54;;;;-1:-1:-1;;;5081:54:117;;30061:2:136;5081:54:117;;;30043:21:136;30100:2;30080:18;;;30073:30;30139;30119:18;;;30112:58;30187:18;;5081:54:117;29859:352:136;5081:54:117;5153:58;5171:39;5195:14;5171:23;:39::i;:::-;5153:17;:58::i;:::-;5146:65;4378:840;-1:-1:-1;;;;;;;;;;;4378:840:117:o;4823:615:71:-;4898:16;;:::i;:::-;4926:23;;:::i;:::-;4970:4;;4959:15;;:8;4995:4;;;;4984:8;;;:15;5020:4;;5009:8;;;;:15;;;;5045:4;;;;5034:8;;;:15;-1:-1:-1;;5225:1:71;5219:4;4959:15;5209:1;5202:4;5195:5;5191:16;5180:53;5169:64;-1:-1:-1;5169:64:71;5330:48;;;;5303:75;;5330:48;5355:9;5303:75;;5406:7;5398:33;;;;-1:-1:-1;;;5398:33:71;;30418:2:136;5398:33:71;;;30400:21:136;30457:2;30437:18;;;30430:30;-1:-1:-1;;;30476:18:136;;;30469:43;30529:18;;5398:33:71;30216:337:136;5398:33:71;4916:522;;4823:615;;;;:::o;4461:295::-;4518:14;;:::i;:::-;4600:3;;:8;:20;;;;-1:-1:-1;4612:3:71;;;;:8;4600:20;4596:154;;;-1:-1:-1;;4643:13:71;;;;;;;;;-1:-1:-1;4643:13:71;;;;;;;;4461:295::o;4596:154::-;4694:45;;;;;;;;4702:1;:3;;;4694:45;;;;-1:-1:-1;;;;;;;;;;;4721:1:71;:3;;;:16;;;;:::i;:::-;4707:31;;-1:-1:-1;;;;;;;;;;;4707:31:71;:::i;:::-;4694:45;;4687:52;4461:295;-1:-1:-1;;4461:295:71:o;4596:154::-;4461:295;;;:::o;6046:814:120:-;6245:22;6269:21;6302:13;2037:77:71;6404:7:120;6413:3;:5;;;6420:3;:5;;;6427;:7;;;6435:1;6427:10;;;;;;;:::i;:::-;;;;;6439:7;;6447:1;6439:10;;;;6451:5;:7;;;6459:1;6451:10;;;;;;;:::i;:::-;;;;;6463:5;:7;;;6471:1;6463:10;;;;;;;:::i;:::-;;;;;;;;;;6475:7;;6484;;;;6366:143;;;;;;;;;;;31028:19:136;;;31072:2;31063:12;;31056:28;;;;31109:2;31100:12;;31093:28;;;;31146:2;31137:12;;31130:28;;;;31183:3;31174:13;;31167:29;;;;31221:3;31212:13;;31205:29;31259:3;31250:13;;31243:29;31297:3;31288:13;;31281:29;31335:3;31326:13;;31319:29;31373:3;31364:13;;30675:708;6366:143:120;;;;;;;;;;;;;6339:184;;;;;;6318:215;;:234;;;;:::i;:::-;6302:250;-1:-1:-1;6603:250:120;6634:33;6645:21;:3;6302:250;6645:14;:21::i;6634:33::-;6681:22;:20;:22::i;:::-;6717:67;6746:37;6777:5;6746:19;:17;:19::i;:::-;:30;;:37::i;:::-;6717:23;6732:7;6717:14;:23::i;:::-;:28;;:67::i;:::-;6798:5;891:6;6603:17;:250::i;:::-;6563:290;;;;-1:-1:-1;6046:814:120;-1:-1:-1;;;;;;6046:814:120:o;1669:266:108:-;1790:12;1804:19;1835:16;1854:19;1868:4;1854:13;:19::i;:::-;1835:38;;1890;1909:3;1914:6;1922:5;1890:18;:38::i;:::-;1883:45;;;;;1669:266;;;;;;:::o;2769:521:102:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2916:32:102;2939:8;2916:22;:32::i;:::-;2870:78;;2978:305;;;;;;;;3014:42;3040:12;3053:1;3040:15;;;;;;;;:::i;:::-;;;;;;;3014:25;:42::i;:::-;2978:305;;;;3083:42;3109:12;3122:1;3109:15;;;;;;;;:::i;3083:42::-;2978:305;;;;3156:42;3182:12;3195:1;3182:15;;;;;;;;:::i;:::-;;;;;;;3156:25;:42::i;:::-;2978:305;;;;3226:42;3252:12;3265:1;3252:15;;;;;;;;:::i;3226:42::-;2978:305;;2959:324;2769:521;-1:-1:-1;;;2769:521:102:o;3430:123:105:-;3490:12;3521:25;3531:14;3541:3;3531:9;:14::i;:::-;3521:9;:25::i;5846:290:117:-;5917:7;5936:11;5957;5988:2;5971:6;:13;:19;;:40;;6009:2;5971:40;;;5993:6;:13;5971:40;6095:2;6083:15;;;6077:22;6059:12;;6073:1;6055:20;6051:49;;;;;5846:290;-1:-1:-1;;;5846:290:117:o;7084:580:71:-;7156:16;;:::i;:::-;7184:23;;:::i;:::-;7228:3;;7217:14;;:8;7252:3;;;;7241:8;;;:14;7265:8;;;;:12;;;-1:-1:-1;;7452:1:71;7446:4;7217:14;7436:1;7429:4;7422:5;7418:16;7407:53;7396:64;-1:-1:-1;7396:64:71;7557:48;;;;7530:75;7632:7;7624:33;;;;-1:-1:-1;;;7624:33:71;;31590:2:136;7624:33:71;;;31572:21:136;31629:2;31609:18;;;31602:30;-1:-1:-1;;;31648:18:136;;;31641:43;31701:18;;7624:33:71;31388:337:136;4070:128:71;4119:14;;:::i;:::-;-1:-1:-1;4152:39:71;;;;;;;;3635:77;4152:39;;;;;;3752:77;4152:39;;;;;;;;;;;;;;3869:77;4152:39;;3986:77;4152:39;;;;;;;;;;;;;;;4070:128::o;2313:99::-;2359:14;;:::i;:::-;-1:-1:-1;2392:13:71;;;;;;;;;2400:1;2392:13;;2403:1;2392:13;;;;;2313:99::o;11044:451::-;11097:14;;:::i;:::-;11123:12;;;11185:24;-1:-1:-1;;;;;;;;;;;11193:2:71;11185:24;:::i;:::-;11173:36;;11220:239;11259:13;11270:1;11259:10;:13::i;:::-;11247:25;;-1:-1:-1;11247:25:71;-1:-1:-1;;;;;;;;;;;;11336:1:71;11333;11326:24;11318:4;:32;11314:92;;;11378:13;;;;;;;;;;;;;;;;;;;;11044:451;-1:-1:-1;;;11044:451:71:o;11314:92::-;-1:-1:-1;;;;;;;;;;;11434:1:71;11431;11424:24;11420:28;;11220:239;;9189:1112;9397:31;;;;;;;;;;;;;;;;;;9438;;;;;;;;;;;;;;;;9375:4;;;;9397:31;9480:24;;:::i;:::-;9520:9;9515:302;9539:1;9535;:5;9515:302;;;9561:9;9573:5;:1;9577;9573:5;:::i;:::-;9561:17;;9607:2;9610:1;9607:5;;;;;;;:::i;:::-;;;;;:7;9592:5;9598;:1;9607:7;9598:5;:::i;:::-;9592:12;;;;;;;:::i;:::-;;;;:22;9643:2;9646:1;9643:5;;;;;;;:::i;:::-;;;;;:7;;;9628:5;9634:1;9638;9634:5;;;;:::i;:::-;9628:12;;;;;;;:::i;:::-;;;;:22;9679:2;9682:1;9679:5;;;;;;;:::i;:::-;;;;;:7;:10;9664:5;9670;:1;9674;9670:5;:::i;:::-;9664:12;;;;;;;:::i;:::-;;;;:25;9718:2;9721:1;9718:5;;;;;;;:::i;:::-;;;;;:7;9726:1;9718:10;;;;9703:5;9709;:1;9713;9709:5;:::i;:::-;9703:12;;;;;;;:::i;:::-;;;;:25;9757:2;9760:1;9757:5;;;;;;;:::i;:::-;;;;;:7;;;9765:1;9757:10;;;;;;;:::i;:::-;;;;;9742:5;9748;:1;9752;9748:5;:::i;:::-;9742:12;;;;;;;:::i;:::-;;;;:25;9796:2;9799:1;9796:5;;;;;;;:::i;:::-;;;;;:7;;;9804:1;9796:10;;;;;;;:::i;:::-;;;;;9781:5;9787;:1;9791;9787:5;:::i;:::-;9781:12;;;;;;;:::i;:::-;;;;:25;-1:-1:-1;9542:3:71;;;;:::i;:::-;;;;9515:302;;;;9827:21;;:::i;:::-;9858:12;10032:4;10027:3;10012:13;10005:5;10002:1;9990:10;9979:58;10282:6;;9968:69;;10282:11;;;;-1:-1:-1;10265:29:71;;-1:-1:-1;;;;;;;;;;9189:1112:71:o;2191:146:108:-;2255:23;2324:4;2314:15;;;;;;2297:33;;;;;;29801:19:136;;29845:2;29836:12;;29672:182;2297:33:108;;;;;;;;;;;;;2290:40;;2191:146;;;:::o;3187:617:107:-;3308:12;3322:19;3353:23;3379:19;3391:6;3379:11;:19::i;:::-;3353:45;;3409:18;3429:25;3456:16;3476:79;3503:5;3522:4;3540:5;3476:13;:79::i;:::-;3580:19;;3408:147;;-1:-1:-1;3408:147:107;;-1:-1:-1;3408:147:107;-1:-1:-1;3580:24:107;;;3623:21;;;3633:11;3623:21;3615:60;;;;-1:-1:-1;;;3615:60:107;;32238:2:136;3615:60:107;;;32220:21:136;32277:2;32257:18;;;32250:30;32316:28;32296:18;;;32289:56;32362:18;;3615:60:107;32036:350:136;3615:60:107;3686:18;3707:6;:57;;3755:9;;;;;;;;;;;;3707:57;;;3716:36;3730:5;3736:14;3749:1;3736:10;:14;:::i;:::-;3730:21;;;;;;;;:::i;:::-;;;;;;;3716:13;:36::i;:::-;3783:6;;;;-1:-1:-1;3187:617:107;;-1:-1:-1;;;;;;;;;3187:617:107:o;2730:125:105:-;2789:16;2824:24;2833:14;2843:3;2833:9;:14::i;:::-;2824:8;:24::i;5264:122::-;5328:7;5362:16;5374:3;4218:642;4282:7;4323:2;4309:3;:10;;;:16;;4301:55;;;;-1:-1:-1;;;4301:55:105;;;;;;;:::i;:::-;4368:18;4388;4408:20;4432:18;4446:3;4432:13;:18::i;:::-;4367:83;;-1:-1:-1;4367:83:105;-1:-1:-1;4367:83:105;-1:-1:-1;4481:21:105;4469:8;:33;;;;;;;;:::i;:::-;;4461:72;;;;-1:-1:-1;;;4461:72:105;;;;;;;:::i;:::-;4544:11;4568:10;4558:3;:7;;;:20;;;;:::i;:::-;4639:10;;4544:34;;-1:-1:-1;4741:2:105;4726:18;;4723:100;;;4792:2;4788:19;;;4783:3;4779:29;4770:39;;4850:3;4218:642;-1:-1:-1;;;;;;4218:642:105:o;796:224::-;-1:-1:-1;;;;;;;;;;;;;;;;;972:41:105;;;;;;;;990:10;;972:41;;933:12;;;972:41;;;;;;;;796:224::o;2986:313::-;3048:12;3073:18;3093;3113:20;3137:18;3151:3;3137:13;:18::i;:::-;3072:83;;-1:-1:-1;3072:83:105;-1:-1:-1;3072:83:105;-1:-1:-1;3186:21:105;3174:8;:33;;;;;;;;:::i;:::-;;3166:70;;;;-1:-1:-1;;;3166:70:105;;33080:2:136;3166:70:105;;;33062:21:136;33119:2;33099:18;;;33092:30;-1:-1:-1;;;33138:18:136;;;33131:54;33202:18;;3166:70:105;32878:348:136;3166:70:105;3254:38;3260:3;:7;;;3269:10;3281;3254:5;:38::i;:::-;3247:45;2986:313;-1:-1:-1;;;;;2986:313:105:o;11616:433:71:-;11670:7;;;-1:-1:-1;;;;;;;;;;;11801:1:71;-1:-1:-1;;;;;;;;;;;11785:1:71;-1:-1:-1;;;;;;;;;;;11769:1:71;11766;11759:24;11752:47;11745:70;11730:85;;11912:9;11924:91;11931:4;11937:65;-1:-1:-1;;;;;;;;;;;11924:6:71;:91::i;:::-;12034:4;;11912:103;;-1:-1:-1;11616:433:71;;-1:-1:-1;;;11616:433:71:o;9383:495:107:-;9447:25;9484:36;9523:30;9546:6;9523:22;:30::i;:::-;9484:69;;9563:23;9604:5;:12;-1:-1:-1;;;;;9589:28:107;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;9589:28:107;;;;;;;;;;;;;;;;9563:54;;9633:9;9628:221;9652:5;:12;9648:1;:16;9628:221;;;9685:20;9708:33;9732:5;9738:1;9732:8;;;;;;;;:::i;:::-;;;;;;;9708:23;:33::i;:::-;9685:56;;9766:72;;;;;;;;9786:7;9766:72;;;;9804:31;9827:7;9804:22;:31::i;:::-;9766:72;;;9755:5;9761:1;9755:8;;;;;;;;:::i;:::-;;;;;;:83;;;;9671:178;9666:3;;;;;:::i;:::-;;;;9628:221;;;-1:-1:-1;9866:5:107;9383:495;-1:-1:-1;;;9383:495:107:o;4301:4872::-;4473:19;4506:26;4473:19;;;4639:30;4664:4;4639:24;:30::i;:::-;4620:49;;4680:21;4704:5;4680:29;;4719:23;4756:27;4797;-1:-1:-1;;;;;;;;;;;;;;;;;;;4797:27:107;4911:9;4906:4050;4930:6;:13;4926:1;:17;4906:4050;;;4978:6;4985:1;4978:9;;;;;;;;:::i;:::-;;;;;;;4964:23;;5020:19;5001:38;;;;;:::i;:::-;;-1:-1:-1;5202:15:107;5216:1;5202:15;;:::i;:::-;;-1:-1:-1;5236:20:107;5232:758;;5358:19;;5348:30;;;;;;;:47;;5340:77;;;;-1:-1:-1;;;5340:77:107;;33433:2:136;5340:77:107;;;33415:21:136;33472:2;33452:18;;;33445:30;-1:-1:-1;;;33491:18:136;;;33484:47;33548:18;;5340:77:107;33231:341:136;5340:77:107;5232:758;;;5442:19;;:26;5472:2;-1:-1:-1;5438:552:107;;5609:19;;5599:30;;;;;;;:47;;5570:145;;;;-1:-1:-1;;;5570:145:107;;33779:2:136;5570:145:107;;;33761:21:136;33818:2;33798:18;;;33791:30;33857:29;33837:18;;;33830:57;33904:18;;5570:145:107;33577:351:136;5438:552:107;5894:13;5845:45;5870:11;:19;;;5845:24;:45::i;:::-;:62;5816:159;;;;-1:-1:-1;;;5816:159:107;;34135:2:136;5816:159:107;;;34117:21:136;34174:2;34154:18;;;34147:30;34213:28;34193:18;;;34186:56;34259:18;;5816:159:107;33933:350:136;5816:159:107;886:14;762:2;899:1;886:14;:::i;:::-;6008:11;:19;;;:26;:48;6004:2942;;;6099:3;:10;6080:15;:29;6076:666;;;6261:5;;6076:666;6453:15;6477:3;6481:15;6477:20;;;;;;;;:::i;:::-;;;;;;;;;6471:27;;6453:45;;6520:37;6560:11;:19;;;6580:9;6560:30;;;;;;;;;;:::i;:::-;;;;;;;6520:70;;6628:20;6639:8;6628:10;:20::i;:::-;6612:36;;6692:1;6670:23;;6715:8;;;;6004:2942;1043:1;6766:11;:19;;;:26;:59;6762:2184;;;6845:17;6865:25;6878:11;6865:12;:25::i;:::-;6845:45;;6908:12;6929:4;6934:1;6929:7;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;6955:12:107;6975:10;6984:1;6929:7;6975:10;:::i;:::-;6970:16;;:1;:16;:::i;:::-;6955:31;;7004:26;7033:34;7054:4;7060:6;7033:34;;:20;:34::i;:::-;7004:63;;7085:25;7113:42;7134:3;7139:15;7113:20;:42::i;:::-;7085:70;;7173:26;7202:51;7225:13;7240:12;7202:22;:51::i;:::-;7173:80;-1:-1:-1;7276:26:107;;;1563:1;7276:26;;:55;;-1:-1:-1;7306:25:107;;;1603:1;7306:25;7276:55;7272:1582;;;7408:18;7384:13;:20;:42;:111;;;;;7477:18;7454:12;:19;:41;7384:111;7355:415;;;7710:37;7729:18;7710:37;;:::i;:::-;;;7355:415;-1:-1:-1;;;;1701:12:107;-1:-1:-1;7926:5:107;;-1:-1:-1;;;;;7926:5:107;7272:1582;7960:31;;;;;:65;;-1:-1:-1;7995:30:107;;;1522:1;7995:30;7960:65;7956:898;;;8075:13;:20;8053:18;:42;8049:692;;-1:-1:-1;;;;1701:12:107;-1:-1:-1;8392:5:107;;-1:-1:-1;;;;;8392:5:107;8049:692;8584:34;8595:11;:19;;;8615:1;8595:22;;;;;;;;:::i;:::-;;;;;;;8584:10;:34::i;:::-;8568:50;-1:-1:-1;8666:18:107;-1:-1:-1;8710:8:107;;-1:-1:-1;;;;;8710:8:107;7956:898;8787:48;;-1:-1:-1;;;8787:48:107;;34852:2:136;8787:48:107;;;34834:21:136;34891:2;34871:18;;;34864:30;34930:34;34910:18;;;34903:62;-1:-1:-1;;;34981:18:136;;;34974:36;35027:19;;8787:48:107;34650:402:136;6762:2184:107;8892:39;;-1:-1:-1;;;8892:39:107;;35259:2:136;8892:39:107;;;35241:21:136;35298:2;35278:18;;;35271:30;35337:31;35317:18;;;35310:59;35386:18;;8892:39:107;35057:353:136;6762:2184:107;4945:3;;;;:::i;:::-;;;;4906:4050;;;-1:-1:-1;;;;9046:34:107;;9098:10;9110:42;9131:3;9136:15;9110:20;:42::i;:::-;9090:76;;;;-1:-1:-1;9154:11:107;;-1:-1:-1;4301:4872:107;-1:-1:-1;;;;;;;;;;4301:4872:107:o;11178:177::-;11308:13;;;;11322:20;;11246:19;;11284:64;;11322:24;;11345:1;;11322:24;:::i;:::-;11308:39;;;;;;;;:::i;1172:1406:105:-;1233:16;1262:18;1284:20;1308:18;1322:3;1308:13;:18::i;:::-;1261:65;;-1:-1:-1;1261:65:105;;-1:-1:-1;1357:21:105;;-1:-1:-1;1345:8:105;:33;;;;;;;;:::i;:::-;;1337:69;;;;-1:-1:-1;;;1337:69:105;;35617:2:136;1337:69:105;;;35599:21:136;35656:2;35636:18;;;35629:30;-1:-1:-1;;;35675:18:136;;;35668:53;35738:18;;1337:69:105;35415:347:136;1337:69:105;1832:30;;;295:2;1832:30;;;;;;;;;1809:20;;1832:30;;;;-1:-1:-1;;;;;;;;;;;;;;;;;1832:30:105;;;;;;;;;;;;;;-1:-1:-1;1809:53:105;-1:-1:-1;1873:17:105;1921:10;1941:478;1957:10;;1948:19;;1941:478;;;295:2;1991:9;:27;1983:82;;;;-1:-1:-1;;;1983:82:105;;35969:2:136;1983:82:105;;;35951:21:136;36008:2;35988:18;;;35981:30;36047:34;36027:18;;;36020:62;-1:-1:-1;;;36098:18:136;;;36091:40;36148:19;;1983:82:105;35767:406:136;1983:82:105;2081:18;2101;2125:108;2156:63;;;;;;;;2187:6;2174:3;:10;;;:19;;;;:::i;:::-;2156:63;;;;2210:6;2200:3;:7;;;:16;;;;:::i;:::-;2156:63;;2125:13;:108::i;:::-;2080:153;;;;;2265:67;;;;;;;;2296:10;2283;:23;;;;:::i;:::-;2265:67;;;;2323:6;2313:3;:7;;;:16;;;;:::i;:::-;2265:67;;;2248:3;2252:9;2248:14;;;;;;;;:::i;:::-;;;;;;;;;;:84;2347:14;2360:1;2347:14;;:::i;:::-;;-1:-1:-1;2385:23:105;2398:10;2385;:23;:::i;:::-;2375:33;;;;:::i;:::-;;;1969:450;;1941:478;;;-1:-1:-1;2519:22:105;;2526:3;1172:1406;-1:-1:-1;;;;1172:1406:105:o;7649:2148::-;7751:7;7772;7793:11;7850:1;7837:3;:10;;;:14;7829:51;;;;-1:-1:-1;;;7829:51:105;;36380:2:136;7829:51:105;;;36362:21:136;36419:2;36399:18;;;36392:30;-1:-1:-1;;;36438:18:136;;;36431:54;36502:18;;7829:51:105;36178:348:136;7829:51:105;7905:7;;;;7987:10;;7891:11;7979:19;8032:4;8022:14;;8018:1773;;8089:1;8092;8095:21;8081:36;;;;;;;;;;8018:1773;8148:4;8138:6;:14;8134:1657;;8254:14;8271:13;8280:4;8271:6;:13;:::i;:::-;8254:30;;8320:6;8307:3;:10;;;:19;8299:57;;;;-1:-1:-1;;;8299:57:105;;36733:2:136;8299:57:105;;;36715:21:136;36772:2;36752:18;;;36745:30;-1:-1:-1;;;36791:18:136;;;36784:55;36856:18;;8299:57:105;36531:349:136;8299:57:105;8379:1;;-1:-1:-1;8382:6:105;-1:-1:-1;8390:21:105;;-1:-1:-1;8371:41:105;;-1:-1:-1;;8371:41:105;8134:1657;8443:4;8433:6;:14;8429:1362;;8491:19;8513:13;8522:4;8513:6;:13;:::i;:::-;8491:35;;8562:11;8549:3;:10;;;:24;8541:68;;;;-1:-1:-1;;;8541:68:105;;37087:2:136;8541:68:105;;;37069:21:136;37126:2;37106:18;;;37099:30;37165:33;37145:18;;;37138:61;37216:18;;8541:68:105;36885:355:136;8541:68:105;8755:1;8746:11;;8740:18;8773:2;8769:20;;;8764:3;8760:30;8736:55;;8840:20;8736:55;8777:11;8840:20;:::i;:::-;8827:10;;:33;8819:70;;;;-1:-1:-1;;;8819:70:105;;37447:2:136;8819:70:105;;;37429:21:136;37486:2;37466:18;;;37459:30;-1:-1:-1;;;37505:18:136;;;37498:54;37569:18;;8819:70:105;37245:348:136;8819:70:105;8912:15;8916:11;8912:1;:15;:::i;:::-;8904:55;-1:-1:-1;8929:6:105;-1:-1:-1;8937:21:105;;-1:-1:-1;8904:55:105;;-1:-1:-1;;;8904:55:105;8429:1362;8990:4;8980:6;:14;8976:815;;9093:15;9111:13;9120:4;9111:6;:13;:::i;:::-;9093:31;;9160:7;9147:3;:10;;;:20;9139:56;;;;-1:-1:-1;;;9139:56:105;;37800:2:136;9139:56:105;;;37782:21:136;37839:2;37819:18;;;37812:30;-1:-1:-1;;;37858:18:136;;;37851:53;37921:18;;9139:56:105;37598:347:136;9139:56:105;9218:1;;-1:-1:-1;9221:7:105;-1:-1:-1;9218:1:105;;-1:-1:-1;9210:42:105;;-1:-1:-1;;9210:42:105;8976:815;9309:20;9332:13;9341:4;9332:6;:13;:::i;:::-;9309:36;;9381:12;9368:3;:10;;;:25;9360:67;;;;-1:-1:-1;;;9360:67:105;;38152:2:136;9360:67:105;;;38134:21:136;38191:2;38171:18;;;38164:30;38230:31;38210:18;;;38203:59;38279:18;;9360:67:105;37950:353:136;9360:67:105;9573:1;9564:11;;9558:18;9591:2;9587:21;;;9582:3;9578:31;9554:56;;9659:22;9554:56;9595:12;9659:22;:::i;:::-;9646:10;;:35;9638:70;;;;-1:-1:-1;;;9638:70:105;;38510:2:136;9638:70:105;;;38492:21:136;38549:2;38529:18;;;38522:30;-1:-1:-1;;;38568:18:136;;;38561:52;38630:18;;9638:70:105;38308:346:136;9638:70:105;9731:16;9735:12;9731:1;:16;:::i;:::-;9723:57;-1:-1:-1;9749:7:105;-1:-1:-1;9758:21:105;;-1:-1:-1;9723:57:105;;-1:-1:-1;;;9723:57:105;7649:2148;;;;;;:::o;10052:892::-;10167:12;10191:16;10220:7;-1:-1:-1;;;;;10210:18:105;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10210:18:105;;10191:37;;10242:3;:10;10256:1;10242:15;10238:56;;;10280:3;-1:-1:-1;10273:10:105;;10238:56;10304:11;10318:14;10325:7;10318:4;:14;:::i;:::-;10304:28;-1:-1:-1;10404:2:105;10395:12;;10342;10482:180;10506:12;10516:2;10506:7;:12;:::i;:::-;10502:1;:16;10482:180;;;10579:10;;10566:24;;10618:9;10625:2;10585:3;10618:9;:::i;:::-;;-1:-1:-1;10641:10:105;10649:2;10641:10;;:::i;:::-;;-1:-1:-1;10520:3:105;;;;:::i;:::-;;;;10482:180;;;-1:-1:-1;10713:12:105;10795:1;10788:2;10778:7;:12;10772:2;:19;10766:3;:26;:30;10759:37;;10901:4;10894;10888:11;10884:22;10876:4;10872:9;10866:3;10860:10;10856:26;10853:54;10847:4;10840:68;10934:3;10927:10;;;;;;10052:892;;;;;:::o;12055:874:71:-;12146:14;12172:12;12194:24;;:::i;:::-;12228:20;;:::i;:::-;12269:4;12258:15;;;12341:8;;;:15;;;12425:8;;;:15;;;12509:8;;;:16;;;12535:8;;;:20;;;12565:8;;;:19;;;12673:6;12667:4;12258:15;12571:1;12650:4;12643:5;12639:16;12628:58;12617:69;-1:-1:-1;12617:69:71;12783:48;;;;12756:75;12858:7;12850:46;;;;-1:-1:-1;;;12850:46:71;;38986:2:136;12850:46:71;;;38968:21:136;39025:2;39005:18;;;38998:30;39064:28;39044:18;;;39037:56;39110:18;;12850:46:71;38784:350:136;12850:46:71;-1:-1:-1;12913:9:71;;;-1:-1:-1;;;;;12055:874:71:o;3775:344:110:-;3838:12;3862:20;3895:6;:13;3911:1;3895:17;;;;:::i;:::-;-1:-1:-1;;;;;3885:28:110;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3885:28:110;;3862:51;;3929:9;3924:164;3948:6;:13;3944:1;:17;3924:164;;;4012:1;3999:6;4006:1;3999:9;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;3999:9:110;:14;;3982:7;3990:5;:1;3994;3990:5;:::i;:::-;3982:14;;;;;;;;:::i;:::-;;;;:31;-1:-1:-1;;;;;3982:31:110;;;;;;;;;4074:2;4061:6;4068:1;4061:9;;;;;;;;:::i;:::-;;;;;4055:21;;;4061:9;;4055:21;:::i;:::-;4048:29;;4027:7;4035:5;:1;4039;4035:5;:::i;:::-;:9;;4043:1;4035:9;:::i;:::-;4027:18;;;;;;;;:::i;:::-;;;;:50;-1:-1:-1;;;;;4027:50:110;;;;;;;;-1:-1:-1;3963:3:110;;;;:::i;:::-;;;;3924:164;;;-1:-1:-1;4105:7:110;3775:344;-1:-1:-1;;3775:344:110:o;3295:346::-;3358:7;3397:2;3381:6;:13;:18;3377:167;;;-1:-1:-1;3492:2:110;3480:15;3474:22;;3295:346::o;3377:167::-;3572:6;3561:29;;;;;;;;;;;;:::i;10190:463:107:-;10268:15;10295:19;10344:2;10329:5;:12;;;:17;10325:272;;;10431:33;10458:5;10431:26;:33::i;:::-;10422:42;;10325:272;;;10556:30;10580:5;10556:23;:30::i;:::-;10547:39;;10325:272;10614:32;10639:6;10614:24;:32::i;10844:178::-;10911:18;10948:67;10973:41;10997:5;:13;;;11011:1;10997:16;;;;;;;;:::i;10973:41::-;10948:24;:67::i;3051:238:110:-;3126:12;3164:6;:13;3154:6;:23;3150:70;;-1:-1:-1;3200:9:110;;;;;;;;;-1:-1:-1;3200:9:110;;3193:16;;3150:70;3237:45;3243:6;3251;3275;3259;:13;:22;;;;:::i;:::-;3237:5;:45::i;11599:275:107:-;11711:15;;11765:85;11784:1;11772:2;:9;:13;:30;;;;;11801:1;11789:2;:9;:13;11772:30;:48;;;;;11815:2;11818:1;11815:5;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;11806:14:107;;:2;11809:1;11806:5;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;11806:5:107;:14;11772:48;11765:85;;;11836:3;;;;:::i;:::-;;;;11765:85;;7210:113:105;7275:12;7306:10;7312:3;7306:5;:10::i;205:2840:110:-;327:12;375:7;359:12;375:7;369:2;359:12;:::i;:::-;:23;;351:50;;;;-1:-1:-1;;;351:50:110;;;;;;;:::i;:::-;439:6;419:16;428:7;439:6;419:16;:::i;:::-;:26;;411:53;;;;-1:-1:-1;;;411:53:110;;;;;;;:::i;:::-;499:16;508:7;499:6;:16;:::i;:::-;482:6;:13;:33;;474:63;;;;-1:-1:-1;;;474:63:110;;39873:2:136;474:63:110;;;39855:21:136;39912:2;39892:18;;;39885:30;-1:-1:-1;;;39931:18:136;;;39924:47;39988:18;;474:63:110;39671:341:136;474:63:110;548:22;611:15;;639:1967;;;;2747:4;2741:11;2728:24;;2934:1;2923:9;2916:20;2982:4;2971:9;2967:20;2961:4;2954:34;604:2398;;639:1967;821:4;815:11;802:24;;1480:2;1471:7;1467:16;1862:9;1855:17;1849:4;1845:28;1833:9;1822;1818:25;1814:60;1910:7;1906:2;1902:16;2162:6;2148:9;2141:17;2135:4;2131:28;2119:9;2111:6;2107:22;2103:57;2099:70;1936:425;2195:3;2191:2;2188:11;1936:425;;;2333:9;;2322:21;;2236:4;2228:13;;;;2268;1936:425;;;-1:-1:-1;;2379:26:110;;;2587:2;2570:11;-1:-1:-1;;2566:25:110;2560:4;2553:39;-1:-1:-1;604:2398:110;-1:-1:-1;3029:9:110;205:2840;-1:-1:-1;;;;205:2840:110:o;11069:124:105:-;11126:12;11157:29;11163:3;:7;;;11172:1;11175:3;:10;;;11157:5;:29::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;411:148:136:-;-1:-1:-1;;;;;503:31:136;;493:42;;483:70;;549:1;546;539:12;564:288;647:6;700:2;688:9;679:7;675:23;671:32;668:52;;;716:1;713;706:12;668:52;755:9;742:23;774:48;816:5;774:48;:::i;857:180::-;916:6;969:2;957:9;948:7;944:23;940:32;937:52;;;985:1;982;975:12;937:52;-1:-1:-1;1008:23:136;;857:180;-1:-1:-1;857:180:136:o;1042:159::-;1106:5;1151:2;1142:6;1137:3;1133:16;1129:25;1126:45;;;1167:1;1164;1157:12;1126:45;-1:-1:-1;1189:6:136;1042:159;-1:-1:-1;1042:159:136:o;1206:361::-;1293:6;1346:2;1334:9;1325:7;1321:23;1317:32;1314:52;;;1362:1;1359;1352:12;1314:52;1402:9;1389:23;-1:-1:-1;;;;;1427:6:136;1424:30;1421:50;;;1467:1;1464;1457:12;1421:50;1490:71;1553:7;1544:6;1533:9;1529:22;1490:71;:::i;1572:156::-;1632:5;1677:3;1668:6;1663:3;1659:16;1655:26;1652:46;;;1694:1;1691;1684:12;1733:162;1799:5;1844:3;1835:6;1830:3;1826:16;1822:26;1819:46;;;1861:1;1858;1851:12;1900:498;2030:6;2038;2091:3;2079:9;2070:7;2066:23;2062:33;2059:53;;;2108:1;2105;2098:12;2059:53;2131:54;2177:7;2166:9;2131:54;:::i;:::-;2121:64;;2236:3;2225:9;2221:19;2208:33;-1:-1:-1;;;;;2256:6:136;2253:30;2250:50;;;2296:1;2293;2286:12;2250:50;2319:73;2384:7;2375:6;2364:9;2360:22;2319:73;:::i;:::-;2309:83;;;1900:498;;;;;:::o;2403:203::-;-1:-1:-1;;;;;2567:32:136;;;;2549:51;;2537:2;2522:18;;2403:203::o;2611:173::-;2679:20;;-1:-1:-1;;;;;2728:31:136;;2718:42;;2708:70;;2774:1;2771;2764:12;2789:186;2848:6;2901:2;2889:9;2880:7;2876:23;2872:32;2869:52;;;2917:1;2914;2907:12;2869:52;2940:29;2959:9;2940:29;:::i;2980:160::-;3044:5;3089:3;3080:6;3075:3;3071:16;3067:26;3064:46;;;3106:1;3103;3096:12;3145:968;3293:6;3301;3309;3317;3370:3;3358:9;3349:7;3345:23;3341:33;3338:53;;;3387:1;3384;3377:12;3338:53;3410:54;3456:7;3445:9;3410:54;:::i;:::-;3400:64;;3515:3;3504:9;3500:19;3487:33;-1:-1:-1;;;;;3580:2:136;3572:6;3569:14;3566:34;;;3596:1;3593;3586:12;3566:34;3619:71;3682:7;3673:6;3662:9;3658:22;3619:71;:::i;:::-;3609:81;;3743:3;3732:9;3728:19;3715:33;3699:49;;3773:2;3763:8;3760:16;3757:36;;;3789:1;3786;3779:12;3757:36;3827:8;3816:9;3812:24;3802:34;;3874:7;3867:4;3863:2;3859:13;3855:27;3845:55;;3896:1;3893;3886:12;3845:55;3936:2;3923:16;3962:2;3954:6;3951:14;3948:34;;;3978:1;3975;3968:12;3948:34;4025:7;4018:4;4009:6;4005:2;4001:15;3997:26;3994:39;3991:59;;;4046:1;4043;4036:12;3991:59;3145:968;;;;-1:-1:-1;;4077:4:136;4069:13;;-1:-1:-1;;;3145:968:136:o;4300:269::-;4357:6;4410:2;4398:9;4389:7;4385:23;4381:32;4378:52;;;4426:1;4423;4416:12;4378:52;4465:9;4452:23;4515:4;4508:5;4504:16;4497:5;4494:27;4484:55;;4535:1;4532;4525:12;5252:629;5382:6;5390;5443:2;5431:9;5422:7;5418:23;5414:32;5411:52;;;5459:1;5456;5449:12;5411:52;5499:9;5486:23;-1:-1:-1;;;;;5569:2:136;5561:6;5558:14;5555:34;;;5585:1;5582;5575:12;5555:34;5608:71;5671:7;5662:6;5651:9;5647:22;5608:71;:::i;:::-;5598:81;;5732:2;5721:9;5717:18;5704:32;5688:48;;5761:2;5751:8;5748:16;5745:36;;;5777:1;5774;5767:12;5745:36;;5800:75;5867:7;5856:8;5845:9;5841:24;5800:75;:::i;6118:679::-;6228:6;6236;6244;6252;6305:3;6293:9;6284:7;6280:23;6276:33;6273:53;;;6322:1;6319;6312:12;6273:53;6345:29;6364:9;6345:29;:::i;:::-;6335:39;;6424:2;6413:9;6409:18;6396:32;6437:48;6479:5;6437:48;:::i;:::-;6504:5;-1:-1:-1;6561:2:136;6546:18;;6533:32;6574:50;6533:32;6574:50;:::i;:::-;6643:7;-1:-1:-1;6702:2:136;6687:18;;6674:32;6715:50;6674:32;6715:50;:::i;:::-;6118:679;;;;-1:-1:-1;6118:679:136;;-1:-1:-1;;6118:679:136:o;6802:127::-;6863:10;6858:3;6854:20;6851:1;6844:31;6894:4;6891:1;6884:15;6918:4;6915:1;6908:15;6934:257;7006:4;7000:11;;;7038:17;;-1:-1:-1;;;;;7070:34:136;;7106:22;;;7067:62;7064:88;;;7132:18;;:::i;:::-;7168:4;7161:24;6934:257;:::o;7196:275::-;7267:2;7261:9;7332:2;7313:13;;-1:-1:-1;;7309:27:136;7297:40;;-1:-1:-1;;;;;7352:34:136;;7388:22;;;7349:62;7346:88;;;7414:18;;:::i;:::-;7450:2;7443:22;7196:275;;-1:-1:-1;7196:275:136:o;7476:282::-;7530:5;7578:4;7566:9;7561:3;7557:19;7553:30;7550:50;;;7596:1;7593;7586:12;7550:50;7618:22;;:::i;:::-;7609:31;;7676:9;7663:23;7656:5;7649:38;7747:2;7736:9;7732:18;7719:32;7714:2;7707:5;7703:14;7696:56;7476:282;;;;:::o;7763:311::-;7818:5;7866:4;7854:9;7849:3;7845:19;7841:30;7838:50;;;7884:1;7881;7874:12;7838:50;7906:22;;:::i;:::-;7897:31;;7951:41;7988:3;7977:9;7951:41;:::i;:::-;7944:5;7937:56;8027:40;8061:4;8050:9;8046:20;8027:40;:::i;:::-;8020:4;8013:5;8009:16;8002:66;7763:311;;;;:::o;8079:171::-;8146:20;;-1:-1:-1;;;;;8195:30:136;;8185:41;;8175:69;;8240:1;8237;8230:12;8255:1081;8374:6;8382;8435:2;8423:9;8414:7;8410:23;8406:32;8403:52;;;8451:1;8448;8441:12;8403:52;8491:9;8478:23;-1:-1:-1;;;;;8561:2:136;8553:6;8550:14;8547:34;;;8577:1;8574;8567:12;8547:34;8615:6;8604:9;8600:22;8590:32;;8660:7;8653:4;8649:2;8645:13;8641:27;8631:55;;8682:1;8679;8672:12;8631:55;8718:2;8705:16;8740:4;8763:2;8759;8756:10;8753:36;;;8769:18;;:::i;:::-;8809:36;8841:2;8836;8833:1;8829:10;8825:19;8809:36;:::i;:::-;8879:15;;;8910:12;;;;-1:-1:-1;8941:4:136;8980:11;;;8972:20;;8968:29;;;9009:19;;;9006:39;;;9041:1;9038;9031:12;9006:39;9065:11;;;;9085:165;9101:6;9096:3;9093:15;9085:165;;;9167:40;9199:7;9194:3;9167:40;:::i;:::-;9155:53;;9118:12;;;;9228;;;;9085:165;;;-1:-1:-1;9269:5:136;-1:-1:-1;9293:37:136;9311:18;;;9293:37;:::i;:::-;9283:47;;;;;;8255:1081;;;;;:::o;9341:163::-;9408:20;;9468:10;9457:22;;9447:33;;9437:61;;9494:1;9491;9484:12;9509:256;9575:6;9583;9636:2;9624:9;9615:7;9611:23;9607:32;9604:52;;;9652:1;9649;9642:12;9604:52;9675:28;9693:9;9675:28;:::i;:::-;9665:38;;9722:37;9755:2;9744:9;9740:18;9722:37;:::i;:::-;9712:47;;9509:256;;;;;:::o;9770:494::-;9898:6;9906;9959:3;9947:9;9938:7;9934:23;9930:33;9927:53;;;9976:1;9973;9966:12;9927:53;9999:54;10045:7;10034:9;9999:54;:::i;:::-;9989:64;;10104:3;10093:9;10089:19;10076:33;-1:-1:-1;;;;;10124:6:136;10121:30;10118:50;;;10164:1;10161;10154:12;10118:50;10187:71;10250:7;10241:6;10230:9;10226:22;10187:71;:::i;10928:268::-;10998:6;11051:2;11039:9;11030:7;11026:23;11022:32;11019:52;;;11067:1;11064;11057:12;11019:52;11099:9;11093:16;11118:48;11160:5;11118:48;:::i;11201:406::-;11403:2;11385:21;;;11442:2;11422:18;;;11415:30;11481:34;11476:2;11461:18;;11454:62;-1:-1:-1;;;11547:2:136;11532:18;;11525:40;11597:3;11582:19;;11201:406::o;11612:277::-;11679:6;11732:2;11720:9;11711:7;11707:23;11703:32;11700:52;;;11748:1;11745;11738:12;11700:52;11780:9;11774:16;11833:5;11826:13;11819:21;11812:5;11809:32;11799:60;;11855:1;11852;11845:12;11894:404;12096:2;12078:21;;;12135:2;12115:18;;;12108:30;12174:34;12169:2;12154:18;;12147:62;-1:-1:-1;;;12240:2:136;12225:18;;12218:38;12288:3;12273:19;;11894:404::o;12728:184::-;12786:6;12839:2;12827:9;12818:7;12814:23;12810:32;12807:52;;;12855:1;12852;12845:12;12807:52;12878:28;12896:9;12878:28;:::i;12917:340::-;13119:2;13101:21;;;13158:2;13138:18;;;13131:30;-1:-1:-1;;;13192:2:136;13177:18;;13170:46;13248:2;13233:18;;12917:340::o;13262:127::-;13323:10;13318:3;13314:20;13311:1;13304:31;13354:4;13351:1;13344:15;13378:4;13375:1;13368:15;13394:236;13433:3;-1:-1:-1;;;;;13506:2:136;13503:1;13499:10;13536:2;13533:1;13529:10;13567:3;13563:2;13559:12;13554:3;13551:21;13548:47;;;13575:18;;:::i;:::-;13611:13;;13394:236;-1:-1:-1;;;;13394:236:136:o;13635:577::-;13757:4;13763:6;13823:11;13810:25;13917:2;13913:7;13902:8;13886:14;13882:29;13878:43;13858:18;13854:68;13844:96;;13936:1;13933;13926:12;13844:96;13963:33;;14015:20;;;-1:-1:-1;;;;;;14047:30:136;;14044:50;;;14090:1;14087;14080:12;14044:50;14123:4;14111:17;;-1:-1:-1;14182:4:136;14170:17;;14154:14;14150:38;14140:49;;14137:69;;;14202:1;14199;14192:12;14137:69;13635:577;;;;;:::o;14217:230::-;14303:6;14356:2;14344:9;14335:7;14331:23;14327:32;14324:52;;;14372:1;14369;14362:12;14324:52;14395:46;14433:7;14422:9;14395:46;:::i;14452:349::-;14654:2;14636:21;;;14693:2;14673:18;;;14666:30;-1:-1:-1;;;14727:2:136;14712:18;;14705:55;14792:2;14777:18;;14452:349::o;14806:338::-;15008:2;14990:21;;;15047:2;15027:18;;;15020:30;-1:-1:-1;;;15081:2:136;15066:18;;15059:44;15135:2;15120:18;;14806:338::o;15149:184::-;15207:6;15260:2;15248:9;15239:7;15235:23;15231:32;15228:52;;;15276:1;15273;15266:12;15228:52;15299:28;15317:9;15299:28;:::i;17715:521::-;17792:4;17798:6;17858:11;17845:25;17952:2;17948:7;17937:8;17921:14;17917:29;17913:43;17893:18;17889:68;17879:96;;17971:1;17968;17961:12;17879:96;17998:33;;18050:20;;;-1:-1:-1;;;;;;18082:30:136;;18079:50;;;18125:1;18122;18115:12;18079:50;18158:4;18146:17;;-1:-1:-1;18189:14:136;18185:27;;;18175:38;;18172:58;;;18226:1;18223;18216:12;20273:127;20334:10;20329:3;20325:20;20322:1;20315:31;20365:4;20362:1;20355:15;20389:4;20386:1;20379:15;20756:231;20796:4;-1:-1:-1;;;;;20894:10:136;;;;20864;;20916:12;;;20913:38;;;20931:18;;:::i;:::-;20968:13;;20756:231;-1:-1:-1;;;20756:231:136:o;20992:238::-;21032:3;-1:-1:-1;;;;;21099:10:136;;;21129;;;21159:12;;;21151:21;;21148:47;;;21175:18;;:::i;21235:135::-;21274:3;-1:-1:-1;;21295:17:136;;21292:43;;;21315:18;;:::i;:::-;-1:-1:-1;21362:1:136;21351:13;;21235:135::o;21375:724::-;21563:3;21548:19;;21625:10;21598:25;21616:6;21598:25;:::i;:::-;21594:42;21583:9;21576:61;21666:36;21696:4;21688:6;21684:17;21666:36;:::i;:::-;-1:-1:-1;;;;;21795:2:136;21781:12;21777:21;21770:4;21759:9;21755:20;21748:51;21879:2;21841:36;21871:4;21863:6;21859:17;21841:36;:::i;:::-;21837:45;21830:4;21819:9;21815:20;21808:75;;;21946:4;21938:6;21934:17;21921:31;21914:4;21903:9;21899:20;21892:61;22016:4;22008:6;22004:17;21991:31;21984:4;21973:9;21969:20;21962:61;22086:4;22078:6;22074:17;22061:31;22054:4;22043:9;22039:20;22032:61;21375:724;;;;:::o;22718:573::-;22839:4;22845:6;22905:11;22892:25;22999:2;22995:7;22984:8;22968:14;22964:29;22960:43;22940:18;22936:68;22926:96;;23018:1;23015;23008:12;22926:96;23045:33;;23097:20;;;-1:-1:-1;;;;;;23129:30:136;;23126:50;;;23172:1;23169;23162:12;23126:50;23205:4;23193:17;;-1:-1:-1;23256:1:136;23252:14;;;23236;23232:35;23222:46;;23219:66;;;23281:1;23278;23271:12;23296:228;23381:6;23434:2;23422:9;23413:7;23409:23;23405:32;23402:52;;;23450:1;23447;23440:12;23402:52;23473:45;23510:7;23499:9;23473:45;:::i;23529:125::-;23569:4;23597:1;23594;23591:8;23588:34;;;23602:18;;:::i;:::-;-1:-1:-1;23639:9:136;;23529:125::o;24359:646::-;24409:5;24462:3;24455:4;24447:6;24443:17;24439:27;24429:55;;24480:1;24477;24470:12;24429:55;24513:2;24507:9;24555:2;24547:6;24543:15;24624:6;24612:10;24609:22;-1:-1:-1;;;;;24576:10:136;24573:34;24570:62;24567:88;;;24635:18;;:::i;:::-;24675:10;24671:2;24664:22;;24706:6;24747:2;24739:6;24735:15;24773:3;24765:6;24762:15;24759:35;;;24790:1;24787;24780:12;24759:35;24814:6;24829:146;24845:6;24840:3;24837:15;24829:146;;;24913:17;;24901:30;;24960:4;24951:14;;;;24862;24829:146;;;-1:-1:-1;24993:6:136;;24359:646;-1:-1:-1;;;;;24359:646:136:o;25010:391::-;25095:6;25148:3;25136:9;25127:7;25123:23;25119:33;25116:53;;;25165:1;25162;25155:12;25116:53;25191:22;;:::i;:::-;25236:44;25272:7;25261:9;25236:44;:::i;:::-;25229:5;25222:59;25315:55;25362:7;25355:4;25344:9;25340:20;25315:55;:::i;:::-;25308:4;25297:16;;25290:81;25301:5;25010:391;-1:-1:-1;;;25010:391:136:o;26114:272::-;26154:7;-1:-1:-1;;;;;26225:10:136;;;26255;;;26288:11;;26281:19;26310:12;;;26302:21;;26277:47;26274:73;;;26327:18;;:::i;:::-;26367:13;;26114:272;-1:-1:-1;;;;26114:272:136:o;26391:127::-;26452:10;26447:3;26443:20;26440:1;26433:31;26483:4;26480:1;26473:15;26507:4;26504:1;26497:15;26523:201;26563:1;-1:-1:-1;;;;;26628:10:136;;;;26647:37;;26664:18;;:::i;:::-;26702:10;;26698:20;;;;;26523:201;-1:-1:-1;;26523:201:136:o;27139:1463::-;27285:4;27314:2;27343;27332:9;27325:21;27384:3;27373:9;27369:19;-1:-1:-1;;;;;27492:2:136;27465:25;27483:6;27465:25;:::i;:::-;27461:34;27456:2;27445:9;27441:18;27434:62;27525:34;27555:2;27547:6;27543:15;27525:34;:::i;:::-;27578:2;27634;27620:12;27616:21;27611:2;27600:9;27596:18;27589:49;27698:2;27690:6;27686:15;27673:29;27647:55;;27782:2;27778:7;27769:6;27753:14;27749:27;27745:41;27725:18;27721:66;27711:94;;27801:1;27798;27791:12;27711:94;27827:31;;;;27881:19;;27912:14;;;27909:34;;;27939:1;27936;27929:12;27909:34;27962:4;27952:14;;28022:2;28014:6;28010:15;27994:14;27990:36;27982:6;27978:49;27975:69;;;28040:1;28037;28030:12;27975:69;28060:18;;;28053:30;;;28118:22;;;;28198:14;;;;28230:1;;-1:-1:-1;28171:3:136;28156:19;;28240:336;28254:6;28251:1;28248:13;28240:336;;;28315:20;;28303:33;;28383:15;;;28370:29;28356:12;;;28349:51;-1:-1:-1;;;;;28438:35:136;28457:15;;;28438:35;:::i;:::-;28434:61;28420:12;;;28413:83;28551:15;;;;28276:1;28269:9;;;;;28516:12;;28240:336;;;28593:3;27139:1463;-1:-1:-1;;;;;;;;;27139:1463:136:o;30558:112::-;30590:1;30616;30606:35;;30621:18;;:::i;:::-;-1:-1:-1;30655:9:136;;30558:112::o;31730:168::-;31770:7;31836:1;31832;31828:6;31824:14;31821:1;31818:21;31813:1;31806:9;31799:17;31795:45;31792:71;;;31843:18;;:::i;:::-;-1:-1:-1;31883:9:136;;31730:168::o;31903:128::-;31943:3;31974:1;31970:6;31967:1;31964:13;31961:39;;;31980:18;;:::i;:::-;-1:-1:-1;32016:9:136;;31903:128::o;32391:350::-;32593:2;32575:21;;;32632:2;32612:18;;;32605:30;32671:28;32666:2;32651:18;;32644:56;32732:2;32717:18;;32391:350::o;32746:127::-;32807:10;32802:3;32798:20;32795:1;32788:31;32838:4;32835:1;32828:15;32862:4;32859:1;32852:15;34288:157;34318:1;34352:4;34349:1;34345:12;34376:3;34366:37;;34383:18;;:::i;:::-;34435:3;34428:4;34425:1;34421:12;34417:22;34412:27;;;34288:157;;;;:::o;34450:195::-;34488:4;34525;34522:1;34518:12;34557:4;34554:1;34550:12;34582:3;34577;34574:12;34571:38;;;34589:18;;:::i;:::-;34626:13;;;34450:195;-1:-1:-1;;;34450:195:136:o;38659:120::-;38699:1;38725;38715:35;;38730:18;;:::i;:::-;-1:-1:-1;38764:9:136;;38659:120::o;39139:184::-;39209:6;39262:2;39250:9;39241:7;39237:23;39233:32;39230:52;;;39278:1;39275;39268:12;39230:52;-1:-1:-1;39301:16:136;;39139:184;-1:-1:-1;39139:184:136:o;39328:338::-;39530:2;39512:21;;;39569:2;39549:18;;;39542:30;-1:-1:-1;;;39603:2:136;39588:18;;39581:44;39657:2;39642:18;;39328:338::o","linkReferences":{}},"methodIdentifiers":{"PAUSED_UPDATE_OPERATOR_SET()":"f4db0571","PAUSED_UPDATE_STATE_ROOT()":"0510c191","THRESHOLD_DENOMINATOR()":"ef024458","aggregator()":"245a7bfc","forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))":"1df9e1d2","getApk()":"6f5b9918","getOperatorWeight(bytes32)":"dd64766e","getQuorumThreshold()":"4afa71b9","getStateRoot(uint32,uint64)":"b3a9e53b","getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))":"d5d4bb5a","getTotalWeight()":"06aba0e1","initialize(uint128,address,address,address)":"90540c37","nextOperatorUpdateId()":"e0f5d9f0","owner()":"8da5cb5b","pause(uint256)":"136439dd","pauseAll()":"595c6a67","paused()":"5c975abb","paused(uint8)":"5ac86ab7","pauserRegistry()":"886f1195","renounceOwnership()":"715018a6","setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)":"b128aeee","setPauserRegistry(address)":"10d67a2f","setQuorumThreshold(uint128)":"2db52ea5","transferOwnership(address)":"f2fde38b","unpause(uint256)":"fabc1cbc","updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)":"2f65284e","updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":"82616b7b","updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":"1fb4d411"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IPauserRegistry\",\"name\":\"pauserRegistry\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"PauserRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"name\":\"StateRootUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"PAUSED_UPDATE_OPERATOR_SET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSED_UPDATE_STATE_ROOT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"THRESHOLD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aggregator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"weight\",\"type\":\"uint128\"}],\"internalType\":\"struct RollupOperators.Operator[]\",\"name\":\"operators\",\"type\":\"tuple[]\"}],\"internalType\":\"struct OperatorSetUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"forceOperatorSetUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getApk\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"pubkeyHash\",\"type\":\"bytes32\"}],\"name\":\"getOperatorWeight\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getQuorumThreshold\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"}],\"name\":\"getStateRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct StateRootUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"storageKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"stateTrieWitness\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"storageTrieWitness\",\"type\":\"bytes\"}],\"internalType\":\"struct SFFLRegistryBase.ProofParams\",\"name\":\"proofParams\",\"type\":\"tuple\"}],\"name\":\"getStorageValue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalWeight\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"quorumThreshold\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_aggregator\",\"type\":\"address\"},{\"internalType\":\"contract IPauserRegistry\",\"name\":\"_pauserRegistry\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorUpdateId\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauserRegistry\",\"outputs\":[{\"internalType\":\"contract IPauserRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"weight\",\"type\":\"uint128\"}],\"internalType\":\"struct RollupOperators.Operator[]\",\"name\":\"operators\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"_nextOperatorUpdateId\",\"type\":\"uint64\"}],\"name\":\"setInitialOperatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"setPauserRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newQuorumThreshold\",\"type\":\"uint128\"}],\"name\":\"setQuorumThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct StateRootUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"storageKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"stateTrieWitness\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"storageTrieWitness\",\"type\":\"bytes\"}],\"internalType\":\"struct SFFLRegistryBase.ProofParams\",\"name\":\"proofParams\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"agreement\",\"type\":\"bytes\"}],\"name\":\"updateAndGetStorageValue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"weight\",\"type\":\"uint128\"}],\"internalType\":\"struct RollupOperators.Operator[]\",\"name\":\"operators\",\"type\":\"tuple[]\"}],\"internalType\":\"struct OperatorSetUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"internalType\":\"struct RollupOperators.SignatureInfo\",\"name\":\"signatureInfo\",\"type\":\"tuple\"}],\"name\":\"updateOperatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct StateRootUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"internalType\":\"struct RollupOperators.SignatureInfo\",\"name\":\"signatureInfo\",\"type\":\"tuple\"}],\"name\":\"updateStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"THRESHOLD_DENOMINATOR()\":{\"returns\":{\"_0\":\"Operator set weight threshold denominator\"}},\"forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))\":{\"params\":{\"message\":\"Operator set update message\"}},\"getApk()\":{\"returns\":{\"_0\":\"Operator set aggregate public key\"}},\"getOperatorWeight(bytes32)\":{\"params\":{\"pubkeyHash\":\"Operator pubkey hash\"},\"returns\":{\"_0\":\"Operator weight\"}},\"getQuorumThreshold()\":{\"returns\":{\"_0\":\"Operator set weight threshold\"}},\"getStateRoot(uint32,uint64)\":{\"details\":\"Does not fail if it's empty, should be checked for zeroes\",\"params\":{\"blockHeight\":\"Rollup block height\",\"rollupId\":\"Pre-defined rollup ID\"},\"returns\":{\"_0\":\"Rollup state root, or 0 if unset\"}},\"getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))\":{\"params\":{\"message\":\"State root update message\",\"proofParams\":\"Storage proof parameters\"},\"returns\":{\"_0\":\"Verified storage value\"}},\"getTotalWeight()\":{\"returns\":{\"_0\":\"Operator set total weight\"}},\"initialize(uint128,address,address,address)\":{\"params\":{\"_aggregator\":\"Aggregator address\",\"_pauserRegistry\":\"Pauser registry address\",\"initialOwner\":\"Owner address\",\"quorumThreshold\":\"Quorum threshold, based on THRESHOLD_DENOMINATOR\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pause(uint256)\":{\"details\":\"This function can only pause functionality, and thus cannot 'unflip' any bit in `_paused` from 1 to 0.\",\"params\":{\"newPausedStatus\":\"represents the new value for `_paused` to take, which means it may flip several bits at once.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)\":{\"params\":{\"_nextOperatorUpdateId\":\"Starting next operator update message ID\",\"operators\":\"Initial operator list\"}},\"setQuorumThreshold(uint128)\":{\"params\":{\"newQuorumThreshold\":\"New quorum threshold, based on THRESHOLD_DENOMINATOR\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unpause(uint256)\":{\"details\":\"This function can only unpause functionality, and thus cannot 'flip' any bit in `_paused` from 0 to 1.\",\"params\":{\"newPausedStatus\":\"represents the new value for `_paused` to take, which means it may flip several bits at once.\"}},\"updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)\":{\"params\":{\"agreement\":\"AVS operators agreement info\",\"message\":\"State root update message\",\"proofParams\":\"Storage proof parameters\"},\"returns\":{\"_0\":\"Verified storage value\"}},\"updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))\":{\"params\":{\"message\":\"Operator set update message\",\"signatureInfo\":\"BLS aggregated signature info\"}},\"updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))\":{\"params\":{\"message\":\"State root update message\",\"signatureInfo\":\"BLS aggregated signature info\"}}},\"stateVariables\":{\"_operatorSet\":{\"details\":\"Operator set used for agreements\"}},\"title\":\"SFFL registry for rollups / external networks\",\"version\":1},\"userdoc\":{\"events\":{\"Paused(address,uint256)\":{\"notice\":\"Emitted when the pause is triggered by `account`, and changed to `newPausedStatus`.\"},\"PauserRegistrySet(address,address)\":{\"notice\":\"Emitted when the `pauserRegistry` is set to `newPauserRegistry`.\"},\"StateRootUpdated(uint32,uint64,bytes32)\":{\"notice\":\"Emitted when a rollup's state root is updated\"},\"Unpaused(address,uint256)\":{\"notice\":\"Emitted when the pause is lifted by `account`, and changed to `newPausedStatus`.\"}},\"kind\":\"user\",\"methods\":{\"PAUSED_UPDATE_OPERATOR_SET()\":{\"notice\":\"Index for flag that pauses operator set updates\"},\"PAUSED_UPDATE_STATE_ROOT()\":{\"notice\":\"Index for flag that pauses state root updates\"},\"THRESHOLD_DENOMINATOR()\":{\"notice\":\"Gets the operator set quorum weight threshold denominator\"},\"aggregator()\":{\"notice\":\"Aggregator address, used for the initial operator set setup\"},\"forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))\":{\"notice\":\"Forces an operator set update. This is meant to be used only by the owner in a testnet scenario in case there is no consensus on a particular operator set update. This can also be used while operator set updating is paused.\"},\"getApk()\":{\"notice\":\"Gets the operator set aggregate public key\"},\"getOperatorWeight(bytes32)\":{\"notice\":\"Gets an operator's weight\"},\"getQuorumThreshold()\":{\"notice\":\"Gets the operator set weight threshold\"},\"getStateRoot(uint32,uint64)\":{\"notice\":\"Gets a state root for a rollup in a specific block height\"},\"getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))\":{\"notice\":\"Gets a storage key value based on a rollup's state root in a block\"},\"getTotalWeight()\":{\"notice\":\"Gets the operator set total weight\"},\"initialize(uint128,address,address,address)\":{\"notice\":\"Initializes the contract\"},\"nextOperatorUpdateId()\":{\"notice\":\"Next operator set update message ID\"},\"pause(uint256)\":{\"notice\":\"This function is used to pause an EigenLayer contract's functionality. It is permissioned to the `pauser` address, which is expected to be a low threshold multisig.\"},\"pauseAll()\":{\"notice\":\"Alias for `pause(type(uint256).max)`.\"},\"paused()\":{\"notice\":\"Returns the current paused status as a uint256.\"},\"paused(uint8)\":{\"notice\":\"Returns 'true' if the `indexed`th bit of `_paused` is 1, and 'false' otherwise\"},\"pauserRegistry()\":{\"notice\":\"Address of the `PauserRegistry` contract that this contract defers to for determining access control (for pausing).\"},\"setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)\":{\"notice\":\"Sets the initial operator set\"},\"setPauserRegistry(address)\":{\"notice\":\"Allows the unpauser to set a new pauser registry\"},\"setQuorumThreshold(uint128)\":{\"notice\":\"Sets the operator set quorum weight threshold\"},\"unpause(uint256)\":{\"notice\":\"This function is used to unpause an EigenLayer contract's functionality. It is permissioned to the `unpauser` address, which is expected to be a high threshold multisig or governance contract.\"},\"updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)\":{\"notice\":\"Gets a storage key value based on a rollup's state root in a block\"},\"updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))\":{\"notice\":\"Updates the operator set through an operator set update message\"},\"updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))\":{\"notice\":\"Updates a rollup's state root for a block height through a state root update message\"}},\"notice\":\"Contract that centralizes the AVS operator set copy management, which is based on agreements such as the state root updates, as well as state root updates themselves. Differently from the Ethereum AVS contracts, the rollup contract heavily assumes a one-quorum operator set and can only prove agreements based on the current operator set state\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/rollup/SFFLRegistryRollup.sol\":\"SFFLRegistryRollup\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[\":@eigenlayer/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":@eth-optimism/=node_modules/@eth-optimism/\",\":@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324\",\"dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d\",\"dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol\":{\"keccak256\":\"0xc543d34b3e0fd116227fc5218286de6b30a9141f47df2e8cc17d857d2c0cb338\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e78ca3c3c9f14ccde852ea41bc411726ea7770a1cf2ef18851e67bcdf7522cff\",\"dweb:/ipfs/QmWagcWsaNZqBZhdEHhZ4PcU9fx5wQnrbjoaaFvjEwgGHt\"]},\"lib/eigenlayer-middleware/src/libraries/BN254.sol\":{\"keccak256\":\"0x40a9a94aaa705b67d1c4efdccb8e1ff8ccf41d1ce20639f6cd6fd27d84891417\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4b7a07633fc3fce4d2eac8dc16ee2cf138e34583e1822d3d705d7c567667bf49\",\"dweb:/ipfs/QmVWYp64T71yKnT2Bpoq4wj7bADUKmjW8w5uzhCTh5Bs91\"]},\"node_modules/@eth-optimism/contracts/libraries/codec/Lib_OVMCodec.sol\":{\"keccak256\":\"0xb5009ac1e0617e0b3b2fb917f08f8e8a7ae706034cc3a675258bc3d91978525e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://776f8407a5c3bcd0991801a922ea69a9665b14e85e6ac925ef9ec5dc5d0de87c\",\"dweb:/ipfs/QmRE5yQd69rDDmPPo2TcFDoCzXtbodHgicQNoXiRCTsBJb\"]},\"node_modules/@eth-optimism/contracts/libraries/resolver/Lib_AddressManager.sol\":{\"keccak256\":\"0xcde9b29429d512c549f7c1b8a033f161fa71c18cda08b241748663854196ae14\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6fbd748ce0173bd14166174c68a43e108ec27d8f90cf3dc3703cda120b641e0b\",\"dweb:/ipfs/QmT818AKJieRAndixSms9L7gmC7b1cvD4BGycUPtFpbWaM\"]},\"node_modules/@eth-optimism/contracts/libraries/resolver/Lib_AddressResolver.sol\":{\"keccak256\":\"0x515c4db671a28e2fe180201f6d11c0208c05f582ca3489fb6b8e81c27659bc62\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c92c08efa7be210e9447267517c77ca39372b5bd33d121539ef1f59fac149fa\",\"dweb:/ipfs/QmZ8V2Kaw7XqGhCCe2CAPMCPkHgcMGr92enXfXqGpBYw23\"]},\"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPReader.sol\":{\"keccak256\":\"0xd794d1b32c6e31d40e2526b5e519de1b4e8d14d6933889f9b916e69c5d1848c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://76a6d82cce64bf143f77249c49de3d93687a2b3e69b020f2f74fad503806b52b\",\"dweb:/ipfs/QmUHF33h4Tn4Q4cVHwk82eMMer8YTDTk1u3e4MCfrSYt3J\"]},\"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPWriter.sol\":{\"keccak256\":\"0x215b90672ce126effc3f2df61ca0cdf52d2b1cc9be602877e637829b0bf229fd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7418707a22a792e838759becfa4ceb60774171a0a219cdd39452351225ec31a6\",\"dweb:/ipfs/QmZWxL4DNv8EVZoJbLSf4euzQwhzyRduSia5cVFJo4Bxh2\"]},\"node_modules/@eth-optimism/contracts/libraries/trie/Lib_MerkleTrie.sol\":{\"keccak256\":\"0x081304d7627b242e0a5724785a9cc4128b3104460f234ffe404d7bc87c1ad162\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1891f18b4ac99bc8c1dcbe255bf9db1e5c724389c0fa533ca18a6039aa8fe9f7\",\"dweb:/ipfs/QmW8GaMNvDeDQnjHAaAfv9wwjmtvjvEcQ9pyoxVmeK5x1x\"]},\"node_modules/@eth-optimism/contracts/libraries/trie/Lib_SecureMerkleTrie.sol\":{\"keccak256\":\"0x38e47070ba79b1049b6d623db3377322d98c2217e8fa786bd48116fc7e3bfd9e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90c88905fa6495e230e8099e2d7e5ad08bc95466a54d1f0eb0cedcdbbf5bdb63\",\"dweb:/ipfs/QmQVY4xxCLZC825mAgLjyaHEeHP4gPr65pN2SJCgPURDDA\"]},\"node_modules/@eth-optimism/contracts/libraries/utils/Lib_Bytes32Utils.sol\":{\"keccak256\":\"0xf2d1a526f2529e51fc2fffccf093c1691e291cbbb6de8a3da7d7f80024a9a234\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3e0ff635f68c17f1b1a9b094a9da670dd1170241e67d8e87b00be2157f28ad6\",\"dweb:/ipfs/QmS9fK2TZ123NE2iXAbUxfaasSPGbui5EG6HP9uz6gveiN\"]},\"node_modules/@eth-optimism/contracts/libraries/utils/Lib_BytesUtils.sol\":{\"keccak256\":\"0xc39ee13f97e4ccfbc72a5aac571deb3c1aff882fca2dd18be794d43ac5de0a30\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c5761b5cf7287ac94404f54481d88ee0122bc031f1c2e0b4b2cc4c384e1b018\",\"dweb:/ipfs/QmbBTssPvH5ABa3e8MNRoHMkGGaoRXqneWhJzrDx7FsD1R\"]},\"src/base/SFFLRegistryBase.sol\":{\"keccak256\":\"0x7f36c3b4792292004cd625caf96eb003dc1be3b24e7ab2f449be13f1b150ec31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5e2a259efbc6542ac0badd7b3969a564c7f563742874bccd1c3b4ca12056bbd9\",\"dweb:/ipfs/QmRDavGQa82t6B9rjtYXvPcAMWALLA4Uzd5ZT9YpgBXYyV\"]},\"src/base/message/OperatorSetUpdate.sol\":{\"keccak256\":\"0x534462101877424c2c233d4032582dbc5a430205d9362e81d1343dd9e9822e5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a99f49eb89a0b1c4447386e0e5bb065b78695a594621b22fd0fa1271311fba83\",\"dweb:/ipfs/QmRyrpJDeeYMzLQTCwFkCHndSdYsujfFDhXPhpJN19HPRw\"]},\"src/base/message/StateRootUpdate.sol\":{\"keccak256\":\"0x678b218208110cf1d50201459ed67fb2e110c7313251ffa240465ecfce89e6a7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dbae4e861fec0cbcdf7b98603ffc42e2a71034576ff4db50534d73e83e17523b\",\"dweb:/ipfs/QmPWNZXWKaxTA8MJzSNX5Qtmw31rM4SrYgVJtQ9UjM2kFu\"]},\"src/base/utils/RollupOperators.sol\":{\"keccak256\":\"0xbfc1ca2ec06fb58629caa7bdf00fce61daaca1a58a3d50e7b4f69ddf1b132784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://853941dc11c18731968065c60851971e41e41d35471337d67eb3f92a28aa8ff6\",\"dweb:/ipfs/Qma9YMpvp8X9B1Fe5Win3vyKGd3LPavEJQCLNpFDFg1MLb\"]},\"src/rollup/SFFLRegistryRollup.sol\":{\"keccak256\":\"0xf2d58f60a6869128f8ebf7c2f49b8515842fbafce49ce8d9e4c1214b3bb1a113\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9ffba4b68c3b53a3c6472fcc3e9fbb14a99575c6faa76fcaae3d7eeb754247d7\",\"dweb:/ipfs/QmfD27QeaYNirGaZqkFPj5ceGiajnq57MYsCShmbk7Zsmn\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.12+commit.f00d7308"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"uint256","name":"newPausedStatus","type":"uint256","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"contract IPauserRegistry","name":"pauserRegistry","type":"address","indexed":false},{"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address","indexed":false}],"type":"event","name":"PauserRegistrySet","anonymous":false},{"inputs":[{"internalType":"uint32","name":"rollupId","type":"uint32","indexed":true},{"internalType":"uint64","name":"blockHeight","type":"uint64","indexed":true},{"internalType":"bytes32","name":"stateRoot","type":"bytes32","indexed":false}],"type":"event","name":"StateRootUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"uint256","name":"newPausedStatus","type":"uint256","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"PAUSED_UPDATE_OPERATOR_SET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PAUSED_UPDATE_STATE_ROOT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"THRESHOLD_DENOMINATOR","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"aggregator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"struct OperatorSetUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]","components":[{"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint128","name":"weight","type":"uint128"}]}]}],"stateMutability":"nonpayable","type":"function","name":"forceOperatorSetUpdate"},{"inputs":[],"stateMutability":"view","type":"function","name":"getApk","outputs":[{"internalType":"struct BN254.G1Point","name":"","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes32","name":"pubkeyHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getOperatorWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getQuorumThreshold","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"}],"stateMutability":"view","type":"function","name":"getStateRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}]},{"internalType":"struct SFFLRegistryBase.ProofParams","name":"proofParams","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"storageKey","type":"bytes32"},{"internalType":"bytes","name":"stateTrieWitness","type":"bytes"},{"internalType":"bytes","name":"storageTrieWitness","type":"bytes"}]}],"stateMutability":"view","type":"function","name":"getStorageValue","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getTotalWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[{"internalType":"uint128","name":"quorumThreshold","type":"uint128"},{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_aggregator","type":"address"},{"internalType":"contract IPauserRegistry","name":"_pauserRegistry","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"nextOperatorUpdateId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pauseAll"},{"inputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"pauserRegistry","outputs":[{"internalType":"contract IPauserRegistry","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]","components":[{"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint128","name":"weight","type":"uint128"}]},{"internalType":"uint64","name":"_nextOperatorUpdateId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setInitialOperatorSet"},{"inputs":[{"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setPauserRegistry"},{"inputs":[{"internalType":"uint128","name":"newQuorumThreshold","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"setQuorumThreshold"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}]},{"internalType":"struct SFFLRegistryBase.ProofParams","name":"proofParams","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"storageKey","type":"bytes32"},{"internalType":"bytes","name":"stateTrieWitness","type":"bytes"},{"internalType":"bytes","name":"storageTrieWitness","type":"bytes"}]},{"internalType":"bytes","name":"agreement","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"updateAndGetStorageValue","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct OperatorSetUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]","components":[{"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint128","name":"weight","type":"uint128"}]}]},{"internalType":"struct RollupOperators.SignatureInfo","name":"signatureInfo","type":"tuple","components":[{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}]}],"stateMutability":"nonpayable","type":"function","name":"updateOperatorSet"},{"inputs":[{"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}]},{"internalType":"struct RollupOperators.SignatureInfo","name":"signatureInfo","type":"tuple","components":[{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}]}],"stateMutability":"nonpayable","type":"function","name":"updateStateRoot"}],"devdoc":{"kind":"dev","methods":{"THRESHOLD_DENOMINATOR()":{"returns":{"_0":"Operator set weight threshold denominator"}},"forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))":{"params":{"message":"Operator set update message"}},"getApk()":{"returns":{"_0":"Operator set aggregate public key"}},"getOperatorWeight(bytes32)":{"params":{"pubkeyHash":"Operator pubkey hash"},"returns":{"_0":"Operator weight"}},"getQuorumThreshold()":{"returns":{"_0":"Operator set weight threshold"}},"getStateRoot(uint32,uint64)":{"details":"Does not fail if it's empty, should be checked for zeroes","params":{"blockHeight":"Rollup block height","rollupId":"Pre-defined rollup ID"},"returns":{"_0":"Rollup state root, or 0 if unset"}},"getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))":{"params":{"message":"State root update message","proofParams":"Storage proof parameters"},"returns":{"_0":"Verified storage value"}},"getTotalWeight()":{"returns":{"_0":"Operator set total weight"}},"initialize(uint128,address,address,address)":{"params":{"_aggregator":"Aggregator address","_pauserRegistry":"Pauser registry address","initialOwner":"Owner address","quorumThreshold":"Quorum threshold, based on THRESHOLD_DENOMINATOR"}},"owner()":{"details":"Returns the address of the current owner."},"pause(uint256)":{"details":"This function can only pause functionality, and thus cannot 'unflip' any bit in `_paused` from 1 to 0.","params":{"newPausedStatus":"represents the new value for `_paused` to take, which means it may flip several bits at once."}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)":{"params":{"_nextOperatorUpdateId":"Starting next operator update message ID","operators":"Initial operator list"}},"setQuorumThreshold(uint128)":{"params":{"newQuorumThreshold":"New quorum threshold, based on THRESHOLD_DENOMINATOR"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"unpause(uint256)":{"details":"This function can only unpause functionality, and thus cannot 'flip' any bit in `_paused` from 0 to 1.","params":{"newPausedStatus":"represents the new value for `_paused` to take, which means it may flip several bits at once."}},"updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)":{"params":{"agreement":"AVS operators agreement info","message":"State root update message","proofParams":"Storage proof parameters"},"returns":{"_0":"Verified storage value"}},"updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":{"params":{"message":"Operator set update message","signatureInfo":"BLS aggregated signature info"}},"updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":{"params":{"message":"State root update message","signatureInfo":"BLS aggregated signature info"}}},"version":1},"userdoc":{"kind":"user","methods":{"PAUSED_UPDATE_OPERATOR_SET()":{"notice":"Index for flag that pauses operator set updates"},"PAUSED_UPDATE_STATE_ROOT()":{"notice":"Index for flag that pauses state root updates"},"THRESHOLD_DENOMINATOR()":{"notice":"Gets the operator set quorum weight threshold denominator"},"aggregator()":{"notice":"Aggregator address, used for the initial operator set setup"},"forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))":{"notice":"Forces an operator set update. This is meant to be used only by the owner in a testnet scenario in case there is no consensus on a particular operator set update. This can also be used while operator set updating is paused."},"getApk()":{"notice":"Gets the operator set aggregate public key"},"getOperatorWeight(bytes32)":{"notice":"Gets an operator's weight"},"getQuorumThreshold()":{"notice":"Gets the operator set weight threshold"},"getStateRoot(uint32,uint64)":{"notice":"Gets a state root for a rollup in a specific block height"},"getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))":{"notice":"Gets a storage key value based on a rollup's state root in a block"},"getTotalWeight()":{"notice":"Gets the operator set total weight"},"initialize(uint128,address,address,address)":{"notice":"Initializes the contract"},"nextOperatorUpdateId()":{"notice":"Next operator set update message ID"},"pause(uint256)":{"notice":"This function is used to pause an EigenLayer contract's functionality. It is permissioned to the `pauser` address, which is expected to be a low threshold multisig."},"pauseAll()":{"notice":"Alias for `pause(type(uint256).max)`."},"paused()":{"notice":"Returns the current paused status as a uint256."},"paused(uint8)":{"notice":"Returns 'true' if the `indexed`th bit of `_paused` is 1, and 'false' otherwise"},"pauserRegistry()":{"notice":"Address of the `PauserRegistry` contract that this contract defers to for determining access control (for pausing)."},"setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)":{"notice":"Sets the initial operator set"},"setPauserRegistry(address)":{"notice":"Allows the unpauser to set a new pauser registry"},"setQuorumThreshold(uint128)":{"notice":"Sets the operator set quorum weight threshold"},"unpause(uint256)":{"notice":"This function is used to unpause an EigenLayer contract's functionality. It is permissioned to the `unpauser` address, which is expected to be a high threshold multisig or governance contract."},"updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)":{"notice":"Gets a storage key value based on a rollup's state root in a block"},"updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":{"notice":"Updates the operator set through an operator set update message"},"updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":{"notice":"Updates a rollup's state root for a block height through a state root update message"}},"version":1}},"settings":{"remappings":["@eigenlayer/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","@eth-optimism/=node_modules/@eth-optimism/","@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/","@openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/","eigenlayer-middleware/=lib/eigenlayer-middleware/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":100},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/rollup/SFFLRegistryRollup.sol":"SFFLRegistryRollup"},"evmVersion":"london","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673","urls":["bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2","dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7","urls":["bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92","dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol":{"keccak256":"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f","urls":["bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324","dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol":{"keccak256":"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49","urls":["bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d","dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol":{"keccak256":"0xc543d34b3e0fd116227fc5218286de6b30a9141f47df2e8cc17d857d2c0cb338","urls":["bzz-raw://e78ca3c3c9f14ccde852ea41bc411726ea7770a1cf2ef18851e67bcdf7522cff","dweb:/ipfs/QmWagcWsaNZqBZhdEHhZ4PcU9fx5wQnrbjoaaFvjEwgGHt"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/libraries/BN254.sol":{"keccak256":"0x40a9a94aaa705b67d1c4efdccb8e1ff8ccf41d1ce20639f6cd6fd27d84891417","urls":["bzz-raw://4b7a07633fc3fce4d2eac8dc16ee2cf138e34583e1822d3d705d7c567667bf49","dweb:/ipfs/QmVWYp64T71yKnT2Bpoq4wj7bADUKmjW8w5uzhCTh5Bs91"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/codec/Lib_OVMCodec.sol":{"keccak256":"0xb5009ac1e0617e0b3b2fb917f08f8e8a7ae706034cc3a675258bc3d91978525e","urls":["bzz-raw://776f8407a5c3bcd0991801a922ea69a9665b14e85e6ac925ef9ec5dc5d0de87c","dweb:/ipfs/QmRE5yQd69rDDmPPo2TcFDoCzXtbodHgicQNoXiRCTsBJb"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/resolver/Lib_AddressManager.sol":{"keccak256":"0xcde9b29429d512c549f7c1b8a033f161fa71c18cda08b241748663854196ae14","urls":["bzz-raw://6fbd748ce0173bd14166174c68a43e108ec27d8f90cf3dc3703cda120b641e0b","dweb:/ipfs/QmT818AKJieRAndixSms9L7gmC7b1cvD4BGycUPtFpbWaM"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/resolver/Lib_AddressResolver.sol":{"keccak256":"0x515c4db671a28e2fe180201f6d11c0208c05f582ca3489fb6b8e81c27659bc62","urls":["bzz-raw://8c92c08efa7be210e9447267517c77ca39372b5bd33d121539ef1f59fac149fa","dweb:/ipfs/QmZ8V2Kaw7XqGhCCe2CAPMCPkHgcMGr92enXfXqGpBYw23"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPReader.sol":{"keccak256":"0xd794d1b32c6e31d40e2526b5e519de1b4e8d14d6933889f9b916e69c5d1848c6","urls":["bzz-raw://76a6d82cce64bf143f77249c49de3d93687a2b3e69b020f2f74fad503806b52b","dweb:/ipfs/QmUHF33h4Tn4Q4cVHwk82eMMer8YTDTk1u3e4MCfrSYt3J"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPWriter.sol":{"keccak256":"0x215b90672ce126effc3f2df61ca0cdf52d2b1cc9be602877e637829b0bf229fd","urls":["bzz-raw://7418707a22a792e838759becfa4ceb60774171a0a219cdd39452351225ec31a6","dweb:/ipfs/QmZWxL4DNv8EVZoJbLSf4euzQwhzyRduSia5cVFJo4Bxh2"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/trie/Lib_MerkleTrie.sol":{"keccak256":"0x081304d7627b242e0a5724785a9cc4128b3104460f234ffe404d7bc87c1ad162","urls":["bzz-raw://1891f18b4ac99bc8c1dcbe255bf9db1e5c724389c0fa533ca18a6039aa8fe9f7","dweb:/ipfs/QmW8GaMNvDeDQnjHAaAfv9wwjmtvjvEcQ9pyoxVmeK5x1x"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/trie/Lib_SecureMerkleTrie.sol":{"keccak256":"0x38e47070ba79b1049b6d623db3377322d98c2217e8fa786bd48116fc7e3bfd9e","urls":["bzz-raw://90c88905fa6495e230e8099e2d7e5ad08bc95466a54d1f0eb0cedcdbbf5bdb63","dweb:/ipfs/QmQVY4xxCLZC825mAgLjyaHEeHP4gPr65pN2SJCgPURDDA"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/utils/Lib_Bytes32Utils.sol":{"keccak256":"0xf2d1a526f2529e51fc2fffccf093c1691e291cbbb6de8a3da7d7f80024a9a234","urls":["bzz-raw://f3e0ff635f68c17f1b1a9b094a9da670dd1170241e67d8e87b00be2157f28ad6","dweb:/ipfs/QmS9fK2TZ123NE2iXAbUxfaasSPGbui5EG6HP9uz6gveiN"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/utils/Lib_BytesUtils.sol":{"keccak256":"0xc39ee13f97e4ccfbc72a5aac571deb3c1aff882fca2dd18be794d43ac5de0a30","urls":["bzz-raw://5c5761b5cf7287ac94404f54481d88ee0122bc031f1c2e0b4b2cc4c384e1b018","dweb:/ipfs/QmbBTssPvH5ABa3e8MNRoHMkGGaoRXqneWhJzrDx7FsD1R"],"license":"MIT"},"src/base/SFFLRegistryBase.sol":{"keccak256":"0x7f36c3b4792292004cd625caf96eb003dc1be3b24e7ab2f449be13f1b150ec31","urls":["bzz-raw://5e2a259efbc6542ac0badd7b3969a564c7f563742874bccd1c3b4ca12056bbd9","dweb:/ipfs/QmRDavGQa82t6B9rjtYXvPcAMWALLA4Uzd5ZT9YpgBXYyV"],"license":"MIT"},"src/base/message/OperatorSetUpdate.sol":{"keccak256":"0x534462101877424c2c233d4032582dbc5a430205d9362e81d1343dd9e9822e5e","urls":["bzz-raw://a99f49eb89a0b1c4447386e0e5bb065b78695a594621b22fd0fa1271311fba83","dweb:/ipfs/QmRyrpJDeeYMzLQTCwFkCHndSdYsujfFDhXPhpJN19HPRw"],"license":"MIT"},"src/base/message/StateRootUpdate.sol":{"keccak256":"0x678b218208110cf1d50201459ed67fb2e110c7313251ffa240465ecfce89e6a7","urls":["bzz-raw://dbae4e861fec0cbcdf7b98603ffc42e2a71034576ff4db50534d73e83e17523b","dweb:/ipfs/QmPWNZXWKaxTA8MJzSNX5Qtmw31rM4SrYgVJtQ9UjM2kFu"],"license":"MIT"},"src/base/utils/RollupOperators.sol":{"keccak256":"0xbfc1ca2ec06fb58629caa7bdf00fce61daaca1a58a3d50e7b4f69ddf1b132784","urls":["bzz-raw://853941dc11c18731968065c60851971e41e41d35471337d67eb3f92a28aa8ff6","dweb:/ipfs/Qma9YMpvp8X9B1Fe5Win3vyKGd3LPavEJQCLNpFDFg1MLb"],"license":"MIT"},"src/rollup/SFFLRegistryRollup.sol":{"keccak256":"0xf2d58f60a6869128f8ebf7c2f49b8515842fbafce49ce8d9e4c1214b3bb1a113","urls":["bzz-raw://9ffba4b68c3b53a3c6472fcc3e9fbb14a99575c6faa76fcaae3d7eeb754247d7","dweb:/ipfs/QmfD27QeaYNirGaZqkFPj5ceGiajnq57MYsCShmbk7Zsmn"],"license":"MIT"}},"version":1},"id":128} \ No newline at end of file diff --git a/examples/nffl-cli/getStorageValue.js b/examples/nffl-cli/getStorageValue.js deleted file mode 100644 index c7a46e23..00000000 --- a/examples/nffl-cli/getStorageValue.js +++ /dev/null @@ -1,65 +0,0 @@ -const { ethers } = require('ethers'); -const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); -const RLP = require('rlp'); - -/* - * Get the storage value of a target contract at a specified block height - * from the source chain and verifies it on the destination chain -*/ -async function getStorageValue(options) { - // - // Get proof - // - const srcProvider = new ethers.JsonRpcProvider(options.srcRpcUrl); - //chainId - const { chainId } = await srcProvider.getNetwork(); - // Prepare params - const params = [ - options.contractAddress, - [options.storageKey], - `0x${Number(options.blockHeight).toString(16)}` - ]; - // Send the RPC request - const proof = await srcProvider.send("eth_getProof", params); - // Encode proof to RLP - const rlpStorageProof = RLP.encode(proof.storageProof[0].proof); - const rlpAccountProof = RLP.encode(proof.accountProof); - - // - // Prove - // - // Get RegistryRollup contract - const dstProvider = new ethers.JsonRpcProvider(options.dstRpcUrl); - const registryRollup = new ethers.Contract(options.nfflRegistryRollup, NFFLRegistryRollupABI, dstProvider); - // Fetch data - const response = await fetch(`${options.aggregator}/aggregation/state-root-update?rollupId=${chainId}&blockHeight=${options.blockHeight}`); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - const data = await response.json(); - // Build message - const nearDaTransactionId = '0x'+Buffer.from(data.Message.NearDaTransactionId).toString('hex'); - const nearDaCommitment = '0x'+Buffer.from(data.Message.NearDaCommitment).toString('hex'); - const stateRoot = '0x'+Buffer.from(data.Message.StateRoot).toString('hex'); - const message = { - rollupId: data.Message.RollupId, - blockHeight: data.Message.BlockHeight, - timestamp:data.Message.Timestamp, - nearDaTransactionId, - nearDaCommitment, - stateRoot - }; - // Build proof parameters - const proofParams = { - target: options.contractAddress, - storageKey: options.storageKey, - stateTrieWitness: rlpAccountProof, - storageTrieWitness: rlpStorageProof - } - - // Get storage value - const storageValue = await registryRollup.getStorageValue(message,proofParams); - console.log(`Account ${options.contractAddress} storage slot ${options.storageKey} equals to ${storageValue}`); -} - -module.exports = {getStorageValue} \ No newline at end of file diff --git a/examples/nffl-cli/index.js b/examples/nffl-cli/index.js deleted file mode 100755 index 5deb40ef..00000000 --- a/examples/nffl-cli/index.js +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env node - -const { program } = require('commander'); - -const pkg = require('./package.json'); - -const {getStorageValue} = require('./getStorageValue'); -const {updateStateRoot} = require('./updateStateRoot'); -const {updateOperatorSet} = require('./updateOperatorSet'); - -program - .version(pkg.version) - .description('NFFL demo CLI tool'); - -program -.command('getStorageValue') -.description('Get the storage value of a target contract at a specified block height from the source chain and verifies it on the destination chain') -.requiredOption('--srcRpcUrl ', 'Source RPC URL') -.requiredOption('--contractAddress ', 'Address of the target contract') -.requiredOption('--storageKey ', 'Storage key') -.requiredOption('--blockHeight ', 'Block height') -.requiredOption('--dstRpcUrl ', 'Destination RPC URL') -.requiredOption('--nfflRegistryRollup ', 'nfflRegistryRollup contract address on destination chain') -.requiredOption('--aggregator ', 'Aggregator REST API') -.action(getStorageValue); - -program -.command('updateStateRoot') -.description('Update the state root for a given rollup in the nfflRegistryRollup contract') -.requiredOption('--rpcUrl ', 'RPC URL') -.requiredOption('--rollupId ', 'Rollup Id') -.requiredOption('--blockHeight ', 'blockHeight') -.requiredOption('--nfflRegistryRollup ', 'nfflRegistryRollup contract address on destination chain') -.requiredOption('--aggregator ', 'Aggregator REST API') -.requiredOption('--envKey ', 'Name of the environment variable containing the private key') -.action(updateStateRoot); - -program -.command('updateOperatorSet') -.description('Update the operator set for the nfflRegistryRollup contract') -.requiredOption('--rpcUrl ', 'RPC URL') -.requiredOption('--nfflRegistryRollup ', 'nfflRegistryRollup contract address on destination chain') -.requiredOption('--aggregator ', 'Aggregator REST API') -.requiredOption('--envKey ', 'Name of the environment variable containing the private key') -.action(updateOperatorSet); - -program.parse(process.argv); diff --git a/examples/nffl-cli/package-lock.json b/examples/nffl-cli/package-lock.json index 4458dcbb..39edbc2f 100644 --- a/examples/nffl-cli/package-lock.json +++ b/examples/nffl-cli/package-lock.json @@ -1,34 +1,46 @@ { - "name": "demo-nffl-cli", - "version": "1.0.0", + "name": "nffl-cli", + "version": "0.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "demo-nffl-cli", - "version": "1.0.0", - "license": "ISC", + "name": "nffl-cli", + "version": "0.0.1", + "license": "MIT", "dependencies": { - "bignumber.js": "^9.1.2", "commander": "^12.1.0", "ethers": "^6.13.1", "rlp": "^3.0.0" }, "bin": { - "my-cli-tool": "index.js" + "nffl-cli": "index.js" + }, + "devDependencies": { + "@commander-js/extra-typings": "^12.1.0", + "@typechain/ethers-v6": "^0.5.1", + "@types/node": "^22.2.0", + "typechain": "^8.3.2" } }, "node_modules/@adraffy/ens-normalize": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "license": "MIT" + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" + }, + "node_modules/@commander-js/extra-typings": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@commander-js/extra-typings/-/extra-typings-12.1.0.tgz", + "integrity": "sha512-wf/lwQvWAA0goIghcb91dQYpkLBcyhOhQNqG/VgWhnKzgt+UOMvra7EX/2fv70arm5RW+PUHoQHHDa6/p77Eqg==", + "dev": true, + "peerDependencies": { + "commander": "~12.1.0" + } }, "node_modules/@noble/curves": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "license": "MIT", "dependencies": { "@noble/hashes": "1.3.2" }, @@ -40,7 +52,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "license": "MIT", "engines": { "node": ">= 16" }, @@ -48,40 +59,278 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@typechain/ethers-v6": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", + "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.2", + "typescript": ">=4.7.0" + } + }, "node_modules/@types/node": { - "version": "18.15.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", - "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", - "license": "MIT" + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz", + "integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==", + "dev": true, + "dependencies": { + "undici-types": "~6.13.0" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true }, "node_modules/aes-js": { "version": "4.0.0-beta.5", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "license": "MIT" + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" }, - "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", - "license": "MIT", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": "*" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" } }, "node_modules/commander": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "license": "MIT", "engines": { "node": ">=18" } }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/ethers": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.1.tgz", - "integrity": "sha512-hdJ2HOxg/xx97Lm9HdCWk949BfYqYWpyw4//78SiwOLgASyfrNszfMUNB2joKjvGUdwhHfaiMMFFwacVVoLR9A==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.2.tgz", + "integrity": "sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg==", "funding": [ { "type": "individual", @@ -92,7 +341,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@adraffy/ens-normalize": "1.10.1", "@noble/curves": "1.2.0", @@ -106,26 +354,377 @@ "node": ">=14.0.0" } }, + "node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/rlp": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/rlp/-/rlp-3.0.0.tgz", "integrity": "sha512-PD6U2PGk6Vq2spfgiWZdomLvRGDreBLxi5jv5M8EpRo3pU6VEm31KO+HFxE18Q3vgqfDrQ9pZA3FP95rkijNKw==", - "license": "MPL-2.0", "bin": { "rlp": "bin/rlp" } }, + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-command-line-args": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", + "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true, + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, "node_modules/tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "license": "0BSD" + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/typechain": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", + "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", + "dev": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/undici-types": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==", + "dev": true + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/ws": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "license": "MIT", "engines": { "node": ">=10.0.0" }, diff --git a/examples/nffl-cli/package.json b/examples/nffl-cli/package.json index 4a1ffc6d..6dabdff9 100644 --- a/examples/nffl-cli/package.json +++ b/examples/nffl-cli/package.json @@ -2,21 +2,26 @@ "private": true, "name": "nffl-cli", "version": "0.0.1", - "main": "index.js", + "main": "index.ts", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "typechain": "typechain --target ethers-v6 --out-dir typechain-types 'abi/*.json'" }, "keywords": [], "author": "Near.org", "license": "MIT", "description": "", "dependencies": { - "bignumber.js": "^9.1.2", "commander": "^12.1.0", "ethers": "^6.13.1", "rlp": "^3.0.0" }, "bin": { "nffl-cli": "./index.js" + }, + "devDependencies": { + "@commander-js/extra-typings": "^12.1.0", + "@typechain/ethers-v6": "^0.5.1", + "@types/node": "^22.2.0", + "typechain": "^8.3.2" } } diff --git a/examples/nffl-cli/src/commands/getStorageProof.ts b/examples/nffl-cli/src/commands/getStorageProof.ts new file mode 100644 index 00000000..45c7a0c4 --- /dev/null +++ b/examples/nffl-cli/src/commands/getStorageProof.ts @@ -0,0 +1,16 @@ +import { ethers } from "ethers"; +import { verifyStorage } from "../utils/storage"; + +export interface GetStorageProofOptions { + rpcUrl: string; + contractAddress: string; + storageKey: string; +} + +export async function getStorageProof(options: GetStorageProofOptions) { + const provider = new ethers.JsonRpcProvider(options.rpcUrl); + + const verifiedStorage = await verifyStorage(provider, options.contractAddress, options.storageKey); + + console.log(verifiedStorage); +} \ No newline at end of file diff --git a/examples/nffl-cli/src/commands/updateOperatorSet.ts b/examples/nffl-cli/src/commands/updateOperatorSet.ts new file mode 100644 index 00000000..cf35f772 --- /dev/null +++ b/examples/nffl-cli/src/commands/updateOperatorSet.ts @@ -0,0 +1,25 @@ +import { ethers } from "ethers"; +import { SFFLRegistryRollup__factory } from "../../typechain-types/factories/SFFLRegistryRollup__factory"; +import { fetchOperatorSetUpdate } from "../utils/api"; + +export interface UpdateOperatorSetOptions { + rpcUrl: string; + contractAddress: string; + id: string; + aggregatorUrl: string; + privateKey: string; +} + +export async function updateOperatorSet(options: UpdateOperatorSetOptions) { + const provider = new ethers.JsonRpcProvider(options.rpcUrl); + + const wallet = new ethers.Wallet(options.privateKey); + const account = wallet.connect(provider); + + const registryRollup = SFFLRegistryRollup__factory.connect(options.contractAddress, account); + + const operatorSetUpdate = await fetchOperatorSetUpdate(options.aggregatorUrl, BigInt(options.id)); + + const tx = await registryRollup.updateOperatorSet(operatorSetUpdate.message, operatorSetUpdate.aggregation); + await tx.wait(); +} \ No newline at end of file diff --git a/examples/nffl-cli/src/commands/updateStateRoot.ts b/examples/nffl-cli/src/commands/updateStateRoot.ts new file mode 100644 index 00000000..97038ebb --- /dev/null +++ b/examples/nffl-cli/src/commands/updateStateRoot.ts @@ -0,0 +1,26 @@ +import { ethers } from "ethers"; +import { SFFLRegistryRollup__factory } from "../../typechain-types/factories/SFFLRegistryRollup__factory"; +import { fetchStateRootUpdate } from "../utils/api"; + +export interface UpdateStateRootOptions { + rpcUrl: string; + contractAddress: string; + rollupId: string; + blockHeight: string; + aggregatorUrl: string; + privateKey: string; +} + +export async function updateStateRoot(options: UpdateStateRootOptions) { + const provider = new ethers.JsonRpcProvider(options.rpcUrl); + + const wallet = new ethers.Wallet(options.privateKey); + const account = wallet.connect(provider); + + const registryRollup = SFFLRegistryRollup__factory.connect(options.contractAddress, account); + + const stateRootUpdate = await fetchStateRootUpdate(options.aggregatorUrl, BigInt(options.rollupId), BigInt(options.blockHeight)); + + const tx = await registryRollup.updateStateRoot(stateRootUpdate.message, stateRootUpdate.aggregation); + await tx.wait(); +} \ No newline at end of file diff --git a/examples/nffl-cli/src/createWallet.js b/examples/nffl-cli/src/createWallet.js deleted file mode 100644 index bcca4cdc..00000000 --- a/examples/nffl-cli/src/createWallet.js +++ /dev/null @@ -1,24 +0,0 @@ -const { ethers } = require('ethers'); - -// Function to get private key from evironment variable -function getPrivateKey(envKey) { - if (envKey && process.env[envKey]) { - return process.env[envKey]; - } - console.error('Error: Private key is not provided.')``; - process.exit(1); -} - -// Function to create a wallet from a evironment variable containing the private key -function createWallet(envKey) { - const privateKey = getPrivateKey(envKey); - try { - const wallet = new ethers.Wallet(privateKey); - return wallet; - } catch (error) { - console.error('Invalid private key.'); - process.exit(1); - } -} - -module.exports = {createWallet} diff --git a/examples/nffl-cli/src/hashG1Point.js b/examples/nffl-cli/src/hashG1Point.js deleted file mode 100644 index fc0c2da6..00000000 --- a/examples/nffl-cli/src/hashG1Point.js +++ /dev/null @@ -1,20 +0,0 @@ -const { keccak256 } = require('ethers'); -const BigNumber = require('bignumber.js'); -/* - * Hashes a G1 point -*/ -function hashG1Point(pk) { - const xValue = BigNumber(pk.X); - const yValue = BigNumber(pk.Y); - const buf = Buffer.alloc(64); - - // Store in buf - buf.write(xValue.toString(16).padStart(64, '0'), 0, 'hex'); - buf.write(yValue.toString(16).padStart(64, '0'), 32, 'hex'); - // Calculate keccak256 hash of buf - const hashedG1 = keccak256(buf); - - return BigNumber(hashedG1); -} - -module.exports = {hashG1Point} diff --git a/examples/nffl-cli/src/index.ts b/examples/nffl-cli/src/index.ts new file mode 100644 index 00000000..42389c36 --- /dev/null +++ b/examples/nffl-cli/src/index.ts @@ -0,0 +1,42 @@ +#!/usr/bin/env ts-node + +import { program, Option } from "@commander-js/extra-typings"; + +import { getStorageProof } from "./commands/getStorageProof"; +import { updateStateRoot } from "./commands/updateStateRoot"; +import { updateOperatorSet } from "./commands/updateOperatorSet"; + +program + .version("0.0.1") + .description("NFFL demo CLI tool"); + +program + .command("storage-proof") + .description("Get the storage proof of a target contract from the source chain") + .requiredOption("--rpc-url ", "RPC URL") + .requiredOption("--contract-address
", "Address of the target contract") + .requiredOption("--storage-key ", "Storage key") + .action(getStorageProof); + +program + .command("update-state-root") + .description("Update the state root for a given rollup in the NFFLRegistryRollup contract") + .requiredOption("--rpc-url ", "RPC URL") + .requiredOption("--contract-address
", "Address of the target contract") + .requiredOption("--rollup-id ", "Rollup Id") + .requiredOption("--block-height ", "Block height") + .requiredOption("--aggregator-url ", "Aggregator REST API URL") + .addOption(new Option("--private-key ", "Private key").env("PRIVATE_KEY").makeOptionMandatory()) + .action(updateStateRoot); + +program + .command("update-operator-set") + .description("Update the operator set for the NFFLRegistryRollup contract") + .requiredOption("--rpc-url ", "RPC URL") + .requiredOption("--contract-address
", "Address of the target contract") + .requiredOption("--id ", "Update Id") + .requiredOption("--aggregator-url ", "Aggregator REST API URL") + .addOption(new Option("--private-key ", "Private key").env("PRIVATE_KEY").makeOptionMandatory()) + .action(updateOperatorSet); + +program.parse(); diff --git a/examples/nffl-cli/src/utils/api.ts b/examples/nffl-cli/src/utils/api.ts new file mode 100644 index 00000000..be1a2318 --- /dev/null +++ b/examples/nffl-cli/src/utils/api.ts @@ -0,0 +1,126 @@ +import { ethers } from "ethers"; +import { OperatorSetUpdate, RollupOperators, StateRootUpdate } from "../../typechain-types/SFFLRegistryRollup"; + +export interface G1Point { + X: string; + Y: string; +} + +export interface G2Point { + X: { A0: string; A1: string }; + Y: { A0: string; A1: string }; +} + +export interface OperatorInfo { + Pubkey: G1Point; + Weight: string; +} + +export interface MessageAggregation { + NonSignersPubkeysG1: G1Point[]; + SignersApkG2: G2Point; + SignersAggSigG1: { + g1_point: G1Point; + }; +} + +export interface GetOperatorSetUpdateResponse { + Message: { + Id: string; + Timestamp: string; + Operators: OperatorInfo[]; + }; + Aggregation: MessageAggregation; +} + +export interface GetStateRootUpdateResponse { + Message: { + RollupId: string; + BlockHeight: string; + Timestamp: string; + NearDaTransactionId: Array; + NearDaCommitment: Array; + StateRoot: Array; + }; + Aggregation: MessageAggregation; +} + +function hashG1Point(pk: G1Point): bigint { + return BigInt(ethers.keccak256(ethers.concat([ + ethers.zeroPadValue(ethers.toBeHex(BigInt(pk.X)), 32), + ethers.zeroPadValue(ethers.toBeHex(BigInt(pk.Y)), 32) + ]))); +} + +function createSignatureInfo(aggregation: MessageAggregation): RollupOperators.SignatureInfoStruct { + return { + nonSignerPubkeys: [...aggregation.NonSignersPubkeysG1].sort( + (a, b) => (hashG1Point(a) < hashG1Point(b) ? -1 : hashG1Point(a) > hashG1Point(b) ? 1 : 0) + ), + apkG2: { + X: [aggregation.SignersApkG2.X.A1, aggregation.SignersApkG2.X.A0], + Y: [aggregation.SignersApkG2.Y.A1, aggregation.SignersApkG2.Y.A0] + }, + sigma: aggregation.SignersAggSigG1.g1_point, + }; +} + +function createOperatorSetUpdateMessage(data: GetOperatorSetUpdateResponse): OperatorSetUpdate.MessageStruct { + return { + id: data.Message.Id, + timestamp: data.Message.Timestamp, + operators: data.Message.Operators.map((operator) => ({ + pubkey: operator.Pubkey, + weight: operator.Weight + })), + }; +} + +async function fetchOperatorSetUpdateData(aggregatorUrl: string, id: bigint): Promise { + const response = await fetch(`${aggregatorUrl}/aggregation/operator-set-update?id=${id}`); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + const text = await response.text(); + + // Make sure the weight is represented as a string, since it's a uint128 + const replacedText = text.replace(/"Weight":\s*(\d+)/g, "\"Weight\": \"$1\""); + + return JSON.parse(replacedText); +} + +export async function fetchOperatorSetUpdate(aggregatorUrl: string, id: bigint): Promise<{message: OperatorSetUpdate.MessageStruct, aggregation: RollupOperators.SignatureInfoStruct}> { + const data = await fetchOperatorSetUpdateData(aggregatorUrl, id); + + return { + message: createOperatorSetUpdateMessage(data), + aggregation: createSignatureInfo(data.Aggregation), + }; +} + +function createStateRootUpdateMessage(data: GetStateRootUpdateResponse): StateRootUpdate.MessageStruct { + return { + rollupId: data.Message.RollupId, + blockHeight: data.Message.BlockHeight, + timestamp: data.Message.Timestamp, + nearDaTransactionId: Uint8Array.from(data.Message.NearDaTransactionId), + nearDaCommitment: Uint8Array.from(data.Message.NearDaCommitment), + stateRoot: Uint8Array.from(data.Message.StateRoot) + }; +} + +async function fetchStateRootUpdateData(aggregatorUrl: string, rollupId: bigint, blockHeight: bigint): Promise { + const response = await fetch(`${aggregatorUrl}/aggregation/state-root-update?rollupId=${rollupId}&blockHeight=${blockHeight}`); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + return await response.json() as GetStateRootUpdateResponse; +} + +export async function fetchStateRootUpdate(aggregatorUrl: string, rollupId: bigint, blockHeight: bigint): Promise<{message: StateRootUpdate.MessageStruct, aggregation: RollupOperators.SignatureInfoStruct}> { + const data = await fetchStateRootUpdateData(aggregatorUrl, rollupId, blockHeight); + return { + message: createStateRootUpdateMessage(data), + aggregation: createSignatureInfo(data.Aggregation), + }; +} diff --git a/examples/nffl-cli/src/utils/storage.ts b/examples/nffl-cli/src/utils/storage.ts new file mode 100644 index 00000000..db0bfda4 --- /dev/null +++ b/examples/nffl-cli/src/utils/storage.ts @@ -0,0 +1,44 @@ +import { ethers } from "ethers"; +import rlp from "rlp"; + +export interface GetProofResponse { + address: string; + accountProof: string[]; + balance: string; + codeHash: string; + nonce: string; + storageHash: string; + storageProof: { + key: string; + value: string; + proof: string[]; + }[]; +} + +export async function getProof(provider: ethers.JsonRpcProvider, contractAddress: string, storageKey: string): Promise { + return await provider.send("eth_getProof", [ + contractAddress, + [storageKey], + "latest", + ]); +} + +export interface VerifiedStorage { + target: string; + storageKey: string; + storageValue: string; + stateTrieWitness: string; + storageTrieWitness: string; +} + +export async function verifyStorage(provider: ethers.JsonRpcProvider, contractAddress: string, storageKey: string): Promise { + const proof = await getProof(provider, contractAddress, storageKey); + + return { + target: contractAddress, + storageKey, + storageValue: proof.storageProof[0].value, + stateTrieWitness: ethers.hexlify(rlp.encode(proof.accountProof)), + storageTrieWitness: ethers.hexlify(rlp.encode(proof.storageProof[0].proof)), + }; +} diff --git a/examples/nffl-cli/typechain-types/SFFLRegistryRollup.ts b/examples/nffl-cli/typechain-types/SFFLRegistryRollup.ts new file mode 100644 index 00000000..208700bf --- /dev/null +++ b/examples/nffl-cli/typechain-types/SFFLRegistryRollup.ts @@ -0,0 +1,912 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "./common"; + +export declare namespace BN254 { + export type G1PointStruct = { X: BigNumberish; Y: BigNumberish }; + + export type G1PointStructOutput = [X: bigint, Y: bigint] & { + X: bigint; + Y: bigint; + }; + + export type G2PointStruct = { + X: [BigNumberish, BigNumberish]; + Y: [BigNumberish, BigNumberish]; + }; + + export type G2PointStructOutput = [ + X: [bigint, bigint], + Y: [bigint, bigint] + ] & { X: [bigint, bigint]; Y: [bigint, bigint] }; +} + +export declare namespace RollupOperators { + export type OperatorStruct = { + pubkey: BN254.G1PointStruct; + weight: BigNumberish; + }; + + export type OperatorStructOutput = [ + pubkey: BN254.G1PointStructOutput, + weight: bigint + ] & { pubkey: BN254.G1PointStructOutput; weight: bigint }; + + export type SignatureInfoStruct = { + nonSignerPubkeys: BN254.G1PointStruct[]; + apkG2: BN254.G2PointStruct; + sigma: BN254.G1PointStruct; + }; + + export type SignatureInfoStructOutput = [ + nonSignerPubkeys: BN254.G1PointStructOutput[], + apkG2: BN254.G2PointStructOutput, + sigma: BN254.G1PointStructOutput + ] & { + nonSignerPubkeys: BN254.G1PointStructOutput[]; + apkG2: BN254.G2PointStructOutput; + sigma: BN254.G1PointStructOutput; + }; +} + +export declare namespace OperatorSetUpdate { + export type MessageStruct = { + id: BigNumberish; + timestamp: BigNumberish; + operators: RollupOperators.OperatorStruct[]; + }; + + export type MessageStructOutput = [ + id: bigint, + timestamp: bigint, + operators: RollupOperators.OperatorStructOutput[] + ] & { + id: bigint; + timestamp: bigint; + operators: RollupOperators.OperatorStructOutput[]; + }; +} + +export declare namespace StateRootUpdate { + export type MessageStruct = { + rollupId: BigNumberish; + blockHeight: BigNumberish; + timestamp: BigNumberish; + nearDaTransactionId: BytesLike; + nearDaCommitment: BytesLike; + stateRoot: BytesLike; + }; + + export type MessageStructOutput = [ + rollupId: bigint, + blockHeight: bigint, + timestamp: bigint, + nearDaTransactionId: string, + nearDaCommitment: string, + stateRoot: string + ] & { + rollupId: bigint; + blockHeight: bigint; + timestamp: bigint; + nearDaTransactionId: string; + nearDaCommitment: string; + stateRoot: string; + }; +} + +export declare namespace SFFLRegistryBase { + export type ProofParamsStruct = { + target: AddressLike; + storageKey: BytesLike; + stateTrieWitness: BytesLike; + storageTrieWitness: BytesLike; + }; + + export type ProofParamsStructOutput = [ + target: string, + storageKey: string, + stateTrieWitness: string, + storageTrieWitness: string + ] & { + target: string; + storageKey: string; + stateTrieWitness: string; + storageTrieWitness: string; + }; +} + +export interface SFFLRegistryRollupInterface extends Interface { + getFunction( + nameOrSignature: + | "PAUSED_UPDATE_OPERATOR_SET" + | "PAUSED_UPDATE_STATE_ROOT" + | "THRESHOLD_DENOMINATOR" + | "aggregator" + | "forceOperatorSetUpdate" + | "getApk" + | "getOperatorWeight" + | "getQuorumThreshold" + | "getStateRoot" + | "getStorageValue" + | "getTotalWeight" + | "initialize" + | "nextOperatorUpdateId" + | "owner" + | "pause" + | "pauseAll" + | "paused(uint8)" + | "paused()" + | "pauserRegistry" + | "renounceOwnership" + | "setInitialOperatorSet" + | "setPauserRegistry" + | "setQuorumThreshold" + | "transferOwnership" + | "unpause" + | "updateAndGetStorageValue" + | "updateOperatorSet" + | "updateStateRoot" + ): FunctionFragment; + + getEvent( + nameOrSignatureOrTopic: + | "Initialized" + | "OwnershipTransferred" + | "Paused" + | "PauserRegistrySet" + | "StateRootUpdated" + | "Unpaused" + ): EventFragment; + + encodeFunctionData( + functionFragment: "PAUSED_UPDATE_OPERATOR_SET", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "PAUSED_UPDATE_STATE_ROOT", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "THRESHOLD_DENOMINATOR", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "aggregator", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "forceOperatorSetUpdate", + values: [OperatorSetUpdate.MessageStruct] + ): string; + encodeFunctionData(functionFragment: "getApk", values?: undefined): string; + encodeFunctionData( + functionFragment: "getOperatorWeight", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "getQuorumThreshold", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getStateRoot", + values: [BigNumberish, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "getStorageValue", + values: [StateRootUpdate.MessageStruct, SFFLRegistryBase.ProofParamsStruct] + ): string; + encodeFunctionData( + functionFragment: "getTotalWeight", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "initialize", + values: [BigNumberish, AddressLike, AddressLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "nextOperatorUpdateId", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: "pause", values: [BigNumberish]): string; + encodeFunctionData(functionFragment: "pauseAll", values?: undefined): string; + encodeFunctionData( + functionFragment: "paused(uint8)", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "paused()", values?: undefined): string; + encodeFunctionData( + functionFragment: "pauserRegistry", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "setInitialOperatorSet", + values: [RollupOperators.OperatorStruct[], BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "setPauserRegistry", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "setQuorumThreshold", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [AddressLike] + ): string; + encodeFunctionData( + functionFragment: "unpause", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "updateAndGetStorageValue", + values: [ + StateRootUpdate.MessageStruct, + SFFLRegistryBase.ProofParamsStruct, + BytesLike + ] + ): string; + encodeFunctionData( + functionFragment: "updateOperatorSet", + values: [ + OperatorSetUpdate.MessageStruct, + RollupOperators.SignatureInfoStruct + ] + ): string; + encodeFunctionData( + functionFragment: "updateStateRoot", + values: [StateRootUpdate.MessageStruct, RollupOperators.SignatureInfoStruct] + ): string; + + decodeFunctionResult( + functionFragment: "PAUSED_UPDATE_OPERATOR_SET", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "PAUSED_UPDATE_STATE_ROOT", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "THRESHOLD_DENOMINATOR", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "aggregator", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "forceOperatorSetUpdate", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getApk", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getOperatorWeight", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getQuorumThreshold", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getStateRoot", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getStorageValue", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getTotalWeight", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "nextOperatorUpdateId", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pauseAll", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "paused(uint8)", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "paused()", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "pauserRegistry", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "setInitialOperatorSet", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "setPauserRegistry", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "setQuorumThreshold", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "updateAndGetStorageValue", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateOperatorSet", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateStateRoot", + data: BytesLike + ): Result; +} + +export namespace InitializedEvent { + export type InputTuple = [version: BigNumberish]; + export type OutputTuple = [version: bigint]; + export interface OutputObject { + version: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace OwnershipTransferredEvent { + export type InputTuple = [previousOwner: AddressLike, newOwner: AddressLike]; + export type OutputTuple = [previousOwner: string, newOwner: string]; + export interface OutputObject { + previousOwner: string; + newOwner: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace PausedEvent { + export type InputTuple = [ + account: AddressLike, + newPausedStatus: BigNumberish + ]; + export type OutputTuple = [account: string, newPausedStatus: bigint]; + export interface OutputObject { + account: string; + newPausedStatus: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace PauserRegistrySetEvent { + export type InputTuple = [ + pauserRegistry: AddressLike, + newPauserRegistry: AddressLike + ]; + export type OutputTuple = [pauserRegistry: string, newPauserRegistry: string]; + export interface OutputObject { + pauserRegistry: string; + newPauserRegistry: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace StateRootUpdatedEvent { + export type InputTuple = [ + rollupId: BigNumberish, + blockHeight: BigNumberish, + stateRoot: BytesLike + ]; + export type OutputTuple = [ + rollupId: bigint, + blockHeight: bigint, + stateRoot: string + ]; + export interface OutputObject { + rollupId: bigint; + blockHeight: bigint; + stateRoot: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace UnpausedEvent { + export type InputTuple = [ + account: AddressLike, + newPausedStatus: BigNumberish + ]; + export type OutputTuple = [account: string, newPausedStatus: bigint]; + export interface OutputObject { + account: string; + newPausedStatus: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface SFFLRegistryRollup extends BaseContract { + connect(runner?: ContractRunner | null): SFFLRegistryRollup; + waitForDeployment(): Promise; + + interface: SFFLRegistryRollupInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + PAUSED_UPDATE_OPERATOR_SET: TypedContractMethod<[], [bigint], "view">; + + PAUSED_UPDATE_STATE_ROOT: TypedContractMethod<[], [bigint], "view">; + + THRESHOLD_DENOMINATOR: TypedContractMethod<[], [bigint], "view">; + + aggregator: TypedContractMethod<[], [string], "view">; + + forceOperatorSetUpdate: TypedContractMethod< + [message: OperatorSetUpdate.MessageStruct], + [void], + "nonpayable" + >; + + getApk: TypedContractMethod<[], [BN254.G1PointStructOutput], "view">; + + getOperatorWeight: TypedContractMethod< + [pubkeyHash: BytesLike], + [bigint], + "view" + >; + + getQuorumThreshold: TypedContractMethod<[], [bigint], "view">; + + getStateRoot: TypedContractMethod< + [rollupId: BigNumberish, blockHeight: BigNumberish], + [string], + "view" + >; + + getStorageValue: TypedContractMethod< + [ + message: StateRootUpdate.MessageStruct, + proofParams: SFFLRegistryBase.ProofParamsStruct + ], + [string], + "view" + >; + + getTotalWeight: TypedContractMethod<[], [bigint], "view">; + + initialize: TypedContractMethod< + [ + quorumThreshold: BigNumberish, + initialOwner: AddressLike, + _aggregator: AddressLike, + _pauserRegistry: AddressLike + ], + [void], + "nonpayable" + >; + + nextOperatorUpdateId: TypedContractMethod<[], [bigint], "view">; + + owner: TypedContractMethod<[], [string], "view">; + + pause: TypedContractMethod< + [newPausedStatus: BigNumberish], + [void], + "nonpayable" + >; + + pauseAll: TypedContractMethod<[], [void], "nonpayable">; + + "paused(uint8)": TypedContractMethod< + [index: BigNumberish], + [boolean], + "view" + >; + + "paused()": TypedContractMethod<[], [bigint], "view">; + + pauserRegistry: TypedContractMethod<[], [string], "view">; + + renounceOwnership: TypedContractMethod<[], [void], "nonpayable">; + + setInitialOperatorSet: TypedContractMethod< + [ + operators: RollupOperators.OperatorStruct[], + _nextOperatorUpdateId: BigNumberish + ], + [void], + "nonpayable" + >; + + setPauserRegistry: TypedContractMethod< + [newPauserRegistry: AddressLike], + [void], + "nonpayable" + >; + + setQuorumThreshold: TypedContractMethod< + [newQuorumThreshold: BigNumberish], + [void], + "nonpayable" + >; + + transferOwnership: TypedContractMethod< + [newOwner: AddressLike], + [void], + "nonpayable" + >; + + unpause: TypedContractMethod< + [newPausedStatus: BigNumberish], + [void], + "nonpayable" + >; + + updateAndGetStorageValue: TypedContractMethod< + [ + message: StateRootUpdate.MessageStruct, + proofParams: SFFLRegistryBase.ProofParamsStruct, + agreement: BytesLike + ], + [string], + "nonpayable" + >; + + updateOperatorSet: TypedContractMethod< + [ + message: OperatorSetUpdate.MessageStruct, + signatureInfo: RollupOperators.SignatureInfoStruct + ], + [void], + "nonpayable" + >; + + updateStateRoot: TypedContractMethod< + [ + message: StateRootUpdate.MessageStruct, + signatureInfo: RollupOperators.SignatureInfoStruct + ], + [void], + "nonpayable" + >; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "PAUSED_UPDATE_OPERATOR_SET" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "PAUSED_UPDATE_STATE_ROOT" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "THRESHOLD_DENOMINATOR" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "aggregator" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "forceOperatorSetUpdate" + ): TypedContractMethod< + [message: OperatorSetUpdate.MessageStruct], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "getApk" + ): TypedContractMethod<[], [BN254.G1PointStructOutput], "view">; + getFunction( + nameOrSignature: "getOperatorWeight" + ): TypedContractMethod<[pubkeyHash: BytesLike], [bigint], "view">; + getFunction( + nameOrSignature: "getQuorumThreshold" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "getStateRoot" + ): TypedContractMethod< + [rollupId: BigNumberish, blockHeight: BigNumberish], + [string], + "view" + >; + getFunction( + nameOrSignature: "getStorageValue" + ): TypedContractMethod< + [ + message: StateRootUpdate.MessageStruct, + proofParams: SFFLRegistryBase.ProofParamsStruct + ], + [string], + "view" + >; + getFunction( + nameOrSignature: "getTotalWeight" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "initialize" + ): TypedContractMethod< + [ + quorumThreshold: BigNumberish, + initialOwner: AddressLike, + _aggregator: AddressLike, + _pauserRegistry: AddressLike + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "nextOperatorUpdateId" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "owner" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "pause" + ): TypedContractMethod<[newPausedStatus: BigNumberish], [void], "nonpayable">; + getFunction( + nameOrSignature: "pauseAll" + ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "paused(uint8)" + ): TypedContractMethod<[index: BigNumberish], [boolean], "view">; + getFunction( + nameOrSignature: "paused()" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "pauserRegistry" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "renounceOwnership" + ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "setInitialOperatorSet" + ): TypedContractMethod< + [ + operators: RollupOperators.OperatorStruct[], + _nextOperatorUpdateId: BigNumberish + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "setPauserRegistry" + ): TypedContractMethod< + [newPauserRegistry: AddressLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "setQuorumThreshold" + ): TypedContractMethod< + [newQuorumThreshold: BigNumberish], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "transferOwnership" + ): TypedContractMethod<[newOwner: AddressLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "unpause" + ): TypedContractMethod<[newPausedStatus: BigNumberish], [void], "nonpayable">; + getFunction( + nameOrSignature: "updateAndGetStorageValue" + ): TypedContractMethod< + [ + message: StateRootUpdate.MessageStruct, + proofParams: SFFLRegistryBase.ProofParamsStruct, + agreement: BytesLike + ], + [string], + "nonpayable" + >; + getFunction( + nameOrSignature: "updateOperatorSet" + ): TypedContractMethod< + [ + message: OperatorSetUpdate.MessageStruct, + signatureInfo: RollupOperators.SignatureInfoStruct + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "updateStateRoot" + ): TypedContractMethod< + [ + message: StateRootUpdate.MessageStruct, + signatureInfo: RollupOperators.SignatureInfoStruct + ], + [void], + "nonpayable" + >; + + getEvent( + key: "Initialized" + ): TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + getEvent( + key: "OwnershipTransferred" + ): TypedContractEvent< + OwnershipTransferredEvent.InputTuple, + OwnershipTransferredEvent.OutputTuple, + OwnershipTransferredEvent.OutputObject + >; + getEvent( + key: "Paused" + ): TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + getEvent( + key: "PauserRegistrySet" + ): TypedContractEvent< + PauserRegistrySetEvent.InputTuple, + PauserRegistrySetEvent.OutputTuple, + PauserRegistrySetEvent.OutputObject + >; + getEvent( + key: "StateRootUpdated" + ): TypedContractEvent< + StateRootUpdatedEvent.InputTuple, + StateRootUpdatedEvent.OutputTuple, + StateRootUpdatedEvent.OutputObject + >; + getEvent( + key: "Unpaused" + ): TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + + filters: { + "Initialized(uint8)": TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + Initialized: TypedContractEvent< + InitializedEvent.InputTuple, + InitializedEvent.OutputTuple, + InitializedEvent.OutputObject + >; + + "OwnershipTransferred(address,address)": TypedContractEvent< + OwnershipTransferredEvent.InputTuple, + OwnershipTransferredEvent.OutputTuple, + OwnershipTransferredEvent.OutputObject + >; + OwnershipTransferred: TypedContractEvent< + OwnershipTransferredEvent.InputTuple, + OwnershipTransferredEvent.OutputTuple, + OwnershipTransferredEvent.OutputObject + >; + + "Paused(address,uint256)": TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + Paused: TypedContractEvent< + PausedEvent.InputTuple, + PausedEvent.OutputTuple, + PausedEvent.OutputObject + >; + + "PauserRegistrySet(address,address)": TypedContractEvent< + PauserRegistrySetEvent.InputTuple, + PauserRegistrySetEvent.OutputTuple, + PauserRegistrySetEvent.OutputObject + >; + PauserRegistrySet: TypedContractEvent< + PauserRegistrySetEvent.InputTuple, + PauserRegistrySetEvent.OutputTuple, + PauserRegistrySetEvent.OutputObject + >; + + "StateRootUpdated(uint32,uint64,bytes32)": TypedContractEvent< + StateRootUpdatedEvent.InputTuple, + StateRootUpdatedEvent.OutputTuple, + StateRootUpdatedEvent.OutputObject + >; + StateRootUpdated: TypedContractEvent< + StateRootUpdatedEvent.InputTuple, + StateRootUpdatedEvent.OutputTuple, + StateRootUpdatedEvent.OutputObject + >; + + "Unpaused(address,uint256)": TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + Unpaused: TypedContractEvent< + UnpausedEvent.InputTuple, + UnpausedEvent.OutputTuple, + UnpausedEvent.OutputObject + >; + }; +} diff --git a/examples/nffl-cli/typechain-types/common.ts b/examples/nffl-cli/typechain-types/common.ts new file mode 100644 index 00000000..56b5f21e --- /dev/null +++ b/examples/nffl-cli/typechain-types/common.ts @@ -0,0 +1,131 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + FunctionFragment, + Typed, + EventFragment, + ContractTransaction, + ContractTransactionResponse, + DeferredTopicFilter, + EventLog, + TransactionRequest, + LogDescription, +} from "ethers"; + +export interface TypedDeferredTopicFilter<_TCEvent extends TypedContractEvent> + extends DeferredTopicFilter {} + +export interface TypedContractEvent< + InputTuple extends Array = any, + OutputTuple extends Array = any, + OutputObject = any +> { + (...args: Partial): TypedDeferredTopicFilter< + TypedContractEvent + >; + name: string; + fragment: EventFragment; + getFragment(...args: Partial): EventFragment; +} + +type __TypechainAOutputTuple = T extends TypedContractEvent< + infer _U, + infer W +> + ? W + : never; +type __TypechainOutputObject = T extends TypedContractEvent< + infer _U, + infer _W, + infer V +> + ? V + : never; + +export interface TypedEventLog + extends Omit { + args: __TypechainAOutputTuple & __TypechainOutputObject; +} + +export interface TypedLogDescription + extends Omit { + args: __TypechainAOutputTuple & __TypechainOutputObject; +} + +export type TypedListener = ( + ...listenerArg: [ + ...__TypechainAOutputTuple, + TypedEventLog, + ...undefined[] + ] +) => void; + +export type MinEthersFactory = { + deploy(...a: ARGS[]): Promise; +}; + +export type GetContractTypeFromFactory = F extends MinEthersFactory< + infer C, + any +> + ? C + : never; +export type GetARGsTypeFromFactory = F extends MinEthersFactory + ? Parameters + : never; + +export type StateMutability = "nonpayable" | "payable" | "view"; + +export type BaseOverrides = Omit; +export type NonPayableOverrides = Omit< + BaseOverrides, + "value" | "blockTag" | "enableCcipRead" +>; +export type PayableOverrides = Omit< + BaseOverrides, + "blockTag" | "enableCcipRead" +>; +export type ViewOverrides = Omit; +export type Overrides = S extends "nonpayable" + ? NonPayableOverrides + : S extends "payable" + ? PayableOverrides + : ViewOverrides; + +export type PostfixOverrides, S extends StateMutability> = + | A + | [...A, Overrides]; +export type ContractMethodArgs< + A extends Array, + S extends StateMutability +> = PostfixOverrides<{ [I in keyof A]-?: A[I] | Typed }, S>; + +export type DefaultReturnType = R extends Array ? R[0] : R; + +// export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = R | ContractTransactionResponse> { +export interface TypedContractMethod< + A extends Array = Array, + R = any, + S extends StateMutability = "payable" +> { + (...args: ContractMethodArgs): S extends "view" + ? Promise> + : Promise; + + name: string; + + fragment: FunctionFragment; + + getFragment(...args: ContractMethodArgs): FunctionFragment; + + populateTransaction( + ...args: ContractMethodArgs + ): Promise; + staticCall( + ...args: ContractMethodArgs + ): Promise>; + send(...args: ContractMethodArgs): Promise; + estimateGas(...args: ContractMethodArgs): Promise; + staticCallResult(...args: ContractMethodArgs): Promise; +} diff --git a/examples/nffl-cli/typechain-types/factories/SFFLRegistryRollup__factory.ts b/examples/nffl-cli/typechain-types/factories/SFFLRegistryRollup__factory.ts new file mode 100644 index 00000000..fcac4f21 --- /dev/null +++ b/examples/nffl-cli/typechain-types/factories/SFFLRegistryRollup__factory.ts @@ -0,0 +1,982 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; +import type { NonPayableOverrides } from "../common"; +import type { + SFFLRegistryRollup, + SFFLRegistryRollupInterface, +} from "../SFFLRegistryRollup"; + +const _abi = [ + { + type: "constructor", + inputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "PAUSED_UPDATE_OPERATOR_SET", + inputs: [], + outputs: [ + { + name: "", + type: "uint8", + internalType: "uint8", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "PAUSED_UPDATE_STATE_ROOT", + inputs: [], + outputs: [ + { + name: "", + type: "uint8", + internalType: "uint8", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "THRESHOLD_DENOMINATOR", + inputs: [], + outputs: [ + { + name: "", + type: "uint128", + internalType: "uint128", + }, + ], + stateMutability: "pure", + }, + { + type: "function", + name: "aggregator", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "forceOperatorSetUpdate", + inputs: [ + { + name: "message", + type: "tuple", + internalType: "struct OperatorSetUpdate.Message", + components: [ + { + name: "id", + type: "uint64", + internalType: "uint64", + }, + { + name: "timestamp", + type: "uint64", + internalType: "uint64", + }, + { + name: "operators", + type: "tuple[]", + internalType: "struct RollupOperators.Operator[]", + components: [ + { + name: "pubkey", + type: "tuple", + internalType: "struct BN254.G1Point", + components: [ + { + name: "X", + type: "uint256", + internalType: "uint256", + }, + { + name: "Y", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + name: "weight", + type: "uint128", + internalType: "uint128", + }, + ], + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "getApk", + inputs: [], + outputs: [ + { + name: "", + type: "tuple", + internalType: "struct BN254.G1Point", + components: [ + { + name: "X", + type: "uint256", + internalType: "uint256", + }, + { + name: "Y", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getOperatorWeight", + inputs: [ + { + name: "pubkeyHash", + type: "bytes32", + internalType: "bytes32", + }, + ], + outputs: [ + { + name: "", + type: "uint128", + internalType: "uint128", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getQuorumThreshold", + inputs: [], + outputs: [ + { + name: "", + type: "uint128", + internalType: "uint128", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getStateRoot", + inputs: [ + { + name: "rollupId", + type: "uint32", + internalType: "uint32", + }, + { + name: "blockHeight", + type: "uint64", + internalType: "uint64", + }, + ], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getStorageValue", + inputs: [ + { + name: "message", + type: "tuple", + internalType: "struct StateRootUpdate.Message", + components: [ + { + name: "rollupId", + type: "uint32", + internalType: "uint32", + }, + { + name: "blockHeight", + type: "uint64", + internalType: "uint64", + }, + { + name: "timestamp", + type: "uint64", + internalType: "uint64", + }, + { + name: "nearDaTransactionId", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "nearDaCommitment", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "stateRoot", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, + { + name: "proofParams", + type: "tuple", + internalType: "struct SFFLRegistryBase.ProofParams", + components: [ + { + name: "target", + type: "address", + internalType: "address", + }, + { + name: "storageKey", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "stateTrieWitness", + type: "bytes", + internalType: "bytes", + }, + { + name: "storageTrieWitness", + type: "bytes", + internalType: "bytes", + }, + ], + }, + ], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getTotalWeight", + inputs: [], + outputs: [ + { + name: "", + type: "uint128", + internalType: "uint128", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "initialize", + inputs: [ + { + name: "quorumThreshold", + type: "uint128", + internalType: "uint128", + }, + { + name: "initialOwner", + type: "address", + internalType: "address", + }, + { + name: "_aggregator", + type: "address", + internalType: "address", + }, + { + name: "_pauserRegistry", + type: "address", + internalType: "contract IPauserRegistry", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "nextOperatorUpdateId", + inputs: [], + outputs: [ + { + name: "", + type: "uint64", + internalType: "uint64", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "owner", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "pause", + inputs: [ + { + name: "newPausedStatus", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "pauseAll", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "paused", + inputs: [ + { + name: "index", + type: "uint8", + internalType: "uint8", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "paused", + inputs: [], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "pauserRegistry", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "contract IPauserRegistry", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "renounceOwnership", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setInitialOperatorSet", + inputs: [ + { + name: "operators", + type: "tuple[]", + internalType: "struct RollupOperators.Operator[]", + components: [ + { + name: "pubkey", + type: "tuple", + internalType: "struct BN254.G1Point", + components: [ + { + name: "X", + type: "uint256", + internalType: "uint256", + }, + { + name: "Y", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + name: "weight", + type: "uint128", + internalType: "uint128", + }, + ], + }, + { + name: "_nextOperatorUpdateId", + type: "uint64", + internalType: "uint64", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setPauserRegistry", + inputs: [ + { + name: "newPauserRegistry", + type: "address", + internalType: "contract IPauserRegistry", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setQuorumThreshold", + inputs: [ + { + name: "newQuorumThreshold", + type: "uint128", + internalType: "uint128", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "transferOwnership", + inputs: [ + { + name: "newOwner", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "unpause", + inputs: [ + { + name: "newPausedStatus", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "updateAndGetStorageValue", + inputs: [ + { + name: "message", + type: "tuple", + internalType: "struct StateRootUpdate.Message", + components: [ + { + name: "rollupId", + type: "uint32", + internalType: "uint32", + }, + { + name: "blockHeight", + type: "uint64", + internalType: "uint64", + }, + { + name: "timestamp", + type: "uint64", + internalType: "uint64", + }, + { + name: "nearDaTransactionId", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "nearDaCommitment", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "stateRoot", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, + { + name: "proofParams", + type: "tuple", + internalType: "struct SFFLRegistryBase.ProofParams", + components: [ + { + name: "target", + type: "address", + internalType: "address", + }, + { + name: "storageKey", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "stateTrieWitness", + type: "bytes", + internalType: "bytes", + }, + { + name: "storageTrieWitness", + type: "bytes", + internalType: "bytes", + }, + ], + }, + { + name: "agreement", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "updateOperatorSet", + inputs: [ + { + name: "message", + type: "tuple", + internalType: "struct OperatorSetUpdate.Message", + components: [ + { + name: "id", + type: "uint64", + internalType: "uint64", + }, + { + name: "timestamp", + type: "uint64", + internalType: "uint64", + }, + { + name: "operators", + type: "tuple[]", + internalType: "struct RollupOperators.Operator[]", + components: [ + { + name: "pubkey", + type: "tuple", + internalType: "struct BN254.G1Point", + components: [ + { + name: "X", + type: "uint256", + internalType: "uint256", + }, + { + name: "Y", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + name: "weight", + type: "uint128", + internalType: "uint128", + }, + ], + }, + ], + }, + { + name: "signatureInfo", + type: "tuple", + internalType: "struct RollupOperators.SignatureInfo", + components: [ + { + name: "nonSignerPubkeys", + type: "tuple[]", + internalType: "struct BN254.G1Point[]", + components: [ + { + name: "X", + type: "uint256", + internalType: "uint256", + }, + { + name: "Y", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + name: "apkG2", + type: "tuple", + internalType: "struct BN254.G2Point", + components: [ + { + name: "X", + type: "uint256[2]", + internalType: "uint256[2]", + }, + { + name: "Y", + type: "uint256[2]", + internalType: "uint256[2]", + }, + ], + }, + { + name: "sigma", + type: "tuple", + internalType: "struct BN254.G1Point", + components: [ + { + name: "X", + type: "uint256", + internalType: "uint256", + }, + { + name: "Y", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "updateStateRoot", + inputs: [ + { + name: "message", + type: "tuple", + internalType: "struct StateRootUpdate.Message", + components: [ + { + name: "rollupId", + type: "uint32", + internalType: "uint32", + }, + { + name: "blockHeight", + type: "uint64", + internalType: "uint64", + }, + { + name: "timestamp", + type: "uint64", + internalType: "uint64", + }, + { + name: "nearDaTransactionId", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "nearDaCommitment", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "stateRoot", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, + { + name: "signatureInfo", + type: "tuple", + internalType: "struct RollupOperators.SignatureInfo", + components: [ + { + name: "nonSignerPubkeys", + type: "tuple[]", + internalType: "struct BN254.G1Point[]", + components: [ + { + name: "X", + type: "uint256", + internalType: "uint256", + }, + { + name: "Y", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + name: "apkG2", + type: "tuple", + internalType: "struct BN254.G2Point", + components: [ + { + name: "X", + type: "uint256[2]", + internalType: "uint256[2]", + }, + { + name: "Y", + type: "uint256[2]", + internalType: "uint256[2]", + }, + ], + }, + { + name: "sigma", + type: "tuple", + internalType: "struct BN254.G1Point", + components: [ + { + name: "X", + type: "uint256", + internalType: "uint256", + }, + { + name: "Y", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "event", + name: "Initialized", + inputs: [ + { + name: "version", + type: "uint8", + indexed: false, + internalType: "uint8", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "OwnershipTransferred", + inputs: [ + { + name: "previousOwner", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "newOwner", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Paused", + inputs: [ + { + name: "account", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "newPausedStatus", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "PauserRegistrySet", + inputs: [ + { + name: "pauserRegistry", + type: "address", + indexed: false, + internalType: "contract IPauserRegistry", + }, + { + name: "newPauserRegistry", + type: "address", + indexed: false, + internalType: "contract IPauserRegistry", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "StateRootUpdated", + inputs: [ + { + name: "rollupId", + type: "uint32", + indexed: true, + internalType: "uint32", + }, + { + name: "blockHeight", + type: "uint64", + indexed: true, + internalType: "uint64", + }, + { + name: "stateRoot", + type: "bytes32", + indexed: false, + internalType: "bytes32", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Unpaused", + inputs: [ + { + name: "account", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "newPausedStatus", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, +] as const; + +const _bytecode = + "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6143c280620000f46000396000f3fe608060405234801561001057600080fd5b50600436106101845760003560e01c8063715018a6116100d9578063d5d4bb5a11610087578063d5d4bb5a1461036c578063dd64766e1461037f578063e0f5d9f014610392578063ef024458146103bd578063f2fde38b146103c4578063f4db0571146103d7578063fabc1cbc146103df57600080fd5b8063715018a6146102f457806382616b7b146102fc578063886f11951461030f5780638da5cb5b1461032257806390540c3714610333578063b128aeee14610346578063b3a9e53b1461035957600080fd5b80632db52ea5116101365780632db52ea5146102425780632f65284e146102555780634afa71b914610276578063595c6a671461028e5780635ac86ab7146102965780635c975abb146102c95780636f5b9918146102d157600080fd5b80630510c1911461018957806306aba0e1146101a857806310d67a2f146101cd578063136439dd146101e25780631df9e1d2146101f55780631fb4d41114610208578063245a7bfc1461021b575b600080fd5b610191600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b03909116815260200161019f565b6101e06101db366004613746565b6103f2565b005b6101e06101f0366004613763565b6104ae565b6101e0610203366004613794565b6105db565b6101e06102163660046137ec565b6106cc565b60ce5461023590600160401b90046001600160a01b031681565b60405161019f919061383a565b6101e0610250366004613865565b610755565b610268610263366004613892565b610768565b60405190815260200161019f565b60cd54600160801b90046001600160801b03166101b5565b6101e0610887565b6102b96102a4366004613935565b606654600160ff9092169190911b9081161490565b604051901515815260200161019f565b606654610268565b6102d9610941565b6040805182518152602092830151928101929092520161019f565b6101e0610964565b6101e061030a366004613958565b610978565b606554610235906001600160a01b031681565b6033546001600160a01b0316610235565b6101e06103413660046139b1565b610a9d565b6101e0610354366004613aff565b610bed565b610268610367366004613bd3565b610cd1565b61026861037a366004613c06565b610d02565b6101b561038d366004613763565b610e5b565b60ce546103a5906001600160401b031681565b6040516001600160401b03909116815260200161019f565b60646101b5565b6101e06103d2366004613746565b610e78565b610191600081565b6101e06103ed366004613763565b610eee565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104699190613c4a565b6001600160a01b0316336001600160a01b0316146104a25760405162461bcd60e51b815260040161049990613c67565b60405180910390fd5b6104ab81611045565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906104de90339060040161383a565b602060405180830381865afa1580156104fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f9190613cb1565b61053b5760405162461bcd60e51b815260040161049990613cd3565b606654818116146105af5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610499565b6066819055604051818152339060008051602061434d833981519152906020015b60405180910390a250565b6105e361113c565b60ce546001600160401b03166105fc6020830183613d1b565b6001600160401b0316146106225760405162461bcd60e51b815260040161049990613d36565b61062f6020820182613d1b565b61063a906001613d76565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104ab61066b6040830183613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b7576106a860608302860136819003810190613df0565b8152602001906001019061068b565b505050505060ca61119690919063ffffffff16565b606654600190600290811614156106f55760405162461bcd60e51b815260040161049990613e0c565b61070a6107018461139f565b60ca9084611420565b6107265760405162461bcd60e51b815260040161049990613e3f565b6107506107366020850185613e67565b6107466040860160208701613d1b565b8560a0013561180a565b505050565b61075d61113c565b6104ab60ca82611870565b60006060850135158015906107805750608085013515155b6107c75760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610499565b60006097816107d96020890189613e67565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906108089190613d1b565b6001600160401b0316815260208101919091526040016000205490508061087357826108685760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610499565b610873868585611929565b61087d8686610d02565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906108b790339060040161383a565b602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190613cb1565b6109145760405162461bcd60e51b815260040161049990613cd3565b6000196066819055604051908152339060008051602061434d8339815191529060200160405180910390a2565b61094961361d565b506040805180820190915260cb54815260cc54602082015290565b61096c61113c565b610976600061193a565b565b606654600090600190811614156109a15760405162461bcd60e51b815260040161049990613e0c565b60ce546001600160401b03166109ba6020850185613d1b565b6001600160401b0316146109e05760405162461bcd60e51b815260040161049990613d36565b6109ec6107018461198c565b610a085760405162461bcd60e51b815260040161049990613e3f565b610a156020840184613d1b565b610a20906001613d76565b60ce805467ffffffffffffffff19166001600160401b0392909216919091179055610750610a516040850185613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b757610a8e60608302860136819003810190613df0565b81526020019060010190610a71565b600054610100900460ff1615808015610abd5750600054600160ff909116105b80610ad75750303b158015610ad7575060005460ff166001145b610b3a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610499565b6000805460ff191660011790558015610b5d576000805461ff0019166101001790555b610b688260006119c0565b610b718461193a565b610b7c60ca86611870565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610be6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610c495760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b6044820152606401610499565b60cd546001600160801b031615610ca25760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a65646044820152606401610499565b610cad60ca83611196565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d156020870187613e67565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610d449190613d1b565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610db45760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610499565b610e53610dc46020850185613746565b602085013583610dd76040880188613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e19925050506060890189613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a9892505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610cfc565b610e8061113c565b6001600160a01b038116610ee55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610499565b6104ab8161193a565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f659190613c4a565b6001600160a01b0316336001600160a01b031614610f955760405162461bcd60e51b815260040161049990613c67565b60665419811960665419161461100e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610499565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016105d0565b6001600160a01b0381166110d35760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610499565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b61119e613637565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b8451811015611364578481815181106111e5576111e5613ec8565b6020026020010151935060006112108560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b03908116911681141561127c5760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b6044820152606401610499565b602086015161128b8286613ede565b6112959190613f06565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b0392831617905590945081166112e05785516112d9908690611bd3565b945061130c565b60208601516001600160801b031661130c576113096113028760000151611c6a565b8690611bd3565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a25050808061135c90613f28565b9150506111ca565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016113d39190613f43565b60405160208183030381529060405280519060200120604051602001611403929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820181905260038501549091906001600160801b0316806114945760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a65646044820152606401610499565b60006114a08580613fad565b90506001600160401b038111156114b9576114b9613a0b565b6040519080825280602002602001820160405280156114e2578160200160208202803683370190505b50905060005b6114f28680613fad565b90508110156116cb576115456115088780613fad565b8381811061151857611518613ec8565b90506040020180360381019061152e9190613ff6565b805160009081526020918201519091526040902090565b82828151811061155757611557613ec8565b602090810291909101015280156115ee5781611574600183614012565b8151811061158457611584613ec8565b602002602001015160001c8282815181106115a1576115a1613ec8565b602002602001015160001c116115ee5760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b6044820152606401610499565b600088600001600084848151811061160857611608613ec8565b6020908102919091018101518252810191909152604001600020546001600160801b03169050806116765760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b6044820152606401610499565b6116a96116838880613fad565b8481811061169357611693613ec8565b9050604002018036038101906113029190613ff6565b94506116b58185614012565b93505080806116c390613f28565b9150506114e8565b506116f96116d884611c6a565b6040805180820190915260018a0154815260028a0154602082015290611bd3565b925060008061172c8886611715368b90038b0160208c01614098565b611727368c90038c0160a08d01613ff6565b611cf9565b915091508161177d5760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c656400006044820152606401610499565b806117c15760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b6044820152606401610499565b60038901546064906117e5906001600160801b03600160801b8204811691166140d7565b6117ef919061411c565b6001600160801b0316841015955050505050505b9392505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b03821611156118dc5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b6064820152608401610499565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b8161193484826106cc565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f826040516020016113d39190614142565b6065546001600160a01b03161580156119e157506001600160a01b03821615155b611a635760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610499565b6066819055604051818152339060008051602061434d8339815191529060200160405180910390a2611a9482611045565b5050565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611ad8906034016040516020818303038152906040528688611e58565b9150915081611b225760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610499565b6000611b2d82611e81565b9050600080611b628a604051602001611b4891815260200190565b604051602081830303815290604052888560400151611e58565b9150915081611bb35760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610499565b611bc4611bbf82611f45565b611f58565b9b9a5050505050505050505050565b611bdb61361d565b611be3613657565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611c2257611c24565bfe5b5080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610499565b505092915050565b611c7261361d565b8151158015611c8357506020820151155b15611ca1575050604080518082019091526000808252602082015290565b60405180604001604052808360000151815260200160008051602061436d8339815191528460200151611cd4919061421a565b611cec9060008051602061436d833981519152614012565b905292915050565b919050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611d4157611d41613ec8565b60200201518951600160200201518a60200151600060028110611d6657611d66613ec8565b60200201518b60200151600160028110611d8257611d82613ec8565b602090810291909101518c518d830151604051611ddf9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611e02919061421a565b9050611e4a611e146113028884611f87565b611e1c612003565b611e40611e3185611e2b6120c3565b90611f87565b611e3a8c6120e4565b90611bd3565b886201d4c0612168565b909890975095505050505050565b600060606000611e678661238c565b9050611e748186866123be565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611eae83612499565b90506040518060800160405280611ede83600081518110611ed157611ed1613ec8565b60200260200101516124ac565b8152602001611ef983600181518110611ed157611ed1613ec8565b8152602001611f2183600281518110611f1457611f14613ec8565b60200260200101516124b3565b8152602001611f3c83600381518110611f1457611f14613ec8565b90529392505050565b6060610cfc611f5383612555565b612582565b6000806000602084511115611f6e576020611f71565b83515b60209485015194036008029390931c9392505050565b611f8f61361d565b611f97613675565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611c22575080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610499565b61200b613693565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6120cb61361d565b5060408051808201909152600181526002602082015290565b6120ec61361d565b6000808061210860008051602061436d8339815191528661421a565b90505b6121148161260d565b909350915060008051602061436d83398151915282830983141561214e576040805180820190915290815260208101919091529392505050565b60008051602061436d83398151915260018208905061210b565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061219a6136b8565b60005b600281101561235f5760006121b382600661422e565b90508482600281106121c7576121c7613ec8565b602002015151836121d983600061424d565b600c81106121e9576121e9613ec8565b602002015284826002811061220057612200613ec8565b60200201516020015183826001612217919061424d565b600c811061222757612227613ec8565b602002015283826002811061223e5761223e613ec8565b602002015151518361225183600261424d565b600c811061226157612261613ec8565b602002015283826002811061227857612278613ec8565b602002015151600160200201518361229183600361424d565b600c81106122a1576122a1613ec8565b60200201528382600281106122b8576122b8613ec8565b6020020151602001516000600281106122d3576122d3613ec8565b6020020151836122e483600461424d565b600c81106122f4576122f4613ec8565b602002015283826002811061230b5761230b613ec8565b60200201516020015160016002811061232657612326613ec8565b60200201518361233783600561424d565b600c811061234757612347613ec8565b6020020152508061235781613f28565b91505061219d565b506123686136d7565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606081805190602001206040516020016123a891815260200190565b6040516020818303038152906040529050919050565b6000606060006123cd8561268f565b905060008060006123df848a89612789565b815192955090935091501580806123f35750815b61243f5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610499565b60008161245b5760405180602001604052806000815250612487565b6124878661246a600188614012565b8151811061247a5761247a613ec8565b6020026020010151612bad565b919b919a509098505050505050505050565b6060610cfc6124a783612555565b612bd7565b6000610cfc825b60006021826000015111156124da5760405162461bcd60e51b815260040161049990614265565b60008060006124e885612dbd565b9194509250905060008160018111156125035761250361429c565b146125205760405162461bcd60e51b815260040161049990614265565b6000838660200151612532919061424d565b8051909150602084101561087d5760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060600080600061259285612dbd565b9194509250905060008160018111156125ad576125ad61429c565b146125f55760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610499565b612604856020015184846130f3565b95945050505050565b6000808060008051602061436d833981519152600360008051602061436d8339815191528660008051602061436d833981519152888909090890506000612683827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5260008051602061436d8339815191526131d1565b91959194509092505050565b6060600061269c83612499565b9050600081516001600160401b038111156126b9576126b9613a0b565b6040519080825280602002602001820160405280156126fe57816020015b60408051808201909152606080825260208201528152602001906001900390816126d75790505b50905060005b825181101561278157600061273184838151811061272457612724613ec8565b6020026020010151612582565b9050604051806040016040528082815260200161274d83612499565b81525083838151811061276257612762613ec8565b602002602001018190525050808061277990613f28565b915050612704565b509392505050565b6000606081808061279987613279565b905060008690506000806127c0604051806040016040528060608152602001606081525090565b60005b8c51811015612b85578c81815181106127de576127de613ec8565b6020026020010151915082846127f4919061424d565b935061280160018861424d565b965083612859578151805160209091012085146128545760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610499565b612916565b8151516020116128bb578151805160209091012085146128545760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610499565b846128c983600001516133b3565b146129165760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610499565b6129226010600161424d565b826020015151141561299b57855184141561293c57612b85565b600086858151811061295057612950613ec8565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061297b5761297b613ec8565b6020026020010151905061298e816133db565b9650600194505050612b73565b60028260200151511415612b2b5760006129b483613411565b90506000816000815181106129cb576129cb613ec8565b016020015160f81c905060006129e26002836142b2565b6129ed9060026142d4565b905060006129fe848360ff16613435565b90506000612a0c8b8a613435565b90506000612a1a838361346b565b905060ff851660021480612a31575060ff85166003145b15612a6b57808351148015612a465750808251145b15612a5857612a55818b61424d565b99505b50600160ff1b9950612b85945050505050565b60ff85161580612a7e575060ff85166001145b15612ad45782518114612a9e5750600160ff1b9950612b85945050505050565b612ac58860200151600181518110612ab857612ab8613ec8565b60200260200101516133db565b9a509750612b73945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610499565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610499565b80612b7d81613f28565b9150506127c3565b50600160ff1b841486612b988786613435565b909e909d50909b509950505050505050505050565b60208101518051606091610cfc91612bc790600190614012565b8151811061272457612724613ec8565b6060600080612be584612dbd565b91935090915060019050816001811115612c0157612c0161429c565b14612c485760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610499565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612c615790505090506000835b8651811015612db25760208210612cfa5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610499565b600080612d376040518060400160405280858c60000151612d1b9190614012565b8152602001858c60200151612d30919061424d565b9052612dbd565b509150915060405180604001604052808383612d53919061424d565b8152602001848b60200151612d68919061424d565b815250858581518110612d7d57612d7d613ec8565b6020908102919091010152612d9360018561424d565b9350612d9f818361424d565b612da9908461424d565b92505050612c8e565b508152949350505050565b600080600080846000015111612e105760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610499565b6020840151805160001a607f8111612e355760006001600094509450945050506130ec565b60b78111612ead576000612e4a608083614012565b905080876000015111612e9b5760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610499565b600195509350600092506130ec915050565b60bf8111612f97576000612ec260b783614012565b905080876000015111612f175760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610499565b600183015160208290036101000a9004612f31818361424d565b885111612f7b5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610499565b612f8682600161424d565b96509450600093506130ec92505050565b60f7811161300c576000612fac60c083614012565b905080876000015111612ffb5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610499565b6001955093508492506130ec915050565b600061301960f783614012565b90508087600001511161306e5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610499565b600183015160208290036101000a9004613088818361424d565b8851116130d05760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610499565b6130db82600161424d565b96509450600193506130ec92505050565b9193909250565b60606000826001600160401b0381111561310f5761310f613a0b565b6040519080825280601f01601f191660200182016040528015613139576020820181803683370190505b50905080516000141561314d579050611803565b6000613159858761424d565b90506020820160005b61316d6020876142f7565b8110156131a4578251825261318360208461424d565b925061319060208361424d565b91508061319c81613f28565b915050613162565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6000806131dc6136d7565b6131e46136f5565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611c2257508261326e5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610499565b505195945050505050565b606060008251600261328b919061422e565b6001600160401b038111156132a2576132a2613a0b565b6040519080825280601f01601f1916602001820160405280156132cc576020820181803683370190505b50905060005b83518110156133ac5760048482815181106132ef576132ef613ec8565b01602001516001600160f81b031916901c8261330c83600261422e565b8151811061331c5761331c613ec8565b60200101906001600160f81b031916908160001a905350601084828151811061334757613347613ec8565b0160200151613359919060f81c6142b2565b60f81b8261336883600261422e565b61337390600161424d565b8151811061338357613383613ec8565b60200101906001600160f81b031916908160001a905350806133a481613f28565b9150506132d2565b5092915050565b60006020825110156133c757506020015190565b81806020019051810190610cfc919061430b565b600060606020836000015110156133fc576133f5836134e7565b9050613408565b61340583612582565b90505b611803816133b3565b6060610cfc613430836020015160008151811061272457612724613ec8565b613279565b6060825182106134545750604080516020810190915260008152610cfc565b61180383838486516134669190614012565b6134f2565b6000805b80845111801561347f5750808351115b80156134d0575082818151811061349857613498613ec8565b602001015160f81c60f81b6001600160f81b0319168482815181106134bf576134bf613ec8565b01602001516001600160f81b031916145b1561180357806134df81613f28565b91505061346f565b6060610cfc82613607565b60608161350081601f61424d565b101561351e5760405162461bcd60e51b815260040161049990614324565b82613529838261424d565b10156135475760405162461bcd60e51b815260040161049990614324565b613551828461424d565b845110156135955760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610499565b6060821580156135b457604051915060008252602082016040526135fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156135ed5780518352602092830192016135d5565b5050858452601f01601f1916604052505b50949350505050565b6060610cfc8260200151600084600001516130f3565b604051806040016040528060008152602001600081525090565b604051806040016040528061364a61361d565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806136a6613713565b81526020016136b3613713565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104ab57600080fd5b60006020828403121561375857600080fd5b813561180381613731565b60006020828403121561377557600080fd5b5035919050565b60006060828403121561378e57600080fd5b50919050565b6000602082840312156137a657600080fd5b81356001600160401b038111156137bc57600080fd5b610e538482850161377c565b600060c0828403121561378e57600080fd5b600060e0828403121561378e57600080fd5b60008060e083850312156137ff57600080fd5b61380984846137c8565b915060c08301356001600160401b0381111561382457600080fd5b613830858286016137da565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611cf457600080fd5b60006020828403121561387757600080fd5b6118038261384e565b60006080828403121561378e57600080fd5b60008060008061010085870312156138a957600080fd5b6138b386866137c8565b935060c08501356001600160401b03808211156138cf57600080fd5b6138db88838901613880565b945060e08701359150808211156138f157600080fd5b818701915087601f83011261390557600080fd5b81358181111561391457600080fd5b88602082850101111561392657600080fd5b95989497505060200194505050565b60006020828403121561394757600080fd5b813560ff8116811461180357600080fd5b6000806040838503121561396b57600080fd5b82356001600160401b038082111561398257600080fd5b61398e8683870161377c565b935060208501359150808211156139a457600080fd5b50613830858286016137da565b600080600080608085870312156139c757600080fd5b6139d08561384e565b935060208501356139e081613731565b925060408501356139f081613731565b91506060850135613a0081613731565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a4357613a43613a0b565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613a7157613a71613a0b565b604052919050565b600060408284031215613a8b57600080fd5b613a93613a21565b9050813581526020820135602082015292915050565b600060608284031215613abb57600080fd5b613ac3613a21565b9050613acf8383613a79565b8152613add6040830161384e565b602082015292915050565b80356001600160401b0381168114611cf457600080fd5b60008060408385031215613b1257600080fd5b82356001600160401b0380821115613b2957600080fd5b818501915085601f830112613b3d57600080fd5b8135602082821115613b5157613b51613a0b565b613b5f818360051b01613a49565b82815281810193506060928302850182019289841115613b7e57600080fd5b948201945b83861015613ba457613b958a87613aa9565b85529485019493820193613b83565b509550613bb2878201613ae8565b9450505050509250929050565b803563ffffffff81168114611cf457600080fd5b60008060408385031215613be657600080fd5b613bef83613bbf565b9150613bfd60208401613ae8565b90509250929050565b60008060e08385031215613c1957600080fd5b613c2384846137c8565b915060c08301356001600160401b03811115613c3e57600080fd5b61383085828601613880565b600060208284031215613c5c57600080fd5b815161180381613731565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613cc357600080fd5b8151801515811461180357600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613d2d57600080fd5b61180382613ae8565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613d9857613d98613d60565b01949350505050565b6000808335601e19843603018112613db857600080fd5b8301803591506001600160401b03821115613dd257600080fd5b6020019150606081023603821315613de957600080fd5b9250929050565b600060608284031215613e0257600080fd5b6118038383613aa9565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613e7957600080fd5b61180382613bbf565b6000808335601e19843603018112613e9957600080fd5b8301803591506001600160401b03821115613eb357600080fd5b602001915036819003821315613de957600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613efe57613efe613d60565b039392505050565b60006001600160801b03828116848216808303821115613d9857613d98613d60565b6000600019821415613f3c57613f3c613d60565b5060010190565b60c0810163ffffffff613f5584613bbf565b168252613f6460208401613ae8565b6001600160401b03808216602085015280613f8160408701613ae8565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e19843603018112613fc457600080fd5b8301803591506001600160401b03821115613fde57600080fd5b6020019150600681901b3603821315613de957600080fd5b60006040828403121561400857600080fd5b6118038383613a79565b60008282101561402457614024613d60565b500390565b600082601f83011261403a57600080fd5b604051604081018181106001600160401b038211171561405c5761405c613a0b565b806040525080604084018581111561407357600080fd5b845b8181101561408d578035835260209283019201614075565b509195945050505050565b6000608082840312156140aa57600080fd5b6140b2613a21565b6140bc8484614029565b81526140cb8460408501614029565b60208201529392505050565b60006001600160801b03828116848216811515828404821116156140fd576140fd613d60565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061413657614136614106565b92169190910492915050565b60006020808352608083016001600160401b038061415f87613ae8565b168386015261416f838701613ae8565b604082821681880152808801359150601e1988360301821261419057600080fd5b908701908135838111156141a357600080fd5b6060935083810236038913156141b857600080fd5b87840184905293849052908401926000919060a088015b8184101561420d578535815286860135878201526001600160801b036141f684880161384e565b1681840152948401946001939093019284016141cf565b9998505050505050505050565b60008261422957614229614106565b500690565b600081600019048311821515161561424857614248613d60565b500290565b6000821982111561426057614260613d60565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff8316806142c5576142c5614106565b8060ff84160691505092915050565b600060ff821660ff8416808210156142ee576142ee613d60565b90039392505050565b60008261430657614306614106565b500490565b60006020828403121561431d57600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212208d5a00bdfaa5c82d49e9710d06eeebb3a877dc10568c3e210691372ed37183ab64736f6c634300080c0033"; + +type SFFLRegistryRollupConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SFFLRegistryRollupConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SFFLRegistryRollup__factory extends ContractFactory { + constructor(...args: SFFLRegistryRollupConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override getDeployTransaction( + overrides?: NonPayableOverrides & { from?: string } + ): Promise { + return super.getDeployTransaction(overrides || {}); + } + override deploy(overrides?: NonPayableOverrides & { from?: string }) { + return super.deploy(overrides || {}) as Promise< + SFFLRegistryRollup & { + deploymentTransaction(): ContractTransactionResponse; + } + >; + } + override connect(runner: ContractRunner | null): SFFLRegistryRollup__factory { + return super.connect(runner) as SFFLRegistryRollup__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SFFLRegistryRollupInterface { + return new Interface(_abi) as SFFLRegistryRollupInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): SFFLRegistryRollup { + return new Contract(address, _abi, runner) as unknown as SFFLRegistryRollup; + } +} diff --git a/examples/nffl-cli/typechain-types/factories/index.ts b/examples/nffl-cli/typechain-types/factories/index.ts new file mode 100644 index 00000000..d24bc05a --- /dev/null +++ b/examples/nffl-cli/typechain-types/factories/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { SFFLRegistryRollup__factory } from "./SFFLRegistryRollup__factory"; diff --git a/examples/nffl-cli/typechain-types/index.ts b/examples/nffl-cli/typechain-types/index.ts new file mode 100644 index 00000000..2558160d --- /dev/null +++ b/examples/nffl-cli/typechain-types/index.ts @@ -0,0 +1,6 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { SFFLRegistryRollup } from "./SFFLRegistryRollup"; +export * as factories from "./factories"; +export { SFFLRegistryRollup__factory } from "./factories/SFFLRegistryRollup__factory"; diff --git a/examples/nffl-cli/updateOperatorSet.js b/examples/nffl-cli/updateOperatorSet.js deleted file mode 100644 index 015ffe79..00000000 --- a/examples/nffl-cli/updateOperatorSet.js +++ /dev/null @@ -1,61 +0,0 @@ - -const { ethers } = require('ethers'); -const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); -const { hashG1Point } = require('./src/hashG1Point'); -const { createWallet } = require('./src/createWallet'); -/* - * Automatically updates the operator set -*/ -async function updateOperatorSet(options) { - // Init provider - const provider = new ethers.JsonRpcProvider(options.rpcUrl); - // Init wallet - const wallet = createWallet(options.envKey); - const account = wallet.connect(provider); - console.log('Wallet address:', await account.getAddress()); - // Get next operator update id - const registryRollup = new ethers.Contract(options.nfflRegistryRollup, NFFLRegistryRollupABI, account); - const nextOperatorUpdateId = await registryRollup.nextOperatorUpdateId(); - console.log('nextOperatorUpdateId',nextOperatorUpdateId); - // Fetch data - console.log(`${options.aggregator}/aggregation/operator-set-update?id=${nextOperatorUpdateId}`); - const response = await fetch(`${options.aggregator}/aggregation/operator-set-update?id=${nextOperatorUpdateId}`); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - const respText = await response.text(); - // stringifying weight manually to avoid possible overflow issues when parsing - text = respText.replace(/"Weight":\s*(\d+)/g, '"Weight": "$1"'); - const data = JSON.parse(text); - const operators = data.Message.Operators.map(({ Pubkey: pubkey, Weight: weight }) => ({ pubkey, weight })); - const message = { - id: data.Message.Id, - timestamp: data.Message.Timestamp, - operators - } - console.log('New operators:',message.operators); - // Sort non-signers keys - const nonSignerPubkeys = data.Aggregation.NonSignersPubkeysG1; - nonSignerPubkeys.sort((a, b) => { - const hashA = hashG1Point(a); - const hashB = hashG1Point(b); - return hashA.comparedTo(hashB); // Compare BigNumber values - }); - // Create signature info - const signatureInfo = { - nonSignerPubkeys, - apkG2: { - X: [data.Aggregation.SignersApkG2.X.A1,data.Aggregation.SignersApkG2.X.A0], - Y: [data.Aggregation.SignersApkG2.Y.A1,data.Aggregation.SignersApkG2.Y.A0] - }, - sigma: data.Aggregation.SignersAggSigG1.g1_point - } - // Call contract - const tx = await registryRollup.updateOperatorSet(message,signatureInfo); - console.log('transaction:', tx); - await tx.wait(); - // Get next operator update id - console.log('New nextOperatorUpdateId',await registryRollup.nextOperatorUpdateId()); -} - -module.exports = {updateOperatorSet} \ No newline at end of file diff --git a/examples/nffl-cli/updateStateRoot.js b/examples/nffl-cli/updateStateRoot.js deleted file mode 100644 index c6121365..00000000 --- a/examples/nffl-cli/updateStateRoot.js +++ /dev/null @@ -1,59 +0,0 @@ -const { ethers } = require('ethers'); -const {NFFLRegistryRollupABI} = require('./abi/NFFLRegistryRollup'); -const { hashG1Point } = require('./src/hashG1Point'); -const { createWallet } = require('./src/createWallet'); -/* - * Updates the state root. -*/ -async function updateStateRoot(options) { - // Init provider - const provider = new ethers.JsonRpcProvider(options.rpcUrl); - // Init wallet - const wallet = createWallet(options.envKey); - const account = wallet.connect(provider); - console.log('Wallet address:', await account.getAddress()); - // Get RegistryRollup contract - const registryRollup = new ethers.Contract(options.nfflRegistryRollup, NFFLRegistryRollupABI, account); - // Fetch data - console.log(`${options.aggregator}/aggregation/state-root-update?rollupId=${options.rollupId}&blockHeight=${options.blockHeight}`); - const response = await fetch(`${options.aggregator}/aggregation/state-root-update?rollupId=${options.rollupId}&blockHeight=${options.blockHeight}`); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - const data = await response.json(); - // Build message - const nearDaTransactionId = '0x'+Buffer.from(data.Message.NearDaTransactionId).toString('hex'); - const nearDaCommitment = '0x'+Buffer.from(data.Message.NearDaCommitment).toString('hex'); - const stateRoot = '0x'+Buffer.from(data.Message.StateRoot).toString('hex'); - const message = { - rollupId: data.Message.RollupId, - blockHeight: data.Message.BlockHeight, - timestamp:data.Message.Timestamp, - nearDaTransactionId, - nearDaCommitment, - stateRoot - }; - // Sort non-signers keys - const nonSignerPubkeys = data.Aggregation.NonSignersPubkeysG1; - nonSignerPubkeys.sort((a, b) => { - const hashA = hashG1Point(a); - const hashB = hashG1Point(b); - return hashA.comparedTo(hashB); - }); - // Create signature info - const signatureInfo = { - nonSignerPubkeys, - apkG2: { - X: [data.Aggregation.SignersApkG2.X.A1,data.Aggregation.SignersApkG2.X.A0], - Y: [data.Aggregation.SignersApkG2.Y.A1,data.Aggregation.SignersApkG2.Y.A0] - }, - sigma: data.Aggregation.SignersAggSigG1.g1_point - } - // Update state root - const tx = await registryRollup.updateStateRoot(message,signatureInfo); - console.log('transaction:', tx); - await tx.wait(); - console.log('State root updated'); -} - -module.exports = {updateStateRoot} From 6ed7b1ab070231a7d8c77a659a44991086bc7708 Mon Sep 17 00:00:00 2001 From: Franco Barpp Gomes Date: Wed, 14 Aug 2024 22:51:37 -0300 Subject: [PATCH 09/12] docs: Add README to demo CLI --- examples/nffl-cli/README.md | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 examples/nffl-cli/README.md diff --git a/examples/nffl-cli/README.md b/examples/nffl-cli/README.md new file mode 100644 index 00000000..65c9a16f --- /dev/null +++ b/examples/nffl-cli/README.md @@ -0,0 +1,42 @@ +## How to build +```sh +npm install +``` + +## Commands + +### `storage-proof` + +Get the proof for a storage slot of a target contract from the source chain. + +```bash +ts-node index.ts storage-proof\ + --rpc-url https://sepolia.optimism.io\ + --contract-address 0xB90101779CC5EB84162f72A80e44307752b778b6\ + --storage-key 0x0000000000000000000000000000000000000000000000000000000000000000 +``` + +### `update-state-root` + +Update the state root for a given rollup in a SFFLRegistryRollup contract. + +```bash +PRIVATE_KEY=<> ts-node index.ts update-state-root\ + --rpc-url https://sepolia-rollup.arbitrum.io/rpc\ + --rollup-id 11155420\ + --block-height 14095733\ + --contract-address 0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0\ + --aggregator-url http://127.0.0.1:4002\ +``` + +### `update-operator-set` + +Update the operator set for a given SFFLRegistryRollup contract. + +```bash +PRIVATE_KEY=<> ts-node index.ts update-operator-set\ + --rpc-url https://sepolia-rollup.arbitrum.io/rpc\ + --contract-address 0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0\ + --id 10\ + --aggregator-url http://127.0.0.1:4002\ +``` From 0ad6ccce2d72e7c3bcfa546fc52bbaa932cca256 Mon Sep 17 00:00:00 2001 From: Franco Barpp Gomes Date: Wed, 14 Aug 2024 22:52:11 -0300 Subject: [PATCH 10/12] feat: Add block-height arg to storage-proof --- examples/nffl-cli/README.md | 3 ++- examples/nffl-cli/src/commands/getStorageProof.ts | 3 ++- examples/nffl-cli/src/index.ts | 1 + examples/nffl-cli/src/utils/storage.ts | 8 ++++---- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/examples/nffl-cli/README.md b/examples/nffl-cli/README.md index 65c9a16f..c658a5ec 100644 --- a/examples/nffl-cli/README.md +++ b/examples/nffl-cli/README.md @@ -13,7 +13,8 @@ Get the proof for a storage slot of a target contract from the source chain. ts-node index.ts storage-proof\ --rpc-url https://sepolia.optimism.io\ --contract-address 0xB90101779CC5EB84162f72A80e44307752b778b6\ - --storage-key 0x0000000000000000000000000000000000000000000000000000000000000000 + --storage-key 0x0000000000000000000000000000000000000000000000000000000000000000\ + --block-height 14095733 ``` ### `update-state-root` diff --git a/examples/nffl-cli/src/commands/getStorageProof.ts b/examples/nffl-cli/src/commands/getStorageProof.ts index 45c7a0c4..10a9a490 100644 --- a/examples/nffl-cli/src/commands/getStorageProof.ts +++ b/examples/nffl-cli/src/commands/getStorageProof.ts @@ -5,12 +5,13 @@ export interface GetStorageProofOptions { rpcUrl: string; contractAddress: string; storageKey: string; + blockHeight: string; } export async function getStorageProof(options: GetStorageProofOptions) { const provider = new ethers.JsonRpcProvider(options.rpcUrl); - const verifiedStorage = await verifyStorage(provider, options.contractAddress, options.storageKey); + const verifiedStorage = await verifyStorage(provider, options.contractAddress, options.storageKey, BigInt(options.blockHeight)); console.log(verifiedStorage); } \ No newline at end of file diff --git a/examples/nffl-cli/src/index.ts b/examples/nffl-cli/src/index.ts index 42389c36..b0c5cb9a 100644 --- a/examples/nffl-cli/src/index.ts +++ b/examples/nffl-cli/src/index.ts @@ -16,6 +16,7 @@ program .requiredOption("--rpc-url ", "RPC URL") .requiredOption("--contract-address
", "Address of the target contract") .requiredOption("--storage-key ", "Storage key") + .requiredOption("--block-height ", "Block height") .action(getStorageProof); program diff --git a/examples/nffl-cli/src/utils/storage.ts b/examples/nffl-cli/src/utils/storage.ts index db0bfda4..cce03147 100644 --- a/examples/nffl-cli/src/utils/storage.ts +++ b/examples/nffl-cli/src/utils/storage.ts @@ -15,11 +15,11 @@ export interface GetProofResponse { }[]; } -export async function getProof(provider: ethers.JsonRpcProvider, contractAddress: string, storageKey: string): Promise { +export async function getProof(provider: ethers.JsonRpcProvider, contractAddress: string, storageKey: string, blockHeight: bigint): Promise { return await provider.send("eth_getProof", [ contractAddress, [storageKey], - "latest", + blockHeight, ]); } @@ -31,8 +31,8 @@ export interface VerifiedStorage { storageTrieWitness: string; } -export async function verifyStorage(provider: ethers.JsonRpcProvider, contractAddress: string, storageKey: string): Promise { - const proof = await getProof(provider, contractAddress, storageKey); +export async function verifyStorage(provider: ethers.JsonRpcProvider, contractAddress: string, storageKey: string, blockHeight: bigint): Promise { + const proof = await getProof(provider, contractAddress, storageKey, blockHeight); return { target: contractAddress, From 3019fa1952f221e546a3958a523702af9aa7e3f7 Mon Sep 17 00:00:00 2001 From: Franco Barpp Gomes Date: Thu, 3 Oct 2024 18:15:00 +0100 Subject: [PATCH 11/12] feat: Add commands as npm scripts --- examples/nffl-cli/README.md | 6 +++--- examples/nffl-cli/package.json | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/nffl-cli/README.md b/examples/nffl-cli/README.md index c658a5ec..a93f4bc5 100644 --- a/examples/nffl-cli/README.md +++ b/examples/nffl-cli/README.md @@ -10,7 +10,7 @@ npm install Get the proof for a storage slot of a target contract from the source chain. ```bash -ts-node index.ts storage-proof\ +npm run storage-proof -- \ --rpc-url https://sepolia.optimism.io\ --contract-address 0xB90101779CC5EB84162f72A80e44307752b778b6\ --storage-key 0x0000000000000000000000000000000000000000000000000000000000000000\ @@ -22,7 +22,7 @@ ts-node index.ts storage-proof\ Update the state root for a given rollup in a SFFLRegistryRollup contract. ```bash -PRIVATE_KEY=<> ts-node index.ts update-state-root\ +PRIVATE_KEY=<> npm run update-state-root -- \ --rpc-url https://sepolia-rollup.arbitrum.io/rpc\ --rollup-id 11155420\ --block-height 14095733\ @@ -35,7 +35,7 @@ PRIVATE_KEY=<> ts-node index.ts update-state-root\ Update the operator set for a given SFFLRegistryRollup contract. ```bash -PRIVATE_KEY=<> ts-node index.ts update-operator-set\ +PRIVATE_KEY=<> npm run update-operator-set -- \ --rpc-url https://sepolia-rollup.arbitrum.io/rpc\ --contract-address 0x23e252b4Ec7cDd3ED84f039EF53DEa494CE878E0\ --id 10\ diff --git a/examples/nffl-cli/package.json b/examples/nffl-cli/package.json index 6dabdff9..960b94aa 100644 --- a/examples/nffl-cli/package.json +++ b/examples/nffl-cli/package.json @@ -4,7 +4,10 @@ "version": "0.0.1", "main": "index.ts", "scripts": { - "typechain": "typechain --target ethers-v6 --out-dir typechain-types 'abi/*.json'" + "typechain": "typechain --target ethers-v6 --out-dir typechain-types 'abi/*.json'", + "storage-proof": "ts-node src/index.ts storage-proof", + "update-state-root": "ts-node src/index.ts update-state-root", + "update-operator-set": "ts-node src/index.ts update-operator-set" }, "keywords": [], "author": "Near.org", @@ -15,9 +18,6 @@ "ethers": "^6.13.1", "rlp": "^3.0.0" }, - "bin": { - "nffl-cli": "./index.js" - }, "devDependencies": { "@commander-js/extra-typings": "^12.1.0", "@typechain/ethers-v6": "^0.5.1", From f68d6d7c92a5df41c2573f2f7b94d2daa2f6345a Mon Sep 17 00:00:00 2001 From: Franco Barpp Gomes Date: Thu, 3 Oct 2024 18:16:49 +0100 Subject: [PATCH 12/12] chore: Update ABI --- examples/nffl-cli/abi/SFFLRegistryRollup.json | 2 +- .../typechain-types/SFFLRegistryRollup.ts | 18 ++++++++++++++++++ .../factories/SFFLRegistryRollup__factory.ts | 15 ++++++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/examples/nffl-cli/abi/SFFLRegistryRollup.json b/examples/nffl-cli/abi/SFFLRegistryRollup.json index 06b04e7d..be4cfd7c 100644 --- a/examples/nffl-cli/abi/SFFLRegistryRollup.json +++ b/examples/nffl-cli/abi/SFFLRegistryRollup.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"PAUSED_UPDATE_OPERATOR_SET","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"PAUSED_UPDATE_STATE_ROOT","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"THRESHOLD_DENOMINATOR","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"pure"},{"type":"function","name":"aggregator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"forceOperatorSetUpdate","inputs":[{"name":"message","type":"tuple","internalType":"struct OperatorSetUpdate.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"operators","type":"tuple[]","internalType":"struct RollupOperators.Operator[]","components":[{"name":"pubkey","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"weight","type":"uint128","internalType":"uint128"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getApk","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getOperatorWeight","inputs":[{"name":"pubkeyHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"getQuorumThreshold","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"getStateRoot","inputs":[{"name":"rollupId","type":"uint32","internalType":"uint32"},{"name":"blockHeight","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStorageValue","inputs":[{"name":"message","type":"tuple","internalType":"struct StateRootUpdate.Message","components":[{"name":"rollupId","type":"uint32","internalType":"uint32"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"nearDaTransactionId","type":"bytes32","internalType":"bytes32"},{"name":"nearDaCommitment","type":"bytes32","internalType":"bytes32"},{"name":"stateRoot","type":"bytes32","internalType":"bytes32"}]},{"name":"proofParams","type":"tuple","internalType":"struct SFFLRegistryBase.ProofParams","components":[{"name":"target","type":"address","internalType":"address"},{"name":"storageKey","type":"bytes32","internalType":"bytes32"},{"name":"stateTrieWitness","type":"bytes","internalType":"bytes"},{"name":"storageTrieWitness","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getTotalWeight","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"quorumThreshold","type":"uint128","internalType":"uint128"},{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_aggregator","type":"address","internalType":"address"},{"name":"_pauserRegistry","type":"address","internalType":"contract IPauserRegistry"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nextOperatorUpdateId","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[{"name":"newPausedStatus","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"pauseAll","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[{"name":"index","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"pauserRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPauserRegistry"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setInitialOperatorSet","inputs":[{"name":"operators","type":"tuple[]","internalType":"struct RollupOperators.Operator[]","components":[{"name":"pubkey","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"weight","type":"uint128","internalType":"uint128"}]},{"name":"_nextOperatorUpdateId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPauserRegistry","inputs":[{"name":"newPauserRegistry","type":"address","internalType":"contract IPauserRegistry"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setQuorumThreshold","inputs":[{"name":"newQuorumThreshold","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unpause","inputs":[{"name":"newPausedStatus","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateAndGetStorageValue","inputs":[{"name":"message","type":"tuple","internalType":"struct StateRootUpdate.Message","components":[{"name":"rollupId","type":"uint32","internalType":"uint32"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"nearDaTransactionId","type":"bytes32","internalType":"bytes32"},{"name":"nearDaCommitment","type":"bytes32","internalType":"bytes32"},{"name":"stateRoot","type":"bytes32","internalType":"bytes32"}]},{"name":"proofParams","type":"tuple","internalType":"struct SFFLRegistryBase.ProofParams","components":[{"name":"target","type":"address","internalType":"address"},{"name":"storageKey","type":"bytes32","internalType":"bytes32"},{"name":"stateTrieWitness","type":"bytes","internalType":"bytes"},{"name":"storageTrieWitness","type":"bytes","internalType":"bytes"}]},{"name":"agreement","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"updateOperatorSet","inputs":[{"name":"message","type":"tuple","internalType":"struct OperatorSetUpdate.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"operators","type":"tuple[]","internalType":"struct RollupOperators.Operator[]","components":[{"name":"pubkey","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"weight","type":"uint128","internalType":"uint128"}]}]},{"name":"signatureInfo","type":"tuple","internalType":"struct RollupOperators.SignatureInfo","components":[{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateStateRoot","inputs":[{"name":"message","type":"tuple","internalType":"struct StateRootUpdate.Message","components":[{"name":"rollupId","type":"uint32","internalType":"uint32"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"nearDaTransactionId","type":"bytes32","internalType":"bytes32"},{"name":"nearDaCommitment","type":"bytes32","internalType":"bytes32"},{"name":"stateRoot","type":"bytes32","internalType":"bytes32"}]},{"name":"signatureInfo","type":"tuple","internalType":"struct RollupOperators.SignatureInfo","components":[{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"newPausedStatus","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PauserRegistrySet","inputs":[{"name":"pauserRegistry","type":"address","indexed":false,"internalType":"contract IPauserRegistry"},{"name":"newPauserRegistry","type":"address","indexed":false,"internalType":"contract IPauserRegistry"}],"anonymous":false},{"type":"event","name":"StateRootUpdated","inputs":[{"name":"rollupId","type":"uint32","indexed":true,"internalType":"uint32"},{"name":"blockHeight","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"stateRoot","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"newPausedStatus","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6143c280620000f46000396000f3fe608060405234801561001057600080fd5b50600436106101845760003560e01c8063715018a6116100d9578063d5d4bb5a11610087578063d5d4bb5a1461036c578063dd64766e1461037f578063e0f5d9f014610392578063ef024458146103bd578063f2fde38b146103c4578063f4db0571146103d7578063fabc1cbc146103df57600080fd5b8063715018a6146102f457806382616b7b146102fc578063886f11951461030f5780638da5cb5b1461032257806390540c3714610333578063b128aeee14610346578063b3a9e53b1461035957600080fd5b80632db52ea5116101365780632db52ea5146102425780632f65284e146102555780634afa71b914610276578063595c6a671461028e5780635ac86ab7146102965780635c975abb146102c95780636f5b9918146102d157600080fd5b80630510c1911461018957806306aba0e1146101a857806310d67a2f146101cd578063136439dd146101e25780631df9e1d2146101f55780631fb4d41114610208578063245a7bfc1461021b575b600080fd5b610191600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b03909116815260200161019f565b6101e06101db366004613746565b6103f2565b005b6101e06101f0366004613763565b6104ae565b6101e0610203366004613794565b6105db565b6101e06102163660046137ec565b6106cc565b60ce5461023590600160401b90046001600160a01b031681565b60405161019f919061383a565b6101e0610250366004613865565b610755565b610268610263366004613892565b610768565b60405190815260200161019f565b60cd54600160801b90046001600160801b03166101b5565b6101e0610887565b6102b96102a4366004613935565b606654600160ff9092169190911b9081161490565b604051901515815260200161019f565b606654610268565b6102d9610941565b6040805182518152602092830151928101929092520161019f565b6101e0610964565b6101e061030a366004613958565b610978565b606554610235906001600160a01b031681565b6033546001600160a01b0316610235565b6101e06103413660046139b1565b610a9d565b6101e0610354366004613aff565b610bed565b610268610367366004613bd3565b610cd1565b61026861037a366004613c06565b610d02565b6101b561038d366004613763565b610e5b565b60ce546103a5906001600160401b031681565b6040516001600160401b03909116815260200161019f565b60646101b5565b6101e06103d2366004613746565b610e78565b610191600081565b6101e06103ed366004613763565b610eee565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104699190613c4a565b6001600160a01b0316336001600160a01b0316146104a25760405162461bcd60e51b815260040161049990613c67565b60405180910390fd5b6104ab81611045565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906104de90339060040161383a565b602060405180830381865afa1580156104fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f9190613cb1565b61053b5760405162461bcd60e51b815260040161049990613cd3565b606654818116146105af5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610499565b6066819055604051818152339060008051602061434d833981519152906020015b60405180910390a250565b6105e361113c565b60ce546001600160401b03166105fc6020830183613d1b565b6001600160401b0316146106225760405162461bcd60e51b815260040161049990613d36565b61062f6020820182613d1b565b61063a906001613d76565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104ab61066b6040830183613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b7576106a860608302860136819003810190613df0565b8152602001906001019061068b565b505050505060ca61119690919063ffffffff16565b606654600190600290811614156106f55760405162461bcd60e51b815260040161049990613e0c565b61070a6107018461139f565b60ca9084611420565b6107265760405162461bcd60e51b815260040161049990613e3f565b6107506107366020850185613e67565b6107466040860160208701613d1b565b8560a0013561180a565b505050565b61075d61113c565b6104ab60ca82611870565b60006060850135158015906107805750608085013515155b6107c75760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610499565b60006097816107d96020890189613e67565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906108089190613d1b565b6001600160401b0316815260208101919091526040016000205490508061087357826108685760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610499565b610873868585611929565b61087d8686610d02565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906108b790339060040161383a565b602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190613cb1565b6109145760405162461bcd60e51b815260040161049990613cd3565b6000196066819055604051908152339060008051602061434d8339815191529060200160405180910390a2565b61094961361d565b506040805180820190915260cb54815260cc54602082015290565b61096c61113c565b610976600061193a565b565b606654600090600190811614156109a15760405162461bcd60e51b815260040161049990613e0c565b60ce546001600160401b03166109ba6020850185613d1b565b6001600160401b0316146109e05760405162461bcd60e51b815260040161049990613d36565b6109ec6107018461198c565b610a085760405162461bcd60e51b815260040161049990613e3f565b610a156020840184613d1b565b610a20906001613d76565b60ce805467ffffffffffffffff19166001600160401b0392909216919091179055610750610a516040850185613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b757610a8e60608302860136819003810190613df0565b81526020019060010190610a71565b600054610100900460ff1615808015610abd5750600054600160ff909116105b80610ad75750303b158015610ad7575060005460ff166001145b610b3a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610499565b6000805460ff191660011790558015610b5d576000805461ff0019166101001790555b610b688260006119c0565b610b718461193a565b610b7c60ca86611870565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610be6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610c495760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b6044820152606401610499565b60cd546001600160801b031615610ca25760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a65646044820152606401610499565b610cad60ca83611196565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d156020870187613e67565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610d449190613d1b565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610db45760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610499565b610e53610dc46020850185613746565b602085013583610dd76040880188613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e19925050506060890189613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a9892505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610cfc565b610e8061113c565b6001600160a01b038116610ee55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610499565b6104ab8161193a565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f659190613c4a565b6001600160a01b0316336001600160a01b031614610f955760405162461bcd60e51b815260040161049990613c67565b60665419811960665419161461100e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610499565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016105d0565b6001600160a01b0381166110d35760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610499565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b61119e613637565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b8451811015611364578481815181106111e5576111e5613ec8565b6020026020010151935060006112108560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b03908116911681141561127c5760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b6044820152606401610499565b602086015161128b8286613ede565b6112959190613f06565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b0392831617905590945081166112e05785516112d9908690611bd3565b945061130c565b60208601516001600160801b031661130c576113096113028760000151611c6a565b8690611bd3565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a25050808061135c90613f28565b9150506111ca565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016113d39190613f43565b60405160208183030381529060405280519060200120604051602001611403929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820181905260038501549091906001600160801b0316806114945760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a65646044820152606401610499565b60006114a08580613fad565b90506001600160401b038111156114b9576114b9613a0b565b6040519080825280602002602001820160405280156114e2578160200160208202803683370190505b50905060005b6114f28680613fad565b90508110156116cb576115456115088780613fad565b8381811061151857611518613ec8565b90506040020180360381019061152e9190613ff6565b805160009081526020918201519091526040902090565b82828151811061155757611557613ec8565b602090810291909101015280156115ee5781611574600183614012565b8151811061158457611584613ec8565b602002602001015160001c8282815181106115a1576115a1613ec8565b602002602001015160001c116115ee5760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b6044820152606401610499565b600088600001600084848151811061160857611608613ec8565b6020908102919091018101518252810191909152604001600020546001600160801b03169050806116765760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b6044820152606401610499565b6116a96116838880613fad565b8481811061169357611693613ec8565b9050604002018036038101906113029190613ff6565b94506116b58185614012565b93505080806116c390613f28565b9150506114e8565b506116f96116d884611c6a565b6040805180820190915260018a0154815260028a0154602082015290611bd3565b925060008061172c8886611715368b90038b0160208c01614098565b611727368c90038c0160a08d01613ff6565b611cf9565b915091508161177d5760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c656400006044820152606401610499565b806117c15760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b6044820152606401610499565b60038901546064906117e5906001600160801b03600160801b8204811691166140d7565b6117ef919061411c565b6001600160801b0316841015955050505050505b9392505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b03821611156118dc5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b6064820152608401610499565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b8161193484826106cc565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f826040516020016113d39190614142565b6065546001600160a01b03161580156119e157506001600160a01b03821615155b611a635760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610499565b6066819055604051818152339060008051602061434d8339815191529060200160405180910390a2611a9482611045565b5050565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611ad8906034016040516020818303038152906040528688611e58565b9150915081611b225760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610499565b6000611b2d82611e81565b9050600080611b628a604051602001611b4891815260200190565b604051602081830303815290604052888560400151611e58565b9150915081611bb35760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610499565b611bc4611bbf82611f45565b611f58565b9b9a5050505050505050505050565b611bdb61361d565b611be3613657565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611c2257611c24565bfe5b5080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610499565b505092915050565b611c7261361d565b8151158015611c8357506020820151155b15611ca1575050604080518082019091526000808252602082015290565b60405180604001604052808360000151815260200160008051602061436d8339815191528460200151611cd4919061421a565b611cec9060008051602061436d833981519152614012565b905292915050565b919050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611d4157611d41613ec8565b60200201518951600160200201518a60200151600060028110611d6657611d66613ec8565b60200201518b60200151600160028110611d8257611d82613ec8565b602090810291909101518c518d830151604051611ddf9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611e02919061421a565b9050611e4a611e146113028884611f87565b611e1c612003565b611e40611e3185611e2b6120c3565b90611f87565b611e3a8c6120e4565b90611bd3565b886201d4c0612168565b909890975095505050505050565b600060606000611e678661238c565b9050611e748186866123be565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611eae83612499565b90506040518060800160405280611ede83600081518110611ed157611ed1613ec8565b60200260200101516124ac565b8152602001611ef983600181518110611ed157611ed1613ec8565b8152602001611f2183600281518110611f1457611f14613ec8565b60200260200101516124b3565b8152602001611f3c83600381518110611f1457611f14613ec8565b90529392505050565b6060610cfc611f5383612555565b612582565b6000806000602084511115611f6e576020611f71565b83515b60209485015194036008029390931c9392505050565b611f8f61361d565b611f97613675565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611c22575080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610499565b61200b613693565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6120cb61361d565b5060408051808201909152600181526002602082015290565b6120ec61361d565b6000808061210860008051602061436d8339815191528661421a565b90505b6121148161260d565b909350915060008051602061436d83398151915282830983141561214e576040805180820190915290815260208101919091529392505050565b60008051602061436d83398151915260018208905061210b565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061219a6136b8565b60005b600281101561235f5760006121b382600661422e565b90508482600281106121c7576121c7613ec8565b602002015151836121d983600061424d565b600c81106121e9576121e9613ec8565b602002015284826002811061220057612200613ec8565b60200201516020015183826001612217919061424d565b600c811061222757612227613ec8565b602002015283826002811061223e5761223e613ec8565b602002015151518361225183600261424d565b600c811061226157612261613ec8565b602002015283826002811061227857612278613ec8565b602002015151600160200201518361229183600361424d565b600c81106122a1576122a1613ec8565b60200201528382600281106122b8576122b8613ec8565b6020020151602001516000600281106122d3576122d3613ec8565b6020020151836122e483600461424d565b600c81106122f4576122f4613ec8565b602002015283826002811061230b5761230b613ec8565b60200201516020015160016002811061232657612326613ec8565b60200201518361233783600561424d565b600c811061234757612347613ec8565b6020020152508061235781613f28565b91505061219d565b506123686136d7565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606081805190602001206040516020016123a891815260200190565b6040516020818303038152906040529050919050565b6000606060006123cd8561268f565b905060008060006123df848a89612789565b815192955090935091501580806123f35750815b61243f5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610499565b60008161245b5760405180602001604052806000815250612487565b6124878661246a600188614012565b8151811061247a5761247a613ec8565b6020026020010151612bad565b919b919a509098505050505050505050565b6060610cfc6124a783612555565b612bd7565b6000610cfc825b60006021826000015111156124da5760405162461bcd60e51b815260040161049990614265565b60008060006124e885612dbd565b9194509250905060008160018111156125035761250361429c565b146125205760405162461bcd60e51b815260040161049990614265565b6000838660200151612532919061424d565b8051909150602084101561087d5760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060600080600061259285612dbd565b9194509250905060008160018111156125ad576125ad61429c565b146125f55760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610499565b612604856020015184846130f3565b95945050505050565b6000808060008051602061436d833981519152600360008051602061436d8339815191528660008051602061436d833981519152888909090890506000612683827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5260008051602061436d8339815191526131d1565b91959194509092505050565b6060600061269c83612499565b9050600081516001600160401b038111156126b9576126b9613a0b565b6040519080825280602002602001820160405280156126fe57816020015b60408051808201909152606080825260208201528152602001906001900390816126d75790505b50905060005b825181101561278157600061273184838151811061272457612724613ec8565b6020026020010151612582565b9050604051806040016040528082815260200161274d83612499565b81525083838151811061276257612762613ec8565b602002602001018190525050808061277990613f28565b915050612704565b509392505050565b6000606081808061279987613279565b905060008690506000806127c0604051806040016040528060608152602001606081525090565b60005b8c51811015612b85578c81815181106127de576127de613ec8565b6020026020010151915082846127f4919061424d565b935061280160018861424d565b965083612859578151805160209091012085146128545760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610499565b612916565b8151516020116128bb578151805160209091012085146128545760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610499565b846128c983600001516133b3565b146129165760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610499565b6129226010600161424d565b826020015151141561299b57855184141561293c57612b85565b600086858151811061295057612950613ec8565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061297b5761297b613ec8565b6020026020010151905061298e816133db565b9650600194505050612b73565b60028260200151511415612b2b5760006129b483613411565b90506000816000815181106129cb576129cb613ec8565b016020015160f81c905060006129e26002836142b2565b6129ed9060026142d4565b905060006129fe848360ff16613435565b90506000612a0c8b8a613435565b90506000612a1a838361346b565b905060ff851660021480612a31575060ff85166003145b15612a6b57808351148015612a465750808251145b15612a5857612a55818b61424d565b99505b50600160ff1b9950612b85945050505050565b60ff85161580612a7e575060ff85166001145b15612ad45782518114612a9e5750600160ff1b9950612b85945050505050565b612ac58860200151600181518110612ab857612ab8613ec8565b60200260200101516133db565b9a509750612b73945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610499565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610499565b80612b7d81613f28565b9150506127c3565b50600160ff1b841486612b988786613435565b909e909d50909b509950505050505050505050565b60208101518051606091610cfc91612bc790600190614012565b8151811061272457612724613ec8565b6060600080612be584612dbd565b91935090915060019050816001811115612c0157612c0161429c565b14612c485760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610499565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612c615790505090506000835b8651811015612db25760208210612cfa5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610499565b600080612d376040518060400160405280858c60000151612d1b9190614012565b8152602001858c60200151612d30919061424d565b9052612dbd565b509150915060405180604001604052808383612d53919061424d565b8152602001848b60200151612d68919061424d565b815250858581518110612d7d57612d7d613ec8565b6020908102919091010152612d9360018561424d565b9350612d9f818361424d565b612da9908461424d565b92505050612c8e565b508152949350505050565b600080600080846000015111612e105760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610499565b6020840151805160001a607f8111612e355760006001600094509450945050506130ec565b60b78111612ead576000612e4a608083614012565b905080876000015111612e9b5760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610499565b600195509350600092506130ec915050565b60bf8111612f97576000612ec260b783614012565b905080876000015111612f175760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610499565b600183015160208290036101000a9004612f31818361424d565b885111612f7b5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610499565b612f8682600161424d565b96509450600093506130ec92505050565b60f7811161300c576000612fac60c083614012565b905080876000015111612ffb5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610499565b6001955093508492506130ec915050565b600061301960f783614012565b90508087600001511161306e5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610499565b600183015160208290036101000a9004613088818361424d565b8851116130d05760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610499565b6130db82600161424d565b96509450600193506130ec92505050565b9193909250565b60606000826001600160401b0381111561310f5761310f613a0b565b6040519080825280601f01601f191660200182016040528015613139576020820181803683370190505b50905080516000141561314d579050611803565b6000613159858761424d565b90506020820160005b61316d6020876142f7565b8110156131a4578251825261318360208461424d565b925061319060208361424d565b91508061319c81613f28565b915050613162565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6000806131dc6136d7565b6131e46136f5565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611c2257508261326e5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610499565b505195945050505050565b606060008251600261328b919061422e565b6001600160401b038111156132a2576132a2613a0b565b6040519080825280601f01601f1916602001820160405280156132cc576020820181803683370190505b50905060005b83518110156133ac5760048482815181106132ef576132ef613ec8565b01602001516001600160f81b031916901c8261330c83600261422e565b8151811061331c5761331c613ec8565b60200101906001600160f81b031916908160001a905350601084828151811061334757613347613ec8565b0160200151613359919060f81c6142b2565b60f81b8261336883600261422e565b61337390600161424d565b8151811061338357613383613ec8565b60200101906001600160f81b031916908160001a905350806133a481613f28565b9150506132d2565b5092915050565b60006020825110156133c757506020015190565b81806020019051810190610cfc919061430b565b600060606020836000015110156133fc576133f5836134e7565b9050613408565b61340583612582565b90505b611803816133b3565b6060610cfc613430836020015160008151811061272457612724613ec8565b613279565b6060825182106134545750604080516020810190915260008152610cfc565b61180383838486516134669190614012565b6134f2565b6000805b80845111801561347f5750808351115b80156134d0575082818151811061349857613498613ec8565b602001015160f81c60f81b6001600160f81b0319168482815181106134bf576134bf613ec8565b01602001516001600160f81b031916145b1561180357806134df81613f28565b91505061346f565b6060610cfc82613607565b60608161350081601f61424d565b101561351e5760405162461bcd60e51b815260040161049990614324565b82613529838261424d565b10156135475760405162461bcd60e51b815260040161049990614324565b613551828461424d565b845110156135955760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610499565b6060821580156135b457604051915060008252602082016040526135fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156135ed5780518352602092830192016135d5565b5050858452601f01601f1916604052505b50949350505050565b6060610cfc8260200151600084600001516130f3565b604051806040016040528060008152602001600081525090565b604051806040016040528061364a61361d565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806136a6613713565b81526020016136b3613713565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104ab57600080fd5b60006020828403121561375857600080fd5b813561180381613731565b60006020828403121561377557600080fd5b5035919050565b60006060828403121561378e57600080fd5b50919050565b6000602082840312156137a657600080fd5b81356001600160401b038111156137bc57600080fd5b610e538482850161377c565b600060c0828403121561378e57600080fd5b600060e0828403121561378e57600080fd5b60008060e083850312156137ff57600080fd5b61380984846137c8565b915060c08301356001600160401b0381111561382457600080fd5b613830858286016137da565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611cf457600080fd5b60006020828403121561387757600080fd5b6118038261384e565b60006080828403121561378e57600080fd5b60008060008061010085870312156138a957600080fd5b6138b386866137c8565b935060c08501356001600160401b03808211156138cf57600080fd5b6138db88838901613880565b945060e08701359150808211156138f157600080fd5b818701915087601f83011261390557600080fd5b81358181111561391457600080fd5b88602082850101111561392657600080fd5b95989497505060200194505050565b60006020828403121561394757600080fd5b813560ff8116811461180357600080fd5b6000806040838503121561396b57600080fd5b82356001600160401b038082111561398257600080fd5b61398e8683870161377c565b935060208501359150808211156139a457600080fd5b50613830858286016137da565b600080600080608085870312156139c757600080fd5b6139d08561384e565b935060208501356139e081613731565b925060408501356139f081613731565b91506060850135613a0081613731565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a4357613a43613a0b565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613a7157613a71613a0b565b604052919050565b600060408284031215613a8b57600080fd5b613a93613a21565b9050813581526020820135602082015292915050565b600060608284031215613abb57600080fd5b613ac3613a21565b9050613acf8383613a79565b8152613add6040830161384e565b602082015292915050565b80356001600160401b0381168114611cf457600080fd5b60008060408385031215613b1257600080fd5b82356001600160401b0380821115613b2957600080fd5b818501915085601f830112613b3d57600080fd5b8135602082821115613b5157613b51613a0b565b613b5f818360051b01613a49565b82815281810193506060928302850182019289841115613b7e57600080fd5b948201945b83861015613ba457613b958a87613aa9565b85529485019493820193613b83565b509550613bb2878201613ae8565b9450505050509250929050565b803563ffffffff81168114611cf457600080fd5b60008060408385031215613be657600080fd5b613bef83613bbf565b9150613bfd60208401613ae8565b90509250929050565b60008060e08385031215613c1957600080fd5b613c2384846137c8565b915060c08301356001600160401b03811115613c3e57600080fd5b61383085828601613880565b600060208284031215613c5c57600080fd5b815161180381613731565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613cc357600080fd5b8151801515811461180357600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613d2d57600080fd5b61180382613ae8565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613d9857613d98613d60565b01949350505050565b6000808335601e19843603018112613db857600080fd5b8301803591506001600160401b03821115613dd257600080fd5b6020019150606081023603821315613de957600080fd5b9250929050565b600060608284031215613e0257600080fd5b6118038383613aa9565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613e7957600080fd5b61180382613bbf565b6000808335601e19843603018112613e9957600080fd5b8301803591506001600160401b03821115613eb357600080fd5b602001915036819003821315613de957600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613efe57613efe613d60565b039392505050565b60006001600160801b03828116848216808303821115613d9857613d98613d60565b6000600019821415613f3c57613f3c613d60565b5060010190565b60c0810163ffffffff613f5584613bbf565b168252613f6460208401613ae8565b6001600160401b03808216602085015280613f8160408701613ae8565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e19843603018112613fc457600080fd5b8301803591506001600160401b03821115613fde57600080fd5b6020019150600681901b3603821315613de957600080fd5b60006040828403121561400857600080fd5b6118038383613a79565b60008282101561402457614024613d60565b500390565b600082601f83011261403a57600080fd5b604051604081018181106001600160401b038211171561405c5761405c613a0b565b806040525080604084018581111561407357600080fd5b845b8181101561408d578035835260209283019201614075565b509195945050505050565b6000608082840312156140aa57600080fd5b6140b2613a21565b6140bc8484614029565b81526140cb8460408501614029565b60208201529392505050565b60006001600160801b03828116848216811515828404821116156140fd576140fd613d60565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061413657614136614106565b92169190910492915050565b60006020808352608083016001600160401b038061415f87613ae8565b168386015261416f838701613ae8565b604082821681880152808801359150601e1988360301821261419057600080fd5b908701908135838111156141a357600080fd5b6060935083810236038913156141b857600080fd5b87840184905293849052908401926000919060a088015b8184101561420d578535815286860135878201526001600160801b036141f684880161384e565b1681840152948401946001939093019284016141cf565b9998505050505050505050565b60008261422957614229614106565b500690565b600081600019048311821515161561424857614248613d60565b500290565b6000821982111561426057614260613d60565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff8316806142c5576142c5614106565b8060ff84160691505092915050565b600060ff821660ff8416808210156142ee576142ee613d60565b90039392505050565b60008261430657614306614106565b500490565b60006020828403121561431d57600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212208d5a00bdfaa5c82d49e9710d06eeebb3a877dc10568c3e210691372ed37183ab64736f6c634300080c0033","sourceMap":"1185:6345:128:-:0;;;2233:53;;;;;;;;;-1:-1:-1;2257:22:128;:20;:22::i;:::-;1185:6345;;5388:279:1;5456:13;;;;;;;5455:14;5447:66;;;;-1:-1:-1;;;5447:66:1;;216:2:136;5447:66:1;;;198:21:136;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:136;;;338:37;392:19;;5447:66:1;;;;;;;;5527:12;;5542:15;5527:12;;;:30;5523:138;;;5573:12;:30;;-1:-1:-1;;5573:30:1;5588:15;5573:30;;;;;;5622:28;;564:36:136;;;5622:28:1;;552:2:136;537:18;5622:28:1;;;;;;;5523:138;5388:279::o;422:184:136:-;1185:6345:128;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106101845760003560e01c8063715018a6116100d9578063d5d4bb5a11610087578063d5d4bb5a1461036c578063dd64766e1461037f578063e0f5d9f014610392578063ef024458146103bd578063f2fde38b146103c4578063f4db0571146103d7578063fabc1cbc146103df57600080fd5b8063715018a6146102f457806382616b7b146102fc578063886f11951461030f5780638da5cb5b1461032257806390540c3714610333578063b128aeee14610346578063b3a9e53b1461035957600080fd5b80632db52ea5116101365780632db52ea5146102425780632f65284e146102555780634afa71b914610276578063595c6a671461028e5780635ac86ab7146102965780635c975abb146102c95780636f5b9918146102d157600080fd5b80630510c1911461018957806306aba0e1146101a857806310d67a2f146101cd578063136439dd146101e25780631df9e1d2146101f55780631fb4d41114610208578063245a7bfc1461021b575b600080fd5b610191600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b03909116815260200161019f565b6101e06101db366004613746565b6103f2565b005b6101e06101f0366004613763565b6104ae565b6101e0610203366004613794565b6105db565b6101e06102163660046137ec565b6106cc565b60ce5461023590600160401b90046001600160a01b031681565b60405161019f919061383a565b6101e0610250366004613865565b610755565b610268610263366004613892565b610768565b60405190815260200161019f565b60cd54600160801b90046001600160801b03166101b5565b6101e0610887565b6102b96102a4366004613935565b606654600160ff9092169190911b9081161490565b604051901515815260200161019f565b606654610268565b6102d9610941565b6040805182518152602092830151928101929092520161019f565b6101e0610964565b6101e061030a366004613958565b610978565b606554610235906001600160a01b031681565b6033546001600160a01b0316610235565b6101e06103413660046139b1565b610a9d565b6101e0610354366004613aff565b610bed565b610268610367366004613bd3565b610cd1565b61026861037a366004613c06565b610d02565b6101b561038d366004613763565b610e5b565b60ce546103a5906001600160401b031681565b6040516001600160401b03909116815260200161019f565b60646101b5565b6101e06103d2366004613746565b610e78565b610191600081565b6101e06103ed366004613763565b610eee565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104699190613c4a565b6001600160a01b0316336001600160a01b0316146104a25760405162461bcd60e51b815260040161049990613c67565b60405180910390fd5b6104ab81611045565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906104de90339060040161383a565b602060405180830381865afa1580156104fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f9190613cb1565b61053b5760405162461bcd60e51b815260040161049990613cd3565b606654818116146105af5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610499565b6066819055604051818152339060008051602061434d833981519152906020015b60405180910390a250565b6105e361113c565b60ce546001600160401b03166105fc6020830183613d1b565b6001600160401b0316146106225760405162461bcd60e51b815260040161049990613d36565b61062f6020820182613d1b565b61063a906001613d76565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104ab61066b6040830183613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b7576106a860608302860136819003810190613df0565b8152602001906001019061068b565b505050505060ca61119690919063ffffffff16565b606654600190600290811614156106f55760405162461bcd60e51b815260040161049990613e0c565b61070a6107018461139f565b60ca9084611420565b6107265760405162461bcd60e51b815260040161049990613e3f565b6107506107366020850185613e67565b6107466040860160208701613d1b565b8560a0013561180a565b505050565b61075d61113c565b6104ab60ca82611870565b60006060850135158015906107805750608085013515155b6107c75760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610499565b60006097816107d96020890189613e67565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906108089190613d1b565b6001600160401b0316815260208101919091526040016000205490508061087357826108685760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610499565b610873868585611929565b61087d8686610d02565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906108b790339060040161383a565b602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190613cb1565b6109145760405162461bcd60e51b815260040161049990613cd3565b6000196066819055604051908152339060008051602061434d8339815191529060200160405180910390a2565b61094961361d565b506040805180820190915260cb54815260cc54602082015290565b61096c61113c565b610976600061193a565b565b606654600090600190811614156109a15760405162461bcd60e51b815260040161049990613e0c565b60ce546001600160401b03166109ba6020850185613d1b565b6001600160401b0316146109e05760405162461bcd60e51b815260040161049990613d36565b6109ec6107018461198c565b610a085760405162461bcd60e51b815260040161049990613e3f565b610a156020840184613d1b565b610a20906001613d76565b60ce805467ffffffffffffffff19166001600160401b0392909216919091179055610750610a516040850185613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b757610a8e60608302860136819003810190613df0565b81526020019060010190610a71565b600054610100900460ff1615808015610abd5750600054600160ff909116105b80610ad75750303b158015610ad7575060005460ff166001145b610b3a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610499565b6000805460ff191660011790558015610b5d576000805461ff0019166101001790555b610b688260006119c0565b610b718461193a565b610b7c60ca86611870565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610be6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610c495760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b6044820152606401610499565b60cd546001600160801b031615610ca25760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a65646044820152606401610499565b610cad60ca83611196565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d156020870187613e67565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610d449190613d1b565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610db45760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610499565b610e53610dc46020850185613746565b602085013583610dd76040880188613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e19925050506060890189613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a9892505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610cfc565b610e8061113c565b6001600160a01b038116610ee55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610499565b6104ab8161193a565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f659190613c4a565b6001600160a01b0316336001600160a01b031614610f955760405162461bcd60e51b815260040161049990613c67565b60665419811960665419161461100e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610499565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016105d0565b6001600160a01b0381166110d35760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610499565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b61119e613637565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b8451811015611364578481815181106111e5576111e5613ec8565b6020026020010151935060006112108560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b03908116911681141561127c5760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b6044820152606401610499565b602086015161128b8286613ede565b6112959190613f06565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b0392831617905590945081166112e05785516112d9908690611bd3565b945061130c565b60208601516001600160801b031661130c576113096113028760000151611c6a565b8690611bd3565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a25050808061135c90613f28565b9150506111ca565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016113d39190613f43565b60405160208183030381529060405280519060200120604051602001611403929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820181905260038501549091906001600160801b0316806114945760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a65646044820152606401610499565b60006114a08580613fad565b90506001600160401b038111156114b9576114b9613a0b565b6040519080825280602002602001820160405280156114e2578160200160208202803683370190505b50905060005b6114f28680613fad565b90508110156116cb576115456115088780613fad565b8381811061151857611518613ec8565b90506040020180360381019061152e9190613ff6565b805160009081526020918201519091526040902090565b82828151811061155757611557613ec8565b602090810291909101015280156115ee5781611574600183614012565b8151811061158457611584613ec8565b602002602001015160001c8282815181106115a1576115a1613ec8565b602002602001015160001c116115ee5760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b6044820152606401610499565b600088600001600084848151811061160857611608613ec8565b6020908102919091018101518252810191909152604001600020546001600160801b03169050806116765760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b6044820152606401610499565b6116a96116838880613fad565b8481811061169357611693613ec8565b9050604002018036038101906113029190613ff6565b94506116b58185614012565b93505080806116c390613f28565b9150506114e8565b506116f96116d884611c6a565b6040805180820190915260018a0154815260028a0154602082015290611bd3565b925060008061172c8886611715368b90038b0160208c01614098565b611727368c90038c0160a08d01613ff6565b611cf9565b915091508161177d5760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c656400006044820152606401610499565b806117c15760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b6044820152606401610499565b60038901546064906117e5906001600160801b03600160801b8204811691166140d7565b6117ef919061411c565b6001600160801b0316841015955050505050505b9392505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b03821611156118dc5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b6064820152608401610499565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b8161193484826106cc565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f826040516020016113d39190614142565b6065546001600160a01b03161580156119e157506001600160a01b03821615155b611a635760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610499565b6066819055604051818152339060008051602061434d8339815191529060200160405180910390a2611a9482611045565b5050565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611ad8906034016040516020818303038152906040528688611e58565b9150915081611b225760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610499565b6000611b2d82611e81565b9050600080611b628a604051602001611b4891815260200190565b604051602081830303815290604052888560400151611e58565b9150915081611bb35760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610499565b611bc4611bbf82611f45565b611f58565b9b9a5050505050505050505050565b611bdb61361d565b611be3613657565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611c2257611c24565bfe5b5080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610499565b505092915050565b611c7261361d565b8151158015611c8357506020820151155b15611ca1575050604080518082019091526000808252602082015290565b60405180604001604052808360000151815260200160008051602061436d8339815191528460200151611cd4919061421a565b611cec9060008051602061436d833981519152614012565b905292915050565b919050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611d4157611d41613ec8565b60200201518951600160200201518a60200151600060028110611d6657611d66613ec8565b60200201518b60200151600160028110611d8257611d82613ec8565b602090810291909101518c518d830151604051611ddf9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611e02919061421a565b9050611e4a611e146113028884611f87565b611e1c612003565b611e40611e3185611e2b6120c3565b90611f87565b611e3a8c6120e4565b90611bd3565b886201d4c0612168565b909890975095505050505050565b600060606000611e678661238c565b9050611e748186866123be565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611eae83612499565b90506040518060800160405280611ede83600081518110611ed157611ed1613ec8565b60200260200101516124ac565b8152602001611ef983600181518110611ed157611ed1613ec8565b8152602001611f2183600281518110611f1457611f14613ec8565b60200260200101516124b3565b8152602001611f3c83600381518110611f1457611f14613ec8565b90529392505050565b6060610cfc611f5383612555565b612582565b6000806000602084511115611f6e576020611f71565b83515b60209485015194036008029390931c9392505050565b611f8f61361d565b611f97613675565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611c22575080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610499565b61200b613693565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6120cb61361d565b5060408051808201909152600181526002602082015290565b6120ec61361d565b6000808061210860008051602061436d8339815191528661421a565b90505b6121148161260d565b909350915060008051602061436d83398151915282830983141561214e576040805180820190915290815260208101919091529392505050565b60008051602061436d83398151915260018208905061210b565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061219a6136b8565b60005b600281101561235f5760006121b382600661422e565b90508482600281106121c7576121c7613ec8565b602002015151836121d983600061424d565b600c81106121e9576121e9613ec8565b602002015284826002811061220057612200613ec8565b60200201516020015183826001612217919061424d565b600c811061222757612227613ec8565b602002015283826002811061223e5761223e613ec8565b602002015151518361225183600261424d565b600c811061226157612261613ec8565b602002015283826002811061227857612278613ec8565b602002015151600160200201518361229183600361424d565b600c81106122a1576122a1613ec8565b60200201528382600281106122b8576122b8613ec8565b6020020151602001516000600281106122d3576122d3613ec8565b6020020151836122e483600461424d565b600c81106122f4576122f4613ec8565b602002015283826002811061230b5761230b613ec8565b60200201516020015160016002811061232657612326613ec8565b60200201518361233783600561424d565b600c811061234757612347613ec8565b6020020152508061235781613f28565b91505061219d565b506123686136d7565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606081805190602001206040516020016123a891815260200190565b6040516020818303038152906040529050919050565b6000606060006123cd8561268f565b905060008060006123df848a89612789565b815192955090935091501580806123f35750815b61243f5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610499565b60008161245b5760405180602001604052806000815250612487565b6124878661246a600188614012565b8151811061247a5761247a613ec8565b6020026020010151612bad565b919b919a509098505050505050505050565b6060610cfc6124a783612555565b612bd7565b6000610cfc825b60006021826000015111156124da5760405162461bcd60e51b815260040161049990614265565b60008060006124e885612dbd565b9194509250905060008160018111156125035761250361429c565b146125205760405162461bcd60e51b815260040161049990614265565b6000838660200151612532919061424d565b8051909150602084101561087d5760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060600080600061259285612dbd565b9194509250905060008160018111156125ad576125ad61429c565b146125f55760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610499565b612604856020015184846130f3565b95945050505050565b6000808060008051602061436d833981519152600360008051602061436d8339815191528660008051602061436d833981519152888909090890506000612683827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5260008051602061436d8339815191526131d1565b91959194509092505050565b6060600061269c83612499565b9050600081516001600160401b038111156126b9576126b9613a0b565b6040519080825280602002602001820160405280156126fe57816020015b60408051808201909152606080825260208201528152602001906001900390816126d75790505b50905060005b825181101561278157600061273184838151811061272457612724613ec8565b6020026020010151612582565b9050604051806040016040528082815260200161274d83612499565b81525083838151811061276257612762613ec8565b602002602001018190525050808061277990613f28565b915050612704565b509392505050565b6000606081808061279987613279565b905060008690506000806127c0604051806040016040528060608152602001606081525090565b60005b8c51811015612b85578c81815181106127de576127de613ec8565b6020026020010151915082846127f4919061424d565b935061280160018861424d565b965083612859578151805160209091012085146128545760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610499565b612916565b8151516020116128bb578151805160209091012085146128545760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610499565b846128c983600001516133b3565b146129165760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610499565b6129226010600161424d565b826020015151141561299b57855184141561293c57612b85565b600086858151811061295057612950613ec8565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061297b5761297b613ec8565b6020026020010151905061298e816133db565b9650600194505050612b73565b60028260200151511415612b2b5760006129b483613411565b90506000816000815181106129cb576129cb613ec8565b016020015160f81c905060006129e26002836142b2565b6129ed9060026142d4565b905060006129fe848360ff16613435565b90506000612a0c8b8a613435565b90506000612a1a838361346b565b905060ff851660021480612a31575060ff85166003145b15612a6b57808351148015612a465750808251145b15612a5857612a55818b61424d565b99505b50600160ff1b9950612b85945050505050565b60ff85161580612a7e575060ff85166001145b15612ad45782518114612a9e5750600160ff1b9950612b85945050505050565b612ac58860200151600181518110612ab857612ab8613ec8565b60200260200101516133db565b9a509750612b73945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610499565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610499565b80612b7d81613f28565b9150506127c3565b50600160ff1b841486612b988786613435565b909e909d50909b509950505050505050505050565b60208101518051606091610cfc91612bc790600190614012565b8151811061272457612724613ec8565b6060600080612be584612dbd565b91935090915060019050816001811115612c0157612c0161429c565b14612c485760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610499565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612c615790505090506000835b8651811015612db25760208210612cfa5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610499565b600080612d376040518060400160405280858c60000151612d1b9190614012565b8152602001858c60200151612d30919061424d565b9052612dbd565b509150915060405180604001604052808383612d53919061424d565b8152602001848b60200151612d68919061424d565b815250858581518110612d7d57612d7d613ec8565b6020908102919091010152612d9360018561424d565b9350612d9f818361424d565b612da9908461424d565b92505050612c8e565b508152949350505050565b600080600080846000015111612e105760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610499565b6020840151805160001a607f8111612e355760006001600094509450945050506130ec565b60b78111612ead576000612e4a608083614012565b905080876000015111612e9b5760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610499565b600195509350600092506130ec915050565b60bf8111612f97576000612ec260b783614012565b905080876000015111612f175760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610499565b600183015160208290036101000a9004612f31818361424d565b885111612f7b5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610499565b612f8682600161424d565b96509450600093506130ec92505050565b60f7811161300c576000612fac60c083614012565b905080876000015111612ffb5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610499565b6001955093508492506130ec915050565b600061301960f783614012565b90508087600001511161306e5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610499565b600183015160208290036101000a9004613088818361424d565b8851116130d05760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610499565b6130db82600161424d565b96509450600193506130ec92505050565b9193909250565b60606000826001600160401b0381111561310f5761310f613a0b565b6040519080825280601f01601f191660200182016040528015613139576020820181803683370190505b50905080516000141561314d579050611803565b6000613159858761424d565b90506020820160005b61316d6020876142f7565b8110156131a4578251825261318360208461424d565b925061319060208361424d565b91508061319c81613f28565b915050613162565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6000806131dc6136d7565b6131e46136f5565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611c2257508261326e5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610499565b505195945050505050565b606060008251600261328b919061422e565b6001600160401b038111156132a2576132a2613a0b565b6040519080825280601f01601f1916602001820160405280156132cc576020820181803683370190505b50905060005b83518110156133ac5760048482815181106132ef576132ef613ec8565b01602001516001600160f81b031916901c8261330c83600261422e565b8151811061331c5761331c613ec8565b60200101906001600160f81b031916908160001a905350601084828151811061334757613347613ec8565b0160200151613359919060f81c6142b2565b60f81b8261336883600261422e565b61337390600161424d565b8151811061338357613383613ec8565b60200101906001600160f81b031916908160001a905350806133a481613f28565b9150506132d2565b5092915050565b60006020825110156133c757506020015190565b81806020019051810190610cfc919061430b565b600060606020836000015110156133fc576133f5836134e7565b9050613408565b61340583612582565b90505b611803816133b3565b6060610cfc613430836020015160008151811061272457612724613ec8565b613279565b6060825182106134545750604080516020810190915260008152610cfc565b61180383838486516134669190614012565b6134f2565b6000805b80845111801561347f5750808351115b80156134d0575082818151811061349857613498613ec8565b602001015160f81c60f81b6001600160f81b0319168482815181106134bf576134bf613ec8565b01602001516001600160f81b031916145b1561180357806134df81613f28565b91505061346f565b6060610cfc82613607565b60608161350081601f61424d565b101561351e5760405162461bcd60e51b815260040161049990614324565b82613529838261424d565b10156135475760405162461bcd60e51b815260040161049990614324565b613551828461424d565b845110156135955760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610499565b6060821580156135b457604051915060008252602082016040526135fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156135ed5780518352602092830192016135d5565b5050858452601f01601f1916604052505b50949350505050565b6060610cfc8260200151600084600001516130f3565b604051806040016040528060008152602001600081525090565b604051806040016040528061364a61361d565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806136a6613713565b81526020016136b3613713565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104ab57600080fd5b60006020828403121561375857600080fd5b813561180381613731565b60006020828403121561377557600080fd5b5035919050565b60006060828403121561378e57600080fd5b50919050565b6000602082840312156137a657600080fd5b81356001600160401b038111156137bc57600080fd5b610e538482850161377c565b600060c0828403121561378e57600080fd5b600060e0828403121561378e57600080fd5b60008060e083850312156137ff57600080fd5b61380984846137c8565b915060c08301356001600160401b0381111561382457600080fd5b613830858286016137da565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611cf457600080fd5b60006020828403121561387757600080fd5b6118038261384e565b60006080828403121561378e57600080fd5b60008060008061010085870312156138a957600080fd5b6138b386866137c8565b935060c08501356001600160401b03808211156138cf57600080fd5b6138db88838901613880565b945060e08701359150808211156138f157600080fd5b818701915087601f83011261390557600080fd5b81358181111561391457600080fd5b88602082850101111561392657600080fd5b95989497505060200194505050565b60006020828403121561394757600080fd5b813560ff8116811461180357600080fd5b6000806040838503121561396b57600080fd5b82356001600160401b038082111561398257600080fd5b61398e8683870161377c565b935060208501359150808211156139a457600080fd5b50613830858286016137da565b600080600080608085870312156139c757600080fd5b6139d08561384e565b935060208501356139e081613731565b925060408501356139f081613731565b91506060850135613a0081613731565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a4357613a43613a0b565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613a7157613a71613a0b565b604052919050565b600060408284031215613a8b57600080fd5b613a93613a21565b9050813581526020820135602082015292915050565b600060608284031215613abb57600080fd5b613ac3613a21565b9050613acf8383613a79565b8152613add6040830161384e565b602082015292915050565b80356001600160401b0381168114611cf457600080fd5b60008060408385031215613b1257600080fd5b82356001600160401b0380821115613b2957600080fd5b818501915085601f830112613b3d57600080fd5b8135602082821115613b5157613b51613a0b565b613b5f818360051b01613a49565b82815281810193506060928302850182019289841115613b7e57600080fd5b948201945b83861015613ba457613b958a87613aa9565b85529485019493820193613b83565b509550613bb2878201613ae8565b9450505050509250929050565b803563ffffffff81168114611cf457600080fd5b60008060408385031215613be657600080fd5b613bef83613bbf565b9150613bfd60208401613ae8565b90509250929050565b60008060e08385031215613c1957600080fd5b613c2384846137c8565b915060c08301356001600160401b03811115613c3e57600080fd5b61383085828601613880565b600060208284031215613c5c57600080fd5b815161180381613731565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613cc357600080fd5b8151801515811461180357600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613d2d57600080fd5b61180382613ae8565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613d9857613d98613d60565b01949350505050565b6000808335601e19843603018112613db857600080fd5b8301803591506001600160401b03821115613dd257600080fd5b6020019150606081023603821315613de957600080fd5b9250929050565b600060608284031215613e0257600080fd5b6118038383613aa9565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613e7957600080fd5b61180382613bbf565b6000808335601e19843603018112613e9957600080fd5b8301803591506001600160401b03821115613eb357600080fd5b602001915036819003821315613de957600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613efe57613efe613d60565b039392505050565b60006001600160801b03828116848216808303821115613d9857613d98613d60565b6000600019821415613f3c57613f3c613d60565b5060010190565b60c0810163ffffffff613f5584613bbf565b168252613f6460208401613ae8565b6001600160401b03808216602085015280613f8160408701613ae8565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e19843603018112613fc457600080fd5b8301803591506001600160401b03821115613fde57600080fd5b6020019150600681901b3603821315613de957600080fd5b60006040828403121561400857600080fd5b6118038383613a79565b60008282101561402457614024613d60565b500390565b600082601f83011261403a57600080fd5b604051604081018181106001600160401b038211171561405c5761405c613a0b565b806040525080604084018581111561407357600080fd5b845b8181101561408d578035835260209283019201614075565b509195945050505050565b6000608082840312156140aa57600080fd5b6140b2613a21565b6140bc8484614029565b81526140cb8460408501614029565b60208201529392505050565b60006001600160801b03828116848216811515828404821116156140fd576140fd613d60565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061413657614136614106565b92169190910492915050565b60006020808352608083016001600160401b038061415f87613ae8565b168386015261416f838701613ae8565b604082821681880152808801359150601e1988360301821261419057600080fd5b908701908135838111156141a357600080fd5b6060935083810236038913156141b857600080fd5b87840184905293849052908401926000919060a088015b8184101561420d578535815286860135878201526001600160801b036141f684880161384e565b1681840152948401946001939093019284016141cf565b9998505050505050505050565b60008261422957614229614106565b500690565b600081600019048311821515161561424857614248613d60565b500290565b6000821982111561426057614260613d60565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff8316806142c5576142c5614106565b8060ff84160691505092915050565b600060ff821660ff8416808210156142ee576142ee613d60565b90039392505050565b60008261430657614306614106565b500490565b60006020828403121561431d57600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212208d5a00bdfaa5c82d49e9710d06eeebb3a877dc10568c3e210691372ed37183ab64736f6c634300080c0033","sourceMap":"1185:6345:128:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1707:50;;1756:1;1707:50;;;;;186:4:136;174:17;;;156:36;;144:2;129:18;1707:50:128;;;;;;;;6909:106;6984:24;;-1:-1:-1;;;;;6984:24:128;6909:106;;;-1:-1:-1;;;;;367:32:136;;;349:51;;337:2;322:18;6909:106:128;203:203:136;5826:138:45;;;;;;:::i;:::-;;:::i;:::-;;3832:392;;;;;;:::i;:::-;;:::i;5681:272:128:-;;;;;;:::i;:::-;;:::i;4396:387::-;;;;;;:::i;:::-;;:::i;2080:25::-;;;;;-1:-1:-1;;;2080:25:128;;-1:-1:-1;;;;;2080:25:128;;;;;;;;;;:::i;6129:150::-;;;;;;:::i;:::-;;:::i;2347:670:117:-;;;;;;:::i;:::-;;:::i;:::-;;;4264:25:136;;;4252:2;4237:18;2347:670:117;4118:177:136;7136:114:128;7215:28;;-1:-1:-1;;;7215:28:128;;-1:-1:-1;;;;;7215:28:128;7136:114;;4299:136:45;;;:::i;5606:149::-;;;;;;:::i;:::-;5724:7;;5695:1;:10;;;;;;;;5724:14;;;5723:24;;5606:149;;;;4739:14:136;;4732:22;4714:41;;4702:2;4687:18;5606:149:45;4574:187:136;5418:87:45;5491:7;;5418:87;;6693:103:128;;;:::i;:::-;;;;5164:13:136;;5146:32;;5234:4;5222:17;;;5216:24;5194:20;;;5187:54;;;;5119:18;6693:103:128;4948:299:136;2071:101:0;;;:::i;3679:482:128:-;;;;;;:::i;:::-;;:::i;1825:37:45:-;;;;;-1:-1:-1;;;;;1825:37:45;;;1441:85:0;1513:6;;-1:-1:-1;;;;;1513:6:0;1441:85;;2567:377:128;;;;;;:::i;:::-;;:::i;3134:336::-;;;;;;:::i;:::-;;:::i;1748:155:117:-;;;;;;:::i;:::-;;:::i;3258:550::-;;;;;;:::i;:::-;;:::i;6419:145:128:-;;;;;;:::i;:::-;;:::i;1948:34::-;;;;;-1:-1:-1;;;;;1948:34:128;;;;;;-1:-1:-1;;;;;10616:31:136;;;10598:50;;10586:2;10571:18;1948:34:128;10454:200:136;7402:126:128;697:3:120;7402:126:128;;2321:198:0;;;;;;:::i;:::-;;:::i;1572:52:128:-;;1623:1;1572:52;;4911:437:45;;;;;;:::i;:::-;;:::i;5826:138::-;2285:14;;;;;;;;;-1:-1:-1;;;;;2285:14:45;-1:-1:-1;;;;;2285:23:45;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2271:39:45;:10;-1:-1:-1;;;;;2271:39:45;;2263:94;;;;-1:-1:-1;;;2263:94:45;;;;;;;:::i;:::-;;;;;;;;;5920:37:::1;5939:17;5920:18;:37::i;:::-;5826:138:::0;:::o;3832:392::-;2125:14;;:35;;-1:-1:-1;;;2125:35:45;;-1:-1:-1;;;;;2125:14:45;;;;:23;;:35;;2149:10;;2125:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2117:88;;;;-1:-1:-1;;;2117:88:45;;;;;;;:::i;:::-;4064:7:::1;::::0;4034:25;;::::1;4033:38;4025:107;;;::::0;-1:-1:-1;;;4025:107:45;;12505:2:136;4025:107:45::1;::::0;::::1;12487:21:136::0;12544:2;12524:18;;;12517:30;12583:34;12563:18;;;12556:62;-1:-1:-1;;;12634:18:136;;;12627:54;12698:19;;4025:107:45::1;12303:420:136::0;4025:107:45::1;4142:7;:25:::0;;;4182:35:::1;::::0;4264:25:136;;;4189:10:45::1;::::0;-1:-1:-1;;;;;;;;;;;4182:35:45;4252:2:136;4237:18;4182:35:45::1;;;;;;;;3832:392:::0;:::o;5681:272:128:-;1334:13:0;:11;:13::i;:::-;5808:20:128::1;::::0;-1:-1:-1;;;;;5808:20:128::1;5794:10;;::::0;::::1;:7:::0;:10:::1;:::i;:::-;-1:-1:-1::0;;;;;5794:34:128::1;;5786:63;;;;-1:-1:-1::0;;;5786:63:128::1;;;;;;;:::i;:::-;5883:10;;::::0;::::1;:7:::0;:10:::1;:::i;:::-;:14;::::0;5896:1:::1;5883:14;:::i;:::-;5860:20;:37:::0;;-1:-1:-1;;5860:37:128::1;-1:-1:-1::0;;;;;5860:37:128;;;::::1;::::0;;;::::1;::::0;;5908:38:::1;5928:17;;::::0;::::1;::::0;::::1;:::i;:::-;5908:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;:12;:19;;:38;;;;:::i;4396:387::-:0;5724:7:45;;1756:1:128;;5695:10:45;5724:14;;;5723:24;2767:14;2759:52;;;;-1:-1:-1;;;2759:52:45;;;;;;;:::i;:::-;4608:66:128::1;4636:22;:7;:20;:22::i;:::-;4608:12;::::0;4660:13;4608:27:::1;:66::i;:::-;4600:93;;;;-1:-1:-1::0;;;4600:93:128::1;;;;;;;:::i;:::-;4704:72;4719:16;;::::0;::::1;:7:::0;:16:::1;:::i;:::-;4737:19;::::0;;;::::1;::::0;::::1;;:::i;:::-;4758:7;:17;;;4704:14;:72::i;:::-;4396:387:::0;;;:::o;6129:150::-;1334:13:0;:11;:13::i;:::-;6221:51:128::1;:12;6253:18:::0;6221:31:::1;:51::i;2347:670:117:-:0;2531:7;2571:27;;;;:41;;;;:83;;-1:-1:-1;2616:24:117;;;;:38;;2571:83;2550:154;;;;-1:-1:-1;;;2550:154:117;;15540:2:136;2550:154:117;;;15522:21:136;15579:2;15559:18;;;15552:30;-1:-1:-1;;;15598:18:136;;;15591:54;15662:18;;2550:154:117;15338:348:136;2550:154:117;2715:17;2735;2715;2753:16;;;;:7;:16;:::i;:::-;2735:35;;;;;;;;;;;;;;;:56;2771:7;:19;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2735:56:117;;;;;;;;;;;;-1:-1:-1;2735:56:117;;;-1:-1:-1;2806:23:117;2802:154;;2853:21;2845:49;;;;-1:-1:-1;;;2845:49:117;;15893:2:136;2845:49:117;;;15875:21:136;15932:2;15912:18;;;15905:30;-1:-1:-1;;;15951:18:136;;;15944:45;16006:18;;2845:49:117;15691:339:136;2845:49:117;2909:36;2926:7;2935:9;;2909:16;:36::i;:::-;2973:37;2989:7;2998:11;2973:15;:37::i;:::-;2966:44;2347:670;-1:-1:-1;;;;;;2347:670:117:o;4299:136:45:-;2125:14;;:35;;-1:-1:-1;;;2125:35:45;;-1:-1:-1;;;;;2125:14:45;;;;:23;;:35;;2149:10;;2125:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2117:88;;;;-1:-1:-1;;;2117:88:45;;;;;;;:::i;:::-;-1:-1:-1;;4349:7:45::1;:27:::0;;;4391:37:::1;::::0;4264:25:136;;;4398:10:45::1;::::0;-1:-1:-1;;;;;;;;;;;4391:37:45;4252:2:136;4237:18;4391:37:45::1;;;;;;;4299:136::o:0;6693:103:128:-;6734:20;;:::i;:::-;-1:-1:-1;6766:23:128;;;;;;;;;6773:16;6766:23;;;;;;;;;;6693:103::o;2071:101:0:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;3679:482:128:-;5724:7:45;;1623:1:128;;5695::45;5724:14;;;5723:24;2767:14;2759:52;;;;-1:-1:-1;;;2759:52:45;;;;;;;:::i;:::-;3913:20:128::1;::::0;-1:-1:-1;;;;;3913:20:128::1;3899:10;;::::0;::::1;:7:::0;:10:::1;:::i;:::-;-1:-1:-1::0;;;;;3899:34:128::1;;3891:63;;;;-1:-1:-1::0;;;3891:63:128::1;;;;;;;:::i;:::-;3972:66;4000:22;:7;:20;:22::i;3972:66::-;3964:93;;;;-1:-1:-1::0;;;3964:93:128::1;;;;;;;:::i;:::-;4091:10;;::::0;::::1;:7:::0;:10:::1;:::i;:::-;:14;::::0;4104:1:::1;4091:14;:::i;:::-;4068:20;:37:::0;;-1:-1:-1;;4068:37:128::1;-1:-1:-1::0;;;;;4068:37:128;;;::::1;::::0;;;::::1;::::0;;4116:38:::1;4136:17;;::::0;::::1;::::0;::::1;:::i;:::-;4116:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;2567:377:::0;3111:19:1;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:1;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:1;1476:19:3;:23;;;3219:66:1;;-1:-1:-1;3268:12:1;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:1;;16237:2:136;3157:201:1;;;16219:21:136;16276:2;16256:18;;;16249:30;16315:34;16295:18;;;16288:62;-1:-1:-1;;;16366:18:136;;;16359:44;16420:19;;3157:201:1;16035:410:136;3157:201:1;3368:12;:16;;-1:-1:-1;;3368:16:1;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:1;;;;;3394:65;2755:47:128::1;2773:15;2000:1:45;2755:17:128;:47::i;:::-;2812:32;2831:12;2812:18;:32::i;:::-;2854:48;:12;2886:15:::0;2854:31:::1;:48::i;:::-;2913:10;:24:::0;;-1:-1:-1;;;;;;;;2913:24:128::1;-1:-1:-1::0;;;;;;;;2913:24:128;::::1;;;::::0;;3479:99:1;;;;3529:5;3513:21;;-1:-1:-1;;3513:21:1;;;3553:14;;-1:-1:-1;156:36:136;;3553:14:1;;144:2:136;129:18;3553:14:1;;;;;;;3479:99;3101:483;2567:377:128;;;;:::o;3134:336::-;2170:10;;-1:-1:-1;;;2170:10:128;;-1:-1:-1;;;;;2170:10:128;2156;:24;2148:61;;;;-1:-1:-1;;;2148:61:128;;16851:2:136;2148:61:128;;;16833:21:136;16890:2;16870:18;;;16863:30;-1:-1:-1;;;16909:18:136;;;16902:54;16973:18;;2148:61:128;16649:348:136;2148:61:128;3302:24;;-1:-1:-1;;;;;3302:24:128::1;:29:::0;3294:74:::1;;;::::0;-1:-1:-1;;;3294:74:128;;17204:2:136;3294:74:128::1;::::0;::::1;17186:21:136::0;;;17223:18;;;17216:30;17282:34;17262:18;;;17255:62;17334:18;;3294:74:128::1;17002:356:136::0;3294:74:128::1;3379:30;:12;3399:9:::0;3379:19:::1;:30::i;:::-;3419:20;:44:::0;;-1:-1:-1;;3419:44:128::1;-1:-1:-1::0;;;;;3419:44:128;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;3134:336:128:o;1748:155:117:-;1856:27;;;1830:7;1856:27;;;:17;:27;;;;;;;;-1:-1:-1;;;;;1856:40:117;;;;;;;;;;1748:155;;;;;:::o;3258:550::-;3404:7;;3447:17;3404:7;3465:16;;;;:7;:16;:::i;:::-;3447:35;;;;;;;;;;;;;;;:56;3483:7;:19;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3447:56:117;-1:-1:-1;;;;;3447:56:117;;;;;;;;;;;;;3427:76;;3535:7;:17;;;3522:9;:30;3514:66;;;;-1:-1:-1;;;3514:66:117;;17565:2:136;3514:66:117;;;17547:21:136;17604:2;17584:18;;;17577:30;-1:-1:-1;;;17623:18:136;;;17616:53;17686:18;;3514:66:117;17363:347:136;3514:66:117;3598:203;3628:18;;;;:11;:18;:::i;:::-;3660:22;;;;3696:9;3719:28;;;;3660:11;3719:28;:::i;:::-;3598:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3761:30:117;;-1:-1:-1;;;3761:30:117;;;;;:::i;:::-;3598:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3598:16:117;;-1:-1:-1;;;3598:203:117:i;:::-;3591:210;3258:550;-1:-1:-1;;;;3258:550:117:o;6419:145:128:-;6489:7;2584:35:120;;;6515:12:128;2584:35:120;;;;;;-1:-1:-1;;;;;2584:35:120;6515:42:128;2462:164:120;2321:198:0;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:0;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:0;;18443:2:136;2401:73:0::1;::::0;::::1;18425:21:136::0;18482:2;18462:18;;;18455:30;18521:34;18501:18;;;18494:62;-1:-1:-1;;;18572:18:136;;;18565:36;18618:19;;2401:73:0::1;18241:402:136::0;2401:73:0::1;2484:28;2503:8;2484:18;:28::i;4911:437:45:-:0;2285:14;;;;;;;;;-1:-1:-1;;;;;2285:14:45;-1:-1:-1;;;;;2285:23:45;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2271:39:45;:10;-1:-1:-1;;;;;2271:39:45;;2263:94;;;;-1:-1:-1;;;2263:94:45;;;;;;;:::i;:::-;5164:7:::1;;5163:8;5141:15;5140:16;5128:7;;5127:8;5126:31;5125:47;5104:150;;;::::0;-1:-1:-1;;;5104:150:45;;18850:2:136;5104:150:45::1;::::0;::::1;18832:21:136::0;18889:2;18869:18;;;18862:30;18928:34;18908:18;;;18901:62;-1:-1:-1;;;18979:18:136;;;18972:54;19043:19;;5104:150:45::1;18648:420:136::0;5104:150:45::1;5264:7;:25:::0;;;5304:37:::1;::::0;4264:25:136;;;5313:10:45::1;::::0;5304:37:::1;::::0;4252:2:136;4237:18;5304:37:45::1;4118:177:136::0;6024:360:45;-1:-1:-1;;;;;6127:40:45;;6106:160;;;;-1:-1:-1;;;6106:160:45;;19275:2:136;6106:160:45;;;19257:21:136;19314:2;19294:18;;;19287:30;19353:34;19333:18;;;19326:62;19424:34;19404:18;;;19397:62;-1:-1:-1;;;19475:19:136;;;19468:40;19525:19;;6106:160:45;19073:477:136;6106:160:45;6299:14;;6281:52;;;-1:-1:-1;;;;;6299:14:45;;;19815:34:136;;19885:15;;;19880:2;19865:18;;19858:43;6281:52:45;;19750:18:136;6281:52:45;;;;;;;6343:14;:34;;-1:-1:-1;;;;;;6343:34:45;-1:-1:-1;;;;;6343:34:45;;;;;;;;;;6024:360::o;1599:130:0:-;1513:6;;-1:-1:-1;;;;;1513:6:0;929:10:4;1662:23:0;1654:68;;;;-1:-1:-1;;;1654:68:0;;20114:2:136;1654:68:0;;;20096:21:136;;;20133:18;;;20126:30;20192:34;20172:18;;;20165:62;20244:18;;1654:68:0;19912:356:136;2828:1048:120;2918:24;;:::i;:::-;2953:38;;;;;;;;;2983:8;;;2953:38;;;;;;;;;;;3026:16;;;;-1:-1:-1;;;;;3026:16:120;2953:27;3053:746;3077:9;:16;3073:1;:20;3053:746;;;3125:9;3135:1;3125:12;;;;;;;;:::i;:::-;;;;;;;3114:23;;3152:18;3173:29;:8;:15;;;10534:9:71;;10473:16;10524:20;;;10580:4;10576:13;;;10570:20;10557:34;;;10629:4;10616:18;;;10404:246;3173:29:120;3216:21;3240:35;;;;;;;;;;;;3298:15;;;;3152:50;;-1:-1:-1;;;;;;3240:35:120;;;;3298:32;;;;3290:67;;;;-1:-1:-1;;;3290:67:120;;20607:2:136;3290:67:120;;;20589:21:136;20646:2;20626:18;;;20619:30;-1:-1:-1;;;20665:18:136;;;20658:52;20727:18;;3290:67:120;20405:346:136;3290:67:120;3422:15;;;;3389:30;3406:13;3389:14;:30;:::i;:::-;:48;;;;:::i;:::-;3490:15;;;;;3452:23;:35;;;;;;;;;;;:53;;-1:-1:-1;;;;;;3452:53:120;-1:-1:-1;;;;;3452:53:120;;;;;;3372:65;;-1:-1:-1;3524:18:120;;3520:205;;3583:15;;3571:28;;:6;;:11;:28::i;:::-;3562:37;;3520:205;;;3624:15;;;;-1:-1:-1;;;;;3624:20:120;3620:105;;3673:37;3685:24;:8;:15;;;:22;:24::i;:::-;3673:6;;:11;:37::i;:::-;3664:46;;3620:105;3772:15;;;;;3744:44;;-1:-1:-1;;;;;367:32:136;;;349:51;;3760:10:120;;3744:44;;322:18:136;3744:44:120;;;;;;;3100:699;;3095:3;;;;;:::i;:::-;;;;3053:746;;;-1:-1:-1;3809:16:120;;;:33;;-1:-1:-1;;;;;;3809:33:120;-1:-1:-1;;;;;3809:33:120;;;;;;;;;;3852:17;;-1:-1:-1;3852:8:120;;:17;;;;-1:-1:-1;3852:17:120;;;;;;;-1:-1:-1;;2828:1048:120:o;1127:188:119:-;1198:7;939:41;1297:7;1286:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;1276:30;;;;;;1234:73;;;;;;;;22278:25:136;;;22334:2;22319:18;;22312:34;22266:2;22251:18;;22104:248;1234:73:119;;;;;;;;;;;;;1224:84;;;;;;1217:91;;1127:188;;;:::o;4236:1467:120:-;4435:19;;;;;;;;;4388:4;4435:19;;;;;;;;;4481:16;;;;4388:4;;4435:19;-1:-1:-1;;;;;4481:16:120;4516:11;4508:56;;;;-1:-1:-1;;;4508:56:120;;22559:2:136;4508:56:120;;;22541:21:136;;;22578:18;;;22571:30;22637:34;22617:18;;;22610:62;22689:18;;4508:56:120;22357:356:136;4508:56:120;4575:38;4630:30;:13;;:30;:::i;:::-;:37;;-1:-1:-1;;;;;4616:52:120;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4616:52:120;;4575:93;;4684:9;4679:592;4703:30;:13;;:30;:::i;:::-;:37;;4699:1;:41;4679:592;;;4788:47;:30;:13;;:30;:::i;:::-;4819:1;4788:33;;;;;;;:::i;:::-;;;;;;:45;;;;;;;;;;:::i;:::-;10534:9:71;;10473:16;10524:20;;;10580:4;10576:13;;;10570:20;10557:34;;;10629:4;10616:18;;;10404:246;4788:47:120;4761:21;4783:1;4761:24;;;;;;;;:::i;:::-;;;;;;;;;;:74;4854:6;;4850:149;;4932:21;4954:5;4958:1;4954;:5;:::i;:::-;4932:28;;;;;;;;:::i;:::-;;;;;;;4924:37;;4896:21;4918:1;4896:24;;;;;;;;:::i;:::-;;;;;;;4888:33;;:73;4880:104;;;;-1:-1:-1;;;4880:104:120;;23861:2:136;4880:104:120;;;23843:21:136;23900:2;23880:18;;;23873:30;-1:-1:-1;;;23919:18:136;;;23912:48;23977:18;;4880:104:120;23659:342:136;4880:104:120;5013:22;5038:4;:23;;:49;5062:21;5084:1;5062:24;;;;;;;;:::i;:::-;;;;;;;;;;;;5038:49;;;;;;;;;;-1:-1:-1;5038:49:120;;-1:-1:-1;;;;;5038:49:120;;-1:-1:-1;5110:19:120;5102:56;;;;-1:-1:-1;;;5102:56:120;;24208:2:136;5102:56:120;;;24190:21:136;24247:2;24227:18;;;24220:30;-1:-1:-1;;;24266:18:136;;;24259:54;24330:18;;5102:56:120;24006:348:136;5102:56:120;5179:43;5188:30;:13;;:30;:::i;:::-;5219:1;5188:33;;;;;;;:::i;:::-;;;;;;5179:43;;;;;;;;;;:::i;:::-;5173:49;-1:-1:-1;5236:24:120;5246:14;5236:24;;:::i;:::-;;;4747:524;4742:3;;;;;:::i;:::-;;;;4679:592;;;;5287:27;5301:12;:3;:10;:12::i;:::-;5287:13;;;;;;;;;:8;;;:13;;;;;;;;;;;;;:27::i;:::-;5281:33;-1:-1:-1;5326:22:120;;5387:86;5418:7;5281:33;5387:86;;;;;;;5432:19;;;5387:86;:::i;:::-;;;;;;;;5453:19;;;5387:86;:::i;:::-;:30;:86::i;:::-;5325:148;;;;5492:17;5484:60;;;;-1:-1:-1;;;5484:60:120;;25608:2:136;5484:60:120;;;25590:21:136;25647:2;25627:18;;;25620:30;25686:32;25666:18;;;25659:60;25736:18;;5484:60:120;25406:354:136;5484:60:120;5562:16;5554:49;;;;-1:-1:-1;;;5554:49:120;;25967:2:136;5554:49:120;;;25949:21:136;26006:2;25986:18;;;25979:30;-1:-1:-1;;;26025:18:136;;;26018:50;26085:18;;5554:49:120;25765:344:136;5554:49:120;5651:20;;;;697:3;;5632:39;;-1:-1:-1;;;;;;;;5651:20:120;;;;;5632:16;:39;:::i;:::-;5631:65;;;;:::i;:::-;-1:-1:-1;;;;;5621:75:120;:6;:75;;5614:82;;;;;;;4236:1467;;;;;;:::o;6380:224:117:-;6479:27;;;;;;;:17;:27;;;;;;;;-1:-1:-1;;;;;6479:40:117;;;;;;;;;;;;:52;;;6547:50;4264:25:136;;;6479:40:117;;:27;6547:50;;4237:18:136;6547:50:117;;;;;;;6380:224;;;:::o;1987:303:120:-;697:3;-1:-1:-1;;;;;2093:40:120;;;;2085:94;;;;-1:-1:-1;;;2085:94:120;;26931:2:136;2085:94:120;;;26913:21:136;26970:2;26950:18;;;26943:30;27009:34;26989:18;;;26982:62;-1:-1:-1;;;27060:18:136;;;27053:39;27109:19;;2085:94:120;26729:405:136;2085:94:120;2190:20;;;:38;;-1:-1:-1;;;;;2190:38:120;;;-1:-1:-1;;;2190:38:120;;;;;;;;;;2244:39;;;;-1:-1:-1;;2244:39:120;1987:303;;:::o;5000:349:128:-;5256:27;5303:39;5319:7;5256:27;5303:15;:39::i;:::-;5143:206;5000:349;;;:::o;2673:187:0:-;2765:6;;;-1:-1:-1;;;;;2781:17:0;;;-1:-1:-1;;;;;;2781:17:0;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;913:190:118:-;984:7;720:43;1085:7;1074:19;;;;;;;;:::i;2943:441:45:-;3077:14;;-1:-1:-1;;;;;3077:14:45;3069:37;:79;;;;-1:-1:-1;;;;;;3110:38:45;;;;3069:79;3048:197;;;;-1:-1:-1;;;3048:197:45;;28809:2:136;3048:197:45;;;28791:21:136;28848:2;28828:18;;;28821:30;28887:34;28867:18;;;28860:62;28958:34;28938:18;;;28931:62;-1:-1:-1;;;29009:19:136;;;29002:38;29057:19;;3048:197:45;28607:475:136;3048:197:45;3255:7;:26;;;3296:36;;4264:25:136;;;3303:10:45;;-1:-1:-1;;;;;;;;;;;3296:36:45;4252:2:136;4237:18;3296:36:45;;;;;;;3342:35;3361:15;3342:18;:35::i;:::-;2943:441;;:::o;4378:840:117:-;4695:24;;-1:-1:-1;;29236:2:136;29232:15;;;29228:53;4695:24:117;;;29216:66:136;4586:7:117;;;;;;4670:79;;29298:12:136;;4695:24:117;;;;;;;;;;;;4721:16;4739:9;4670:24;:79::i;:::-;4605:144;;;;4768:6;4760:41;;;;-1:-1:-1;;;4760:41:117;;29523:2:136;4760:41:117;;;29505:21:136;29562:2;29542:18;;;29535:30;-1:-1:-1;;;29581:18:136;;;29574:52;29643:18;;4760:41:117;29321:346:136;4760:41:117;4812:38;4853:53;4883:22;4853:29;:53::i;:::-;4812:94;;4918:18;4938:27;4981:89;5023:4;5006:22;;;;;;29801:19:136;;29845:2;29836:12;;29672:182;5006:22:117;;;;;;;;;;;;;5030:18;5050:7;:19;;;4981:24;:89::i;:::-;4917:153;;;;5089:13;5081:54;;;;-1:-1:-1;;;5081:54:117;;30061:2:136;5081:54:117;;;30043:21:136;30100:2;30080:18;;;30073:30;30139;30119:18;;;30112:58;30187:18;;5081:54:117;29859:352:136;5081:54:117;5153:58;5171:39;5195:14;5171:23;:39::i;:::-;5153:17;:58::i;:::-;5146:65;4378:840;-1:-1:-1;;;;;;;;;;;4378:840:117:o;4823:615:71:-;4898:16;;:::i;:::-;4926:23;;:::i;:::-;4970:4;;4959:15;;:8;4995:4;;;;4984:8;;;:15;5020:4;;5009:8;;;;:15;;;;5045:4;;;;5034:8;;;:15;-1:-1:-1;;5225:1:71;5219:4;4959:15;5209:1;5202:4;5195:5;5191:16;5180:53;5169:64;-1:-1:-1;5169:64:71;5330:48;;;;5303:75;;5330:48;5355:9;5303:75;;5406:7;5398:33;;;;-1:-1:-1;;;5398:33:71;;30418:2:136;5398:33:71;;;30400:21:136;30457:2;30437:18;;;30430:30;-1:-1:-1;;;30476:18:136;;;30469:43;30529:18;;5398:33:71;30216:337:136;5398:33:71;4916:522;;4823:615;;;;:::o;4461:295::-;4518:14;;:::i;:::-;4600:3;;:8;:20;;;;-1:-1:-1;4612:3:71;;;;:8;4600:20;4596:154;;;-1:-1:-1;;4643:13:71;;;;;;;;;-1:-1:-1;4643:13:71;;;;;;;;4461:295::o;4596:154::-;4694:45;;;;;;;;4702:1;:3;;;4694:45;;;;-1:-1:-1;;;;;;;;;;;4721:1:71;:3;;;:16;;;;:::i;:::-;4707:31;;-1:-1:-1;;;;;;;;;;;4707:31:71;:::i;:::-;4694:45;;4687:52;4461:295;-1:-1:-1;;4461:295:71:o;4596:154::-;4461:295;;;:::o;6046:814:120:-;6245:22;6269:21;6302:13;2037:77:71;6404:7:120;6413:3;:5;;;6420:3;:5;;;6427;:7;;;6435:1;6427:10;;;;;;;:::i;:::-;;;;;6439:7;;6447:1;6439:10;;;;6451:5;:7;;;6459:1;6451:10;;;;;;;:::i;:::-;;;;;6463:5;:7;;;6471:1;6463:10;;;;;;;:::i;:::-;;;;;;;;;;6475:7;;6484;;;;6366:143;;;;;;;;;;;31028:19:136;;;31072:2;31063:12;;31056:28;;;;31109:2;31100:12;;31093:28;;;;31146:2;31137:12;;31130:28;;;;31183:3;31174:13;;31167:29;;;;31221:3;31212:13;;31205:29;31259:3;31250:13;;31243:29;31297:3;31288:13;;31281:29;31335:3;31326:13;;31319:29;31373:3;31364:13;;30675:708;6366:143:120;;;;;;;;;;;;;6339:184;;;;;;6318:215;;:234;;;;:::i;:::-;6302:250;-1:-1:-1;6603:250:120;6634:33;6645:21;:3;6302:250;6645:14;:21::i;6634:33::-;6681:22;:20;:22::i;:::-;6717:67;6746:37;6777:5;6746:19;:17;:19::i;:::-;:30;;:37::i;:::-;6717:23;6732:7;6717:14;:23::i;:::-;:28;;:67::i;:::-;6798:5;891:6;6603:17;:250::i;:::-;6563:290;;;;-1:-1:-1;6046:814:120;-1:-1:-1;;;;;;6046:814:120:o;1669:266:108:-;1790:12;1804:19;1835:16;1854:19;1868:4;1854:13;:19::i;:::-;1835:38;;1890;1909:3;1914:6;1922:5;1890:18;:38::i;:::-;1883:45;;;;;1669:266;;;;;;:::o;2769:521:102:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2916:32:102;2939:8;2916:22;:32::i;:::-;2870:78;;2978:305;;;;;;;;3014:42;3040:12;3053:1;3040:15;;;;;;;;:::i;:::-;;;;;;;3014:25;:42::i;:::-;2978:305;;;;3083:42;3109:12;3122:1;3109:15;;;;;;;;:::i;3083:42::-;2978:305;;;;3156:42;3182:12;3195:1;3182:15;;;;;;;;:::i;:::-;;;;;;;3156:25;:42::i;:::-;2978:305;;;;3226:42;3252:12;3265:1;3252:15;;;;;;;;:::i;3226:42::-;2978:305;;2959:324;2769:521;-1:-1:-1;;;2769:521:102:o;3430:123:105:-;3490:12;3521:25;3531:14;3541:3;3531:9;:14::i;:::-;3521:9;:25::i;5846:290:117:-;5917:7;5936:11;5957;5988:2;5971:6;:13;:19;;:40;;6009:2;5971:40;;;5993:6;:13;5971:40;6095:2;6083:15;;;6077:22;6059:12;;6073:1;6055:20;6051:49;;;;;5846:290;-1:-1:-1;;;5846:290:117:o;7084:580:71:-;7156:16;;:::i;:::-;7184:23;;:::i;:::-;7228:3;;7217:14;;:8;7252:3;;;;7241:8;;;:14;7265:8;;;;:12;;;-1:-1:-1;;7452:1:71;7446:4;7217:14;7436:1;7429:4;7422:5;7418:16;7407:53;7396:64;-1:-1:-1;7396:64:71;7557:48;;;;7530:75;7632:7;7624:33;;;;-1:-1:-1;;;7624:33:71;;31590:2:136;7624:33:71;;;31572:21:136;31629:2;31609:18;;;31602:30;-1:-1:-1;;;31648:18:136;;;31641:43;31701:18;;7624:33:71;31388:337:136;4070:128:71;4119:14;;:::i;:::-;-1:-1:-1;4152:39:71;;;;;;;;3635:77;4152:39;;;;;;3752:77;4152:39;;;;;;;;;;;;;;3869:77;4152:39;;3986:77;4152:39;;;;;;;;;;;;;;;4070:128::o;2313:99::-;2359:14;;:::i;:::-;-1:-1:-1;2392:13:71;;;;;;;;;2400:1;2392:13;;2403:1;2392:13;;;;;2313:99::o;11044:451::-;11097:14;;:::i;:::-;11123:12;;;11185:24;-1:-1:-1;;;;;;;;;;;11193:2:71;11185:24;:::i;:::-;11173:36;;11220:239;11259:13;11270:1;11259:10;:13::i;:::-;11247:25;;-1:-1:-1;11247:25:71;-1:-1:-1;;;;;;;;;;;;11336:1:71;11333;11326:24;11318:4;:32;11314:92;;;11378:13;;;;;;;;;;;;;;;;;;;;11044:451;-1:-1:-1;;;11044:451:71:o;11314:92::-;-1:-1:-1;;;;;;;;;;;11434:1:71;11431;11424:24;11420:28;;11220:239;;9189:1112;9397:31;;;;;;;;;;;;;;;;;;9438;;;;;;;;;;;;;;;;9375:4;;;;9397:31;9480:24;;:::i;:::-;9520:9;9515:302;9539:1;9535;:5;9515:302;;;9561:9;9573:5;:1;9577;9573:5;:::i;:::-;9561:17;;9607:2;9610:1;9607:5;;;;;;;:::i;:::-;;;;;:7;9592:5;9598;:1;9607:7;9598:5;:::i;:::-;9592:12;;;;;;;:::i;:::-;;;;:22;9643:2;9646:1;9643:5;;;;;;;:::i;:::-;;;;;:7;;;9628:5;9634:1;9638;9634:5;;;;:::i;:::-;9628:12;;;;;;;:::i;:::-;;;;:22;9679:2;9682:1;9679:5;;;;;;;:::i;:::-;;;;;:7;:10;9664:5;9670;:1;9674;9670:5;:::i;:::-;9664:12;;;;;;;:::i;:::-;;;;:25;9718:2;9721:1;9718:5;;;;;;;:::i;:::-;;;;;:7;9726:1;9718:10;;;;9703:5;9709;:1;9713;9709:5;:::i;:::-;9703:12;;;;;;;:::i;:::-;;;;:25;9757:2;9760:1;9757:5;;;;;;;:::i;:::-;;;;;:7;;;9765:1;9757:10;;;;;;;:::i;:::-;;;;;9742:5;9748;:1;9752;9748:5;:::i;:::-;9742:12;;;;;;;:::i;:::-;;;;:25;9796:2;9799:1;9796:5;;;;;;;:::i;:::-;;;;;:7;;;9804:1;9796:10;;;;;;;:::i;:::-;;;;;9781:5;9787;:1;9791;9787:5;:::i;:::-;9781:12;;;;;;;:::i;:::-;;;;:25;-1:-1:-1;9542:3:71;;;;:::i;:::-;;;;9515:302;;;;9827:21;;:::i;:::-;9858:12;10032:4;10027:3;10012:13;10005:5;10002:1;9990:10;9979:58;10282:6;;9968:69;;10282:11;;;;-1:-1:-1;10265:29:71;;-1:-1:-1;;;;;;;;;;9189:1112:71:o;2191:146:108:-;2255:23;2324:4;2314:15;;;;;;2297:33;;;;;;29801:19:136;;29845:2;29836:12;;29672:182;2297:33:108;;;;;;;;;;;;;2290:40;;2191:146;;;:::o;3187:617:107:-;3308:12;3322:19;3353:23;3379:19;3391:6;3379:11;:19::i;:::-;3353:45;;3409:18;3429:25;3456:16;3476:79;3503:5;3522:4;3540:5;3476:13;:79::i;:::-;3580:19;;3408:147;;-1:-1:-1;3408:147:107;;-1:-1:-1;3408:147:107;-1:-1:-1;3580:24:107;;;3623:21;;;3633:11;3623:21;3615:60;;;;-1:-1:-1;;;3615:60:107;;32238:2:136;3615:60:107;;;32220:21:136;32277:2;32257:18;;;32250:30;32316:28;32296:18;;;32289:56;32362:18;;3615:60:107;32036:350:136;3615:60:107;3686:18;3707:6;:57;;3755:9;;;;;;;;;;;;3707:57;;;3716:36;3730:5;3736:14;3749:1;3736:10;:14;:::i;:::-;3730:21;;;;;;;;:::i;:::-;;;;;;;3716:13;:36::i;:::-;3783:6;;;;-1:-1:-1;3187:617:107;;-1:-1:-1;;;;;;;;;3187:617:107:o;2730:125:105:-;2789:16;2824:24;2833:14;2843:3;2833:9;:14::i;:::-;2824:8;:24::i;5264:122::-;5328:7;5362:16;5374:3;4218:642;4282:7;4323:2;4309:3;:10;;;:16;;4301:55;;;;-1:-1:-1;;;4301:55:105;;;;;;;:::i;:::-;4368:18;4388;4408:20;4432:18;4446:3;4432:13;:18::i;:::-;4367:83;;-1:-1:-1;4367:83:105;-1:-1:-1;4367:83:105;-1:-1:-1;4481:21:105;4469:8;:33;;;;;;;;:::i;:::-;;4461:72;;;;-1:-1:-1;;;4461:72:105;;;;;;;:::i;:::-;4544:11;4568:10;4558:3;:7;;;:20;;;;:::i;:::-;4639:10;;4544:34;;-1:-1:-1;4741:2:105;4726:18;;4723:100;;;4792:2;4788:19;;;4783:3;4779:29;4770:39;;4850:3;4218:642;-1:-1:-1;;;;;;4218:642:105:o;796:224::-;-1:-1:-1;;;;;;;;;;;;;;;;;972:41:105;;;;;;;;990:10;;972:41;;933:12;;;972:41;;;;;;;;796:224::o;2986:313::-;3048:12;3073:18;3093;3113:20;3137:18;3151:3;3137:13;:18::i;:::-;3072:83;;-1:-1:-1;3072:83:105;-1:-1:-1;3072:83:105;-1:-1:-1;3186:21:105;3174:8;:33;;;;;;;;:::i;:::-;;3166:70;;;;-1:-1:-1;;;3166:70:105;;33080:2:136;3166:70:105;;;33062:21:136;33119:2;33099:18;;;33092:30;-1:-1:-1;;;33138:18:136;;;33131:54;33202:18;;3166:70:105;32878:348:136;3166:70:105;3254:38;3260:3;:7;;;3269:10;3281;3254:5;:38::i;:::-;3247:45;2986:313;-1:-1:-1;;;;;2986:313:105:o;11616:433:71:-;11670:7;;;-1:-1:-1;;;;;;;;;;;11801:1:71;-1:-1:-1;;;;;;;;;;;11785:1:71;-1:-1:-1;;;;;;;;;;;11769:1:71;11766;11759:24;11752:47;11745:70;11730:85;;11912:9;11924:91;11931:4;11937:65;-1:-1:-1;;;;;;;;;;;11924:6:71;:91::i;:::-;12034:4;;11912:103;;-1:-1:-1;11616:433:71;;-1:-1:-1;;;11616:433:71:o;9383:495:107:-;9447:25;9484:36;9523:30;9546:6;9523:22;:30::i;:::-;9484:69;;9563:23;9604:5;:12;-1:-1:-1;;;;;9589:28:107;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;9589:28:107;;;;;;;;;;;;;;;;9563:54;;9633:9;9628:221;9652:5;:12;9648:1;:16;9628:221;;;9685:20;9708:33;9732:5;9738:1;9732:8;;;;;;;;:::i;:::-;;;;;;;9708:23;:33::i;:::-;9685:56;;9766:72;;;;;;;;9786:7;9766:72;;;;9804:31;9827:7;9804:22;:31::i;:::-;9766:72;;;9755:5;9761:1;9755:8;;;;;;;;:::i;:::-;;;;;;:83;;;;9671:178;9666:3;;;;;:::i;:::-;;;;9628:221;;;-1:-1:-1;9866:5:107;9383:495;-1:-1:-1;;;9383:495:107:o;4301:4872::-;4473:19;4506:26;4473:19;;;4639:30;4664:4;4639:24;:30::i;:::-;4620:49;;4680:21;4704:5;4680:29;;4719:23;4756:27;4797;-1:-1:-1;;;;;;;;;;;;;;;;;;;4797:27:107;4911:9;4906:4050;4930:6;:13;4926:1;:17;4906:4050;;;4978:6;4985:1;4978:9;;;;;;;;:::i;:::-;;;;;;;4964:23;;5020:19;5001:38;;;;;:::i;:::-;;-1:-1:-1;5202:15:107;5216:1;5202:15;;:::i;:::-;;-1:-1:-1;5236:20:107;5232:758;;5358:19;;5348:30;;;;;;;:47;;5340:77;;;;-1:-1:-1;;;5340:77:107;;33433:2:136;5340:77:107;;;33415:21:136;33472:2;33452:18;;;33445:30;-1:-1:-1;;;33491:18:136;;;33484:47;33548:18;;5340:77:107;33231:341:136;5340:77:107;5232:758;;;5442:19;;:26;5472:2;-1:-1:-1;5438:552:107;;5609:19;;5599:30;;;;;;;:47;;5570:145;;;;-1:-1:-1;;;5570:145:107;;33779:2:136;5570:145:107;;;33761:21:136;33818:2;33798:18;;;33791:30;33857:29;33837:18;;;33830:57;33904:18;;5570:145:107;33577:351:136;5438:552:107;5894:13;5845:45;5870:11;:19;;;5845:24;:45::i;:::-;:62;5816:159;;;;-1:-1:-1;;;5816:159:107;;34135:2:136;5816:159:107;;;34117:21:136;34174:2;34154:18;;;34147:30;34213:28;34193:18;;;34186:56;34259:18;;5816:159:107;33933:350:136;5816:159:107;886:14;762:2;899:1;886:14;:::i;:::-;6008:11;:19;;;:26;:48;6004:2942;;;6099:3;:10;6080:15;:29;6076:666;;;6261:5;;6076:666;6453:15;6477:3;6481:15;6477:20;;;;;;;;:::i;:::-;;;;;;;;;6471:27;;6453:45;;6520:37;6560:11;:19;;;6580:9;6560:30;;;;;;;;;;:::i;:::-;;;;;;;6520:70;;6628:20;6639:8;6628:10;:20::i;:::-;6612:36;;6692:1;6670:23;;6715:8;;;;6004:2942;1043:1;6766:11;:19;;;:26;:59;6762:2184;;;6845:17;6865:25;6878:11;6865:12;:25::i;:::-;6845:45;;6908:12;6929:4;6934:1;6929:7;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;6955:12:107;6975:10;6984:1;6929:7;6975:10;:::i;:::-;6970:16;;:1;:16;:::i;:::-;6955:31;;7004:26;7033:34;7054:4;7060:6;7033:34;;:20;:34::i;:::-;7004:63;;7085:25;7113:42;7134:3;7139:15;7113:20;:42::i;:::-;7085:70;;7173:26;7202:51;7225:13;7240:12;7202:22;:51::i;:::-;7173:80;-1:-1:-1;7276:26:107;;;1563:1;7276:26;;:55;;-1:-1:-1;7306:25:107;;;1603:1;7306:25;7276:55;7272:1582;;;7408:18;7384:13;:20;:42;:111;;;;;7477:18;7454:12;:19;:41;7384:111;7355:415;;;7710:37;7729:18;7710:37;;:::i;:::-;;;7355:415;-1:-1:-1;;;;1701:12:107;-1:-1:-1;7926:5:107;;-1:-1:-1;;;;;7926:5:107;7272:1582;7960:31;;;;;:65;;-1:-1:-1;7995:30:107;;;1522:1;7995:30;7960:65;7956:898;;;8075:13;:20;8053:18;:42;8049:692;;-1:-1:-1;;;;1701:12:107;-1:-1:-1;8392:5:107;;-1:-1:-1;;;;;8392:5:107;8049:692;8584:34;8595:11;:19;;;8615:1;8595:22;;;;;;;;:::i;:::-;;;;;;;8584:10;:34::i;:::-;8568:50;-1:-1:-1;8666:18:107;-1:-1:-1;8710:8:107;;-1:-1:-1;;;;;8710:8:107;7956:898;8787:48;;-1:-1:-1;;;8787:48:107;;34852:2:136;8787:48:107;;;34834:21:136;34891:2;34871:18;;;34864:30;34930:34;34910:18;;;34903:62;-1:-1:-1;;;34981:18:136;;;34974:36;35027:19;;8787:48:107;34650:402:136;6762:2184:107;8892:39;;-1:-1:-1;;;8892:39:107;;35259:2:136;8892:39:107;;;35241:21:136;35298:2;35278:18;;;35271:30;35337:31;35317:18;;;35310:59;35386:18;;8892:39:107;35057:353:136;6762:2184:107;4945:3;;;;:::i;:::-;;;;4906:4050;;;-1:-1:-1;;;;9046:34:107;;9098:10;9110:42;9131:3;9136:15;9110:20;:42::i;:::-;9090:76;;;;-1:-1:-1;9154:11:107;;-1:-1:-1;4301:4872:107;-1:-1:-1;;;;;;;;;;4301:4872:107:o;11178:177::-;11308:13;;;;11322:20;;11246:19;;11284:64;;11322:24;;11345:1;;11322:24;:::i;:::-;11308:39;;;;;;;;:::i;1172:1406:105:-;1233:16;1262:18;1284:20;1308:18;1322:3;1308:13;:18::i;:::-;1261:65;;-1:-1:-1;1261:65:105;;-1:-1:-1;1357:21:105;;-1:-1:-1;1345:8:105;:33;;;;;;;;:::i;:::-;;1337:69;;;;-1:-1:-1;;;1337:69:105;;35617:2:136;1337:69:105;;;35599:21:136;35656:2;35636:18;;;35629:30;-1:-1:-1;;;35675:18:136;;;35668:53;35738:18;;1337:69:105;35415:347:136;1337:69:105;1832:30;;;295:2;1832:30;;;;;;;;;1809:20;;1832:30;;;;-1:-1:-1;;;;;;;;;;;;;;;;;1832:30:105;;;;;;;;;;;;;;-1:-1:-1;1809:53:105;-1:-1:-1;1873:17:105;1921:10;1941:478;1957:10;;1948:19;;1941:478;;;295:2;1991:9;:27;1983:82;;;;-1:-1:-1;;;1983:82:105;;35969:2:136;1983:82:105;;;35951:21:136;36008:2;35988:18;;;35981:30;36047:34;36027:18;;;36020:62;-1:-1:-1;;;36098:18:136;;;36091:40;36148:19;;1983:82:105;35767:406:136;1983:82:105;2081:18;2101;2125:108;2156:63;;;;;;;;2187:6;2174:3;:10;;;:19;;;;:::i;:::-;2156:63;;;;2210:6;2200:3;:7;;;:16;;;;:::i;:::-;2156:63;;2125:13;:108::i;:::-;2080:153;;;;;2265:67;;;;;;;;2296:10;2283;:23;;;;:::i;:::-;2265:67;;;;2323:6;2313:3;:7;;;:16;;;;:::i;:::-;2265:67;;;2248:3;2252:9;2248:14;;;;;;;;:::i;:::-;;;;;;;;;;:84;2347:14;2360:1;2347:14;;:::i;:::-;;-1:-1:-1;2385:23:105;2398:10;2385;:23;:::i;:::-;2375:33;;;;:::i;:::-;;;1969:450;;1941:478;;;-1:-1:-1;2519:22:105;;2526:3;1172:1406;-1:-1:-1;;;;1172:1406:105:o;7649:2148::-;7751:7;7772;7793:11;7850:1;7837:3;:10;;;:14;7829:51;;;;-1:-1:-1;;;7829:51:105;;36380:2:136;7829:51:105;;;36362:21:136;36419:2;36399:18;;;36392:30;-1:-1:-1;;;36438:18:136;;;36431:54;36502:18;;7829:51:105;36178:348:136;7829:51:105;7905:7;;;;7987:10;;7891:11;7979:19;8032:4;8022:14;;8018:1773;;8089:1;8092;8095:21;8081:36;;;;;;;;;;8018:1773;8148:4;8138:6;:14;8134:1657;;8254:14;8271:13;8280:4;8271:6;:13;:::i;:::-;8254:30;;8320:6;8307:3;:10;;;:19;8299:57;;;;-1:-1:-1;;;8299:57:105;;36733:2:136;8299:57:105;;;36715:21:136;36772:2;36752:18;;;36745:30;-1:-1:-1;;;36791:18:136;;;36784:55;36856:18;;8299:57:105;36531:349:136;8299:57:105;8379:1;;-1:-1:-1;8382:6:105;-1:-1:-1;8390:21:105;;-1:-1:-1;8371:41:105;;-1:-1:-1;;8371:41:105;8134:1657;8443:4;8433:6;:14;8429:1362;;8491:19;8513:13;8522:4;8513:6;:13;:::i;:::-;8491:35;;8562:11;8549:3;:10;;;:24;8541:68;;;;-1:-1:-1;;;8541:68:105;;37087:2:136;8541:68:105;;;37069:21:136;37126:2;37106:18;;;37099:30;37165:33;37145:18;;;37138:61;37216:18;;8541:68:105;36885:355:136;8541:68:105;8755:1;8746:11;;8740:18;8773:2;8769:20;;;8764:3;8760:30;8736:55;;8840:20;8736:55;8777:11;8840:20;:::i;:::-;8827:10;;:33;8819:70;;;;-1:-1:-1;;;8819:70:105;;37447:2:136;8819:70:105;;;37429:21:136;37486:2;37466:18;;;37459:30;-1:-1:-1;;;37505:18:136;;;37498:54;37569:18;;8819:70:105;37245:348:136;8819:70:105;8912:15;8916:11;8912:1;:15;:::i;:::-;8904:55;-1:-1:-1;8929:6:105;-1:-1:-1;8937:21:105;;-1:-1:-1;8904:55:105;;-1:-1:-1;;;8904:55:105;8429:1362;8990:4;8980:6;:14;8976:815;;9093:15;9111:13;9120:4;9111:6;:13;:::i;:::-;9093:31;;9160:7;9147:3;:10;;;:20;9139:56;;;;-1:-1:-1;;;9139:56:105;;37800:2:136;9139:56:105;;;37782:21:136;37839:2;37819:18;;;37812:30;-1:-1:-1;;;37858:18:136;;;37851:53;37921:18;;9139:56:105;37598:347:136;9139:56:105;9218:1;;-1:-1:-1;9221:7:105;-1:-1:-1;9218:1:105;;-1:-1:-1;9210:42:105;;-1:-1:-1;;9210:42:105;8976:815;9309:20;9332:13;9341:4;9332:6;:13;:::i;:::-;9309:36;;9381:12;9368:3;:10;;;:25;9360:67;;;;-1:-1:-1;;;9360:67:105;;38152:2:136;9360:67:105;;;38134:21:136;38191:2;38171:18;;;38164:30;38230:31;38210:18;;;38203:59;38279:18;;9360:67:105;37950:353:136;9360:67:105;9573:1;9564:11;;9558:18;9591:2;9587:21;;;9582:3;9578:31;9554:56;;9659:22;9554:56;9595:12;9659:22;:::i;:::-;9646:10;;:35;9638:70;;;;-1:-1:-1;;;9638:70:105;;38510:2:136;9638:70:105;;;38492:21:136;38549:2;38529:18;;;38522:30;-1:-1:-1;;;38568:18:136;;;38561:52;38630:18;;9638:70:105;38308:346:136;9638:70:105;9731:16;9735:12;9731:1;:16;:::i;:::-;9723:57;-1:-1:-1;9749:7:105;-1:-1:-1;9758:21:105;;-1:-1:-1;9723:57:105;;-1:-1:-1;;;9723:57:105;7649:2148;;;;;;:::o;10052:892::-;10167:12;10191:16;10220:7;-1:-1:-1;;;;;10210:18:105;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10210:18:105;;10191:37;;10242:3;:10;10256:1;10242:15;10238:56;;;10280:3;-1:-1:-1;10273:10:105;;10238:56;10304:11;10318:14;10325:7;10318:4;:14;:::i;:::-;10304:28;-1:-1:-1;10404:2:105;10395:12;;10342;10482:180;10506:12;10516:2;10506:7;:12;:::i;:::-;10502:1;:16;10482:180;;;10579:10;;10566:24;;10618:9;10625:2;10585:3;10618:9;:::i;:::-;;-1:-1:-1;10641:10:105;10649:2;10641:10;;:::i;:::-;;-1:-1:-1;10520:3:105;;;;:::i;:::-;;;;10482:180;;;-1:-1:-1;10713:12:105;10795:1;10788:2;10778:7;:12;10772:2;:19;10766:3;:26;:30;10759:37;;10901:4;10894;10888:11;10884:22;10876:4;10872:9;10866:3;10860:10;10856:26;10853:54;10847:4;10840:68;10934:3;10927:10;;;;;;10052:892;;;;;:::o;12055:874:71:-;12146:14;12172:12;12194:24;;:::i;:::-;12228:20;;:::i;:::-;12269:4;12258:15;;;12341:8;;;:15;;;12425:8;;;:15;;;12509:8;;;:16;;;12535:8;;;:20;;;12565:8;;;:19;;;12673:6;12667:4;12258:15;12571:1;12650:4;12643:5;12639:16;12628:58;12617:69;-1:-1:-1;12617:69:71;12783:48;;;;12756:75;12858:7;12850:46;;;;-1:-1:-1;;;12850:46:71;;38986:2:136;12850:46:71;;;38968:21:136;39025:2;39005:18;;;38998:30;39064:28;39044:18;;;39037:56;39110:18;;12850:46:71;38784:350:136;12850:46:71;-1:-1:-1;12913:9:71;;;-1:-1:-1;;;;;12055:874:71:o;3775:344:110:-;3838:12;3862:20;3895:6;:13;3911:1;3895:17;;;;:::i;:::-;-1:-1:-1;;;;;3885:28:110;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3885:28:110;;3862:51;;3929:9;3924:164;3948:6;:13;3944:1;:17;3924:164;;;4012:1;3999:6;4006:1;3999:9;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;3999:9:110;:14;;3982:7;3990:5;:1;3994;3990:5;:::i;:::-;3982:14;;;;;;;;:::i;:::-;;;;:31;-1:-1:-1;;;;;3982:31:110;;;;;;;;;4074:2;4061:6;4068:1;4061:9;;;;;;;;:::i;:::-;;;;;4055:21;;;4061:9;;4055:21;:::i;:::-;4048:29;;4027:7;4035:5;:1;4039;4035:5;:::i;:::-;:9;;4043:1;4035:9;:::i;:::-;4027:18;;;;;;;;:::i;:::-;;;;:50;-1:-1:-1;;;;;4027:50:110;;;;;;;;-1:-1:-1;3963:3:110;;;;:::i;:::-;;;;3924:164;;;-1:-1:-1;4105:7:110;3775:344;-1:-1:-1;;3775:344:110:o;3295:346::-;3358:7;3397:2;3381:6;:13;:18;3377:167;;;-1:-1:-1;3492:2:110;3480:15;3474:22;;3295:346::o;3377:167::-;3572:6;3561:29;;;;;;;;;;;;:::i;10190:463:107:-;10268:15;10295:19;10344:2;10329:5;:12;;;:17;10325:272;;;10431:33;10458:5;10431:26;:33::i;:::-;10422:42;;10325:272;;;10556:30;10580:5;10556:23;:30::i;:::-;10547:39;;10325:272;10614:32;10639:6;10614:24;:32::i;10844:178::-;10911:18;10948:67;10973:41;10997:5;:13;;;11011:1;10997:16;;;;;;;;:::i;10973:41::-;10948:24;:67::i;3051:238:110:-;3126:12;3164:6;:13;3154:6;:23;3150:70;;-1:-1:-1;3200:9:110;;;;;;;;;-1:-1:-1;3200:9:110;;3193:16;;3150:70;3237:45;3243:6;3251;3275;3259;:13;:22;;;;:::i;:::-;3237:5;:45::i;11599:275:107:-;11711:15;;11765:85;11784:1;11772:2;:9;:13;:30;;;;;11801:1;11789:2;:9;:13;11772:30;:48;;;;;11815:2;11818:1;11815:5;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;11806:14:107;;:2;11809:1;11806:5;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;11806:5:107;:14;11772:48;11765:85;;;11836:3;;;;:::i;:::-;;;;11765:85;;7210:113:105;7275:12;7306:10;7312:3;7306:5;:10::i;205:2840:110:-;327:12;375:7;359:12;375:7;369:2;359:12;:::i;:::-;:23;;351:50;;;;-1:-1:-1;;;351:50:110;;;;;;;:::i;:::-;439:6;419:16;428:7;439:6;419:16;:::i;:::-;:26;;411:53;;;;-1:-1:-1;;;411:53:110;;;;;;;:::i;:::-;499:16;508:7;499:6;:16;:::i;:::-;482:6;:13;:33;;474:63;;;;-1:-1:-1;;;474:63:110;;39873:2:136;474:63:110;;;39855:21:136;39912:2;39892:18;;;39885:30;-1:-1:-1;;;39931:18:136;;;39924:47;39988:18;;474:63:110;39671:341:136;474:63:110;548:22;611:15;;639:1967;;;;2747:4;2741:11;2728:24;;2934:1;2923:9;2916:20;2982:4;2971:9;2967:20;2961:4;2954:34;604:2398;;639:1967;821:4;815:11;802:24;;1480:2;1471:7;1467:16;1862:9;1855:17;1849:4;1845:28;1833:9;1822;1818:25;1814:60;1910:7;1906:2;1902:16;2162:6;2148:9;2141:17;2135:4;2131:28;2119:9;2111:6;2107:22;2103:57;2099:70;1936:425;2195:3;2191:2;2188:11;1936:425;;;2333:9;;2322:21;;2236:4;2228:13;;;;2268;1936:425;;;-1:-1:-1;;2379:26:110;;;2587:2;2570:11;-1:-1:-1;;2566:25:110;2560:4;2553:39;-1:-1:-1;604:2398:110;-1:-1:-1;3029:9:110;205:2840;-1:-1:-1;;;;205:2840:110:o;11069:124:105:-;11126:12;11157:29;11163:3;:7;;;11172:1;11175:3;:10;;;11157:5;:29::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;411:148:136:-;-1:-1:-1;;;;;503:31:136;;493:42;;483:70;;549:1;546;539:12;564:288;647:6;700:2;688:9;679:7;675:23;671:32;668:52;;;716:1;713;706:12;668:52;755:9;742:23;774:48;816:5;774:48;:::i;857:180::-;916:6;969:2;957:9;948:7;944:23;940:32;937:52;;;985:1;982;975:12;937:52;-1:-1:-1;1008:23:136;;857:180;-1:-1:-1;857:180:136:o;1042:159::-;1106:5;1151:2;1142:6;1137:3;1133:16;1129:25;1126:45;;;1167:1;1164;1157:12;1126:45;-1:-1:-1;1189:6:136;1042:159;-1:-1:-1;1042:159:136:o;1206:361::-;1293:6;1346:2;1334:9;1325:7;1321:23;1317:32;1314:52;;;1362:1;1359;1352:12;1314:52;1402:9;1389:23;-1:-1:-1;;;;;1427:6:136;1424:30;1421:50;;;1467:1;1464;1457:12;1421:50;1490:71;1553:7;1544:6;1533:9;1529:22;1490:71;:::i;1572:156::-;1632:5;1677:3;1668:6;1663:3;1659:16;1655:26;1652:46;;;1694:1;1691;1684:12;1733:162;1799:5;1844:3;1835:6;1830:3;1826:16;1822:26;1819:46;;;1861:1;1858;1851:12;1900:498;2030:6;2038;2091:3;2079:9;2070:7;2066:23;2062:33;2059:53;;;2108:1;2105;2098:12;2059:53;2131:54;2177:7;2166:9;2131:54;:::i;:::-;2121:64;;2236:3;2225:9;2221:19;2208:33;-1:-1:-1;;;;;2256:6:136;2253:30;2250:50;;;2296:1;2293;2286:12;2250:50;2319:73;2384:7;2375:6;2364:9;2360:22;2319:73;:::i;:::-;2309:83;;;1900:498;;;;;:::o;2403:203::-;-1:-1:-1;;;;;2567:32:136;;;;2549:51;;2537:2;2522:18;;2403:203::o;2611:173::-;2679:20;;-1:-1:-1;;;;;2728:31:136;;2718:42;;2708:70;;2774:1;2771;2764:12;2789:186;2848:6;2901:2;2889:9;2880:7;2876:23;2872:32;2869:52;;;2917:1;2914;2907:12;2869:52;2940:29;2959:9;2940:29;:::i;2980:160::-;3044:5;3089:3;3080:6;3075:3;3071:16;3067:26;3064:46;;;3106:1;3103;3096:12;3145:968;3293:6;3301;3309;3317;3370:3;3358:9;3349:7;3345:23;3341:33;3338:53;;;3387:1;3384;3377:12;3338:53;3410:54;3456:7;3445:9;3410:54;:::i;:::-;3400:64;;3515:3;3504:9;3500:19;3487:33;-1:-1:-1;;;;;3580:2:136;3572:6;3569:14;3566:34;;;3596:1;3593;3586:12;3566:34;3619:71;3682:7;3673:6;3662:9;3658:22;3619:71;:::i;:::-;3609:81;;3743:3;3732:9;3728:19;3715:33;3699:49;;3773:2;3763:8;3760:16;3757:36;;;3789:1;3786;3779:12;3757:36;3827:8;3816:9;3812:24;3802:34;;3874:7;3867:4;3863:2;3859:13;3855:27;3845:55;;3896:1;3893;3886:12;3845:55;3936:2;3923:16;3962:2;3954:6;3951:14;3948:34;;;3978:1;3975;3968:12;3948:34;4025:7;4018:4;4009:6;4005:2;4001:15;3997:26;3994:39;3991:59;;;4046:1;4043;4036:12;3991:59;3145:968;;;;-1:-1:-1;;4077:4:136;4069:13;;-1:-1:-1;;;3145:968:136:o;4300:269::-;4357:6;4410:2;4398:9;4389:7;4385:23;4381:32;4378:52;;;4426:1;4423;4416:12;4378:52;4465:9;4452:23;4515:4;4508:5;4504:16;4497:5;4494:27;4484:55;;4535:1;4532;4525:12;5252:629;5382:6;5390;5443:2;5431:9;5422:7;5418:23;5414:32;5411:52;;;5459:1;5456;5449:12;5411:52;5499:9;5486:23;-1:-1:-1;;;;;5569:2:136;5561:6;5558:14;5555:34;;;5585:1;5582;5575:12;5555:34;5608:71;5671:7;5662:6;5651:9;5647:22;5608:71;:::i;:::-;5598:81;;5732:2;5721:9;5717:18;5704:32;5688:48;;5761:2;5751:8;5748:16;5745:36;;;5777:1;5774;5767:12;5745:36;;5800:75;5867:7;5856:8;5845:9;5841:24;5800:75;:::i;6118:679::-;6228:6;6236;6244;6252;6305:3;6293:9;6284:7;6280:23;6276:33;6273:53;;;6322:1;6319;6312:12;6273:53;6345:29;6364:9;6345:29;:::i;:::-;6335:39;;6424:2;6413:9;6409:18;6396:32;6437:48;6479:5;6437:48;:::i;:::-;6504:5;-1:-1:-1;6561:2:136;6546:18;;6533:32;6574:50;6533:32;6574:50;:::i;:::-;6643:7;-1:-1:-1;6702:2:136;6687:18;;6674:32;6715:50;6674:32;6715:50;:::i;:::-;6118:679;;;;-1:-1:-1;6118:679:136;;-1:-1:-1;;6118:679:136:o;6802:127::-;6863:10;6858:3;6854:20;6851:1;6844:31;6894:4;6891:1;6884:15;6918:4;6915:1;6908:15;6934:257;7006:4;7000:11;;;7038:17;;-1:-1:-1;;;;;7070:34:136;;7106:22;;;7067:62;7064:88;;;7132:18;;:::i;:::-;7168:4;7161:24;6934:257;:::o;7196:275::-;7267:2;7261:9;7332:2;7313:13;;-1:-1:-1;;7309:27:136;7297:40;;-1:-1:-1;;;;;7352:34:136;;7388:22;;;7349:62;7346:88;;;7414:18;;:::i;:::-;7450:2;7443:22;7196:275;;-1:-1:-1;7196:275:136:o;7476:282::-;7530:5;7578:4;7566:9;7561:3;7557:19;7553:30;7550:50;;;7596:1;7593;7586:12;7550:50;7618:22;;:::i;:::-;7609:31;;7676:9;7663:23;7656:5;7649:38;7747:2;7736:9;7732:18;7719:32;7714:2;7707:5;7703:14;7696:56;7476:282;;;;:::o;7763:311::-;7818:5;7866:4;7854:9;7849:3;7845:19;7841:30;7838:50;;;7884:1;7881;7874:12;7838:50;7906:22;;:::i;:::-;7897:31;;7951:41;7988:3;7977:9;7951:41;:::i;:::-;7944:5;7937:56;8027:40;8061:4;8050:9;8046:20;8027:40;:::i;:::-;8020:4;8013:5;8009:16;8002:66;7763:311;;;;:::o;8079:171::-;8146:20;;-1:-1:-1;;;;;8195:30:136;;8185:41;;8175:69;;8240:1;8237;8230:12;8255:1081;8374:6;8382;8435:2;8423:9;8414:7;8410:23;8406:32;8403:52;;;8451:1;8448;8441:12;8403:52;8491:9;8478:23;-1:-1:-1;;;;;8561:2:136;8553:6;8550:14;8547:34;;;8577:1;8574;8567:12;8547:34;8615:6;8604:9;8600:22;8590:32;;8660:7;8653:4;8649:2;8645:13;8641:27;8631:55;;8682:1;8679;8672:12;8631:55;8718:2;8705:16;8740:4;8763:2;8759;8756:10;8753:36;;;8769:18;;:::i;:::-;8809:36;8841:2;8836;8833:1;8829:10;8825:19;8809:36;:::i;:::-;8879:15;;;8910:12;;;;-1:-1:-1;8941:4:136;8980:11;;;8972:20;;8968:29;;;9009:19;;;9006:39;;;9041:1;9038;9031:12;9006:39;9065:11;;;;9085:165;9101:6;9096:3;9093:15;9085:165;;;9167:40;9199:7;9194:3;9167:40;:::i;:::-;9155:53;;9118:12;;;;9228;;;;9085:165;;;-1:-1:-1;9269:5:136;-1:-1:-1;9293:37:136;9311:18;;;9293:37;:::i;:::-;9283:47;;;;;;8255:1081;;;;;:::o;9341:163::-;9408:20;;9468:10;9457:22;;9447:33;;9437:61;;9494:1;9491;9484:12;9509:256;9575:6;9583;9636:2;9624:9;9615:7;9611:23;9607:32;9604:52;;;9652:1;9649;9642:12;9604:52;9675:28;9693:9;9675:28;:::i;:::-;9665:38;;9722:37;9755:2;9744:9;9740:18;9722:37;:::i;:::-;9712:47;;9509:256;;;;;:::o;9770:494::-;9898:6;9906;9959:3;9947:9;9938:7;9934:23;9930:33;9927:53;;;9976:1;9973;9966:12;9927:53;9999:54;10045:7;10034:9;9999:54;:::i;:::-;9989:64;;10104:3;10093:9;10089:19;10076:33;-1:-1:-1;;;;;10124:6:136;10121:30;10118:50;;;10164:1;10161;10154:12;10118:50;10187:71;10250:7;10241:6;10230:9;10226:22;10187:71;:::i;10928:268::-;10998:6;11051:2;11039:9;11030:7;11026:23;11022:32;11019:52;;;11067:1;11064;11057:12;11019:52;11099:9;11093:16;11118:48;11160:5;11118:48;:::i;11201:406::-;11403:2;11385:21;;;11442:2;11422:18;;;11415:30;11481:34;11476:2;11461:18;;11454:62;-1:-1:-1;;;11547:2:136;11532:18;;11525:40;11597:3;11582:19;;11201:406::o;11612:277::-;11679:6;11732:2;11720:9;11711:7;11707:23;11703:32;11700:52;;;11748:1;11745;11738:12;11700:52;11780:9;11774:16;11833:5;11826:13;11819:21;11812:5;11809:32;11799:60;;11855:1;11852;11845:12;11894:404;12096:2;12078:21;;;12135:2;12115:18;;;12108:30;12174:34;12169:2;12154:18;;12147:62;-1:-1:-1;;;12240:2:136;12225:18;;12218:38;12288:3;12273:19;;11894:404::o;12728:184::-;12786:6;12839:2;12827:9;12818:7;12814:23;12810:32;12807:52;;;12855:1;12852;12845:12;12807:52;12878:28;12896:9;12878:28;:::i;12917:340::-;13119:2;13101:21;;;13158:2;13138:18;;;13131:30;-1:-1:-1;;;13192:2:136;13177:18;;13170:46;13248:2;13233:18;;12917:340::o;13262:127::-;13323:10;13318:3;13314:20;13311:1;13304:31;13354:4;13351:1;13344:15;13378:4;13375:1;13368:15;13394:236;13433:3;-1:-1:-1;;;;;13506:2:136;13503:1;13499:10;13536:2;13533:1;13529:10;13567:3;13563:2;13559:12;13554:3;13551:21;13548:47;;;13575:18;;:::i;:::-;13611:13;;13394:236;-1:-1:-1;;;;13394:236:136:o;13635:577::-;13757:4;13763:6;13823:11;13810:25;13917:2;13913:7;13902:8;13886:14;13882:29;13878:43;13858:18;13854:68;13844:96;;13936:1;13933;13926:12;13844:96;13963:33;;14015:20;;;-1:-1:-1;;;;;;14047:30:136;;14044:50;;;14090:1;14087;14080:12;14044:50;14123:4;14111:17;;-1:-1:-1;14182:4:136;14170:17;;14154:14;14150:38;14140:49;;14137:69;;;14202:1;14199;14192:12;14137:69;13635:577;;;;;:::o;14217:230::-;14303:6;14356:2;14344:9;14335:7;14331:23;14327:32;14324:52;;;14372:1;14369;14362:12;14324:52;14395:46;14433:7;14422:9;14395:46;:::i;14452:349::-;14654:2;14636:21;;;14693:2;14673:18;;;14666:30;-1:-1:-1;;;14727:2:136;14712:18;;14705:55;14792:2;14777:18;;14452:349::o;14806:338::-;15008:2;14990:21;;;15047:2;15027:18;;;15020:30;-1:-1:-1;;;15081:2:136;15066:18;;15059:44;15135:2;15120:18;;14806:338::o;15149:184::-;15207:6;15260:2;15248:9;15239:7;15235:23;15231:32;15228:52;;;15276:1;15273;15266:12;15228:52;15299:28;15317:9;15299:28;:::i;17715:521::-;17792:4;17798:6;17858:11;17845:25;17952:2;17948:7;17937:8;17921:14;17917:29;17913:43;17893:18;17889:68;17879:96;;17971:1;17968;17961:12;17879:96;17998:33;;18050:20;;;-1:-1:-1;;;;;;18082:30:136;;18079:50;;;18125:1;18122;18115:12;18079:50;18158:4;18146:17;;-1:-1:-1;18189:14:136;18185:27;;;18175:38;;18172:58;;;18226:1;18223;18216:12;20273:127;20334:10;20329:3;20325:20;20322:1;20315:31;20365:4;20362:1;20355:15;20389:4;20386:1;20379:15;20756:231;20796:4;-1:-1:-1;;;;;20894:10:136;;;;20864;;20916:12;;;20913:38;;;20931:18;;:::i;:::-;20968:13;;20756:231;-1:-1:-1;;;20756:231:136:o;20992:238::-;21032:3;-1:-1:-1;;;;;21099:10:136;;;21129;;;21159:12;;;21151:21;;21148:47;;;21175:18;;:::i;21235:135::-;21274:3;-1:-1:-1;;21295:17:136;;21292:43;;;21315:18;;:::i;:::-;-1:-1:-1;21362:1:136;21351:13;;21235:135::o;21375:724::-;21563:3;21548:19;;21625:10;21598:25;21616:6;21598:25;:::i;:::-;21594:42;21583:9;21576:61;21666:36;21696:4;21688:6;21684:17;21666:36;:::i;:::-;-1:-1:-1;;;;;21795:2:136;21781:12;21777:21;21770:4;21759:9;21755:20;21748:51;21879:2;21841:36;21871:4;21863:6;21859:17;21841:36;:::i;:::-;21837:45;21830:4;21819:9;21815:20;21808:75;;;21946:4;21938:6;21934:17;21921:31;21914:4;21903:9;21899:20;21892:61;22016:4;22008:6;22004:17;21991:31;21984:4;21973:9;21969:20;21962:61;22086:4;22078:6;22074:17;22061:31;22054:4;22043:9;22039:20;22032:61;21375:724;;;;:::o;22718:573::-;22839:4;22845:6;22905:11;22892:25;22999:2;22995:7;22984:8;22968:14;22964:29;22960:43;22940:18;22936:68;22926:96;;23018:1;23015;23008:12;22926:96;23045:33;;23097:20;;;-1:-1:-1;;;;;;23129:30:136;;23126:50;;;23172:1;23169;23162:12;23126:50;23205:4;23193:17;;-1:-1:-1;23256:1:136;23252:14;;;23236;23232:35;23222:46;;23219:66;;;23281:1;23278;23271:12;23296:228;23381:6;23434:2;23422:9;23413:7;23409:23;23405:32;23402:52;;;23450:1;23447;23440:12;23402:52;23473:45;23510:7;23499:9;23473:45;:::i;23529:125::-;23569:4;23597:1;23594;23591:8;23588:34;;;23602:18;;:::i;:::-;-1:-1:-1;23639:9:136;;23529:125::o;24359:646::-;24409:5;24462:3;24455:4;24447:6;24443:17;24439:27;24429:55;;24480:1;24477;24470:12;24429:55;24513:2;24507:9;24555:2;24547:6;24543:15;24624:6;24612:10;24609:22;-1:-1:-1;;;;;24576:10:136;24573:34;24570:62;24567:88;;;24635:18;;:::i;:::-;24675:10;24671:2;24664:22;;24706:6;24747:2;24739:6;24735:15;24773:3;24765:6;24762:15;24759:35;;;24790:1;24787;24780:12;24759:35;24814:6;24829:146;24845:6;24840:3;24837:15;24829:146;;;24913:17;;24901:30;;24960:4;24951:14;;;;24862;24829:146;;;-1:-1:-1;24993:6:136;;24359:646;-1:-1:-1;;;;;24359:646:136:o;25010:391::-;25095:6;25148:3;25136:9;25127:7;25123:23;25119:33;25116:53;;;25165:1;25162;25155:12;25116:53;25191:22;;:::i;:::-;25236:44;25272:7;25261:9;25236:44;:::i;:::-;25229:5;25222:59;25315:55;25362:7;25355:4;25344:9;25340:20;25315:55;:::i;:::-;25308:4;25297:16;;25290:81;25301:5;25010:391;-1:-1:-1;;;25010:391:136:o;26114:272::-;26154:7;-1:-1:-1;;;;;26225:10:136;;;26255;;;26288:11;;26281:19;26310:12;;;26302:21;;26277:47;26274:73;;;26327:18;;:::i;:::-;26367:13;;26114:272;-1:-1:-1;;;;26114:272:136:o;26391:127::-;26452:10;26447:3;26443:20;26440:1;26433:31;26483:4;26480:1;26473:15;26507:4;26504:1;26497:15;26523:201;26563:1;-1:-1:-1;;;;;26628:10:136;;;;26647:37;;26664:18;;:::i;:::-;26702:10;;26698:20;;;;;26523:201;-1:-1:-1;;26523:201:136:o;27139:1463::-;27285:4;27314:2;27343;27332:9;27325:21;27384:3;27373:9;27369:19;-1:-1:-1;;;;;27492:2:136;27465:25;27483:6;27465:25;:::i;:::-;27461:34;27456:2;27445:9;27441:18;27434:62;27525:34;27555:2;27547:6;27543:15;27525:34;:::i;:::-;27578:2;27634;27620:12;27616:21;27611:2;27600:9;27596:18;27589:49;27698:2;27690:6;27686:15;27673:29;27647:55;;27782:2;27778:7;27769:6;27753:14;27749:27;27745:41;27725:18;27721:66;27711:94;;27801:1;27798;27791:12;27711:94;27827:31;;;;27881:19;;27912:14;;;27909:34;;;27939:1;27936;27929:12;27909:34;27962:4;27952:14;;28022:2;28014:6;28010:15;27994:14;27990:36;27982:6;27978:49;27975:69;;;28040:1;28037;28030:12;27975:69;28060:18;;;28053:30;;;28118:22;;;;28198:14;;;;28230:1;;-1:-1:-1;28171:3:136;28156:19;;28240:336;28254:6;28251:1;28248:13;28240:336;;;28315:20;;28303:33;;28383:15;;;28370:29;28356:12;;;28349:51;-1:-1:-1;;;;;28438:35:136;28457:15;;;28438:35;:::i;:::-;28434:61;28420:12;;;28413:83;28551:15;;;;28276:1;28269:9;;;;;28516:12;;28240:336;;;28593:3;27139:1463;-1:-1:-1;;;;;;;;;27139:1463:136:o;30558:112::-;30590:1;30616;30606:35;;30621:18;;:::i;:::-;-1:-1:-1;30655:9:136;;30558:112::o;31730:168::-;31770:7;31836:1;31832;31828:6;31824:14;31821:1;31818:21;31813:1;31806:9;31799:17;31795:45;31792:71;;;31843:18;;:::i;:::-;-1:-1:-1;31883:9:136;;31730:168::o;31903:128::-;31943:3;31974:1;31970:6;31967:1;31964:13;31961:39;;;31980:18;;:::i;:::-;-1:-1:-1;32016:9:136;;31903:128::o;32391:350::-;32593:2;32575:21;;;32632:2;32612:18;;;32605:30;32671:28;32666:2;32651:18;;32644:56;32732:2;32717:18;;32391:350::o;32746:127::-;32807:10;32802:3;32798:20;32795:1;32788:31;32838:4;32835:1;32828:15;32862:4;32859:1;32852:15;34288:157;34318:1;34352:4;34349:1;34345:12;34376:3;34366:37;;34383:18;;:::i;:::-;34435:3;34428:4;34425:1;34421:12;34417:22;34412:27;;;34288:157;;;;:::o;34450:195::-;34488:4;34525;34522:1;34518:12;34557:4;34554:1;34550:12;34582:3;34577;34574:12;34571:38;;;34589:18;;:::i;:::-;34626:13;;;34450:195;-1:-1:-1;;;34450:195:136:o;38659:120::-;38699:1;38725;38715:35;;38730:18;;:::i;:::-;-1:-1:-1;38764:9:136;;38659:120::o;39139:184::-;39209:6;39262:2;39250:9;39241:7;39237:23;39233:32;39230:52;;;39278:1;39275;39268:12;39230:52;-1:-1:-1;39301:16:136;;39139:184;-1:-1:-1;39139:184:136:o;39328:338::-;39530:2;39512:21;;;39569:2;39549:18;;;39542:30;-1:-1:-1;;;39603:2:136;39588:18;;39581:44;39657:2;39642:18;;39328:338::o","linkReferences":{}},"methodIdentifiers":{"PAUSED_UPDATE_OPERATOR_SET()":"f4db0571","PAUSED_UPDATE_STATE_ROOT()":"0510c191","THRESHOLD_DENOMINATOR()":"ef024458","aggregator()":"245a7bfc","forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))":"1df9e1d2","getApk()":"6f5b9918","getOperatorWeight(bytes32)":"dd64766e","getQuorumThreshold()":"4afa71b9","getStateRoot(uint32,uint64)":"b3a9e53b","getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))":"d5d4bb5a","getTotalWeight()":"06aba0e1","initialize(uint128,address,address,address)":"90540c37","nextOperatorUpdateId()":"e0f5d9f0","owner()":"8da5cb5b","pause(uint256)":"136439dd","pauseAll()":"595c6a67","paused()":"5c975abb","paused(uint8)":"5ac86ab7","pauserRegistry()":"886f1195","renounceOwnership()":"715018a6","setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)":"b128aeee","setPauserRegistry(address)":"10d67a2f","setQuorumThreshold(uint128)":"2db52ea5","transferOwnership(address)":"f2fde38b","unpause(uint256)":"fabc1cbc","updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)":"2f65284e","updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":"82616b7b","updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":"1fb4d411"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IPauserRegistry\",\"name\":\"pauserRegistry\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"PauserRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"name\":\"StateRootUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"PAUSED_UPDATE_OPERATOR_SET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSED_UPDATE_STATE_ROOT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"THRESHOLD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aggregator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"weight\",\"type\":\"uint128\"}],\"internalType\":\"struct RollupOperators.Operator[]\",\"name\":\"operators\",\"type\":\"tuple[]\"}],\"internalType\":\"struct OperatorSetUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"forceOperatorSetUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getApk\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"pubkeyHash\",\"type\":\"bytes32\"}],\"name\":\"getOperatorWeight\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getQuorumThreshold\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"}],\"name\":\"getStateRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct StateRootUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"storageKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"stateTrieWitness\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"storageTrieWitness\",\"type\":\"bytes\"}],\"internalType\":\"struct SFFLRegistryBase.ProofParams\",\"name\":\"proofParams\",\"type\":\"tuple\"}],\"name\":\"getStorageValue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalWeight\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"quorumThreshold\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_aggregator\",\"type\":\"address\"},{\"internalType\":\"contract IPauserRegistry\",\"name\":\"_pauserRegistry\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorUpdateId\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauserRegistry\",\"outputs\":[{\"internalType\":\"contract IPauserRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"weight\",\"type\":\"uint128\"}],\"internalType\":\"struct RollupOperators.Operator[]\",\"name\":\"operators\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"_nextOperatorUpdateId\",\"type\":\"uint64\"}],\"name\":\"setInitialOperatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"setPauserRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newQuorumThreshold\",\"type\":\"uint128\"}],\"name\":\"setQuorumThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct StateRootUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"storageKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"stateTrieWitness\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"storageTrieWitness\",\"type\":\"bytes\"}],\"internalType\":\"struct SFFLRegistryBase.ProofParams\",\"name\":\"proofParams\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"agreement\",\"type\":\"bytes\"}],\"name\":\"updateAndGetStorageValue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"weight\",\"type\":\"uint128\"}],\"internalType\":\"struct RollupOperators.Operator[]\",\"name\":\"operators\",\"type\":\"tuple[]\"}],\"internalType\":\"struct OperatorSetUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"internalType\":\"struct RollupOperators.SignatureInfo\",\"name\":\"signatureInfo\",\"type\":\"tuple\"}],\"name\":\"updateOperatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct StateRootUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"internalType\":\"struct RollupOperators.SignatureInfo\",\"name\":\"signatureInfo\",\"type\":\"tuple\"}],\"name\":\"updateStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"THRESHOLD_DENOMINATOR()\":{\"returns\":{\"_0\":\"Operator set weight threshold denominator\"}},\"forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))\":{\"params\":{\"message\":\"Operator set update message\"}},\"getApk()\":{\"returns\":{\"_0\":\"Operator set aggregate public key\"}},\"getOperatorWeight(bytes32)\":{\"params\":{\"pubkeyHash\":\"Operator pubkey hash\"},\"returns\":{\"_0\":\"Operator weight\"}},\"getQuorumThreshold()\":{\"returns\":{\"_0\":\"Operator set weight threshold\"}},\"getStateRoot(uint32,uint64)\":{\"details\":\"Does not fail if it's empty, should be checked for zeroes\",\"params\":{\"blockHeight\":\"Rollup block height\",\"rollupId\":\"Pre-defined rollup ID\"},\"returns\":{\"_0\":\"Rollup state root, or 0 if unset\"}},\"getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))\":{\"params\":{\"message\":\"State root update message\",\"proofParams\":\"Storage proof parameters\"},\"returns\":{\"_0\":\"Verified storage value\"}},\"getTotalWeight()\":{\"returns\":{\"_0\":\"Operator set total weight\"}},\"initialize(uint128,address,address,address)\":{\"params\":{\"_aggregator\":\"Aggregator address\",\"_pauserRegistry\":\"Pauser registry address\",\"initialOwner\":\"Owner address\",\"quorumThreshold\":\"Quorum threshold, based on THRESHOLD_DENOMINATOR\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pause(uint256)\":{\"details\":\"This function can only pause functionality, and thus cannot 'unflip' any bit in `_paused` from 1 to 0.\",\"params\":{\"newPausedStatus\":\"represents the new value for `_paused` to take, which means it may flip several bits at once.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)\":{\"params\":{\"_nextOperatorUpdateId\":\"Starting next operator update message ID\",\"operators\":\"Initial operator list\"}},\"setQuorumThreshold(uint128)\":{\"params\":{\"newQuorumThreshold\":\"New quorum threshold, based on THRESHOLD_DENOMINATOR\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unpause(uint256)\":{\"details\":\"This function can only unpause functionality, and thus cannot 'flip' any bit in `_paused` from 0 to 1.\",\"params\":{\"newPausedStatus\":\"represents the new value for `_paused` to take, which means it may flip several bits at once.\"}},\"updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)\":{\"params\":{\"agreement\":\"AVS operators agreement info\",\"message\":\"State root update message\",\"proofParams\":\"Storage proof parameters\"},\"returns\":{\"_0\":\"Verified storage value\"}},\"updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))\":{\"params\":{\"message\":\"Operator set update message\",\"signatureInfo\":\"BLS aggregated signature info\"}},\"updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))\":{\"params\":{\"message\":\"State root update message\",\"signatureInfo\":\"BLS aggregated signature info\"}}},\"stateVariables\":{\"_operatorSet\":{\"details\":\"Operator set used for agreements\"}},\"title\":\"SFFL registry for rollups / external networks\",\"version\":1},\"userdoc\":{\"events\":{\"Paused(address,uint256)\":{\"notice\":\"Emitted when the pause is triggered by `account`, and changed to `newPausedStatus`.\"},\"PauserRegistrySet(address,address)\":{\"notice\":\"Emitted when the `pauserRegistry` is set to `newPauserRegistry`.\"},\"StateRootUpdated(uint32,uint64,bytes32)\":{\"notice\":\"Emitted when a rollup's state root is updated\"},\"Unpaused(address,uint256)\":{\"notice\":\"Emitted when the pause is lifted by `account`, and changed to `newPausedStatus`.\"}},\"kind\":\"user\",\"methods\":{\"PAUSED_UPDATE_OPERATOR_SET()\":{\"notice\":\"Index for flag that pauses operator set updates\"},\"PAUSED_UPDATE_STATE_ROOT()\":{\"notice\":\"Index for flag that pauses state root updates\"},\"THRESHOLD_DENOMINATOR()\":{\"notice\":\"Gets the operator set quorum weight threshold denominator\"},\"aggregator()\":{\"notice\":\"Aggregator address, used for the initial operator set setup\"},\"forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))\":{\"notice\":\"Forces an operator set update. This is meant to be used only by the owner in a testnet scenario in case there is no consensus on a particular operator set update. This can also be used while operator set updating is paused.\"},\"getApk()\":{\"notice\":\"Gets the operator set aggregate public key\"},\"getOperatorWeight(bytes32)\":{\"notice\":\"Gets an operator's weight\"},\"getQuorumThreshold()\":{\"notice\":\"Gets the operator set weight threshold\"},\"getStateRoot(uint32,uint64)\":{\"notice\":\"Gets a state root for a rollup in a specific block height\"},\"getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))\":{\"notice\":\"Gets a storage key value based on a rollup's state root in a block\"},\"getTotalWeight()\":{\"notice\":\"Gets the operator set total weight\"},\"initialize(uint128,address,address,address)\":{\"notice\":\"Initializes the contract\"},\"nextOperatorUpdateId()\":{\"notice\":\"Next operator set update message ID\"},\"pause(uint256)\":{\"notice\":\"This function is used to pause an EigenLayer contract's functionality. It is permissioned to the `pauser` address, which is expected to be a low threshold multisig.\"},\"pauseAll()\":{\"notice\":\"Alias for `pause(type(uint256).max)`.\"},\"paused()\":{\"notice\":\"Returns the current paused status as a uint256.\"},\"paused(uint8)\":{\"notice\":\"Returns 'true' if the `indexed`th bit of `_paused` is 1, and 'false' otherwise\"},\"pauserRegistry()\":{\"notice\":\"Address of the `PauserRegistry` contract that this contract defers to for determining access control (for pausing).\"},\"setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)\":{\"notice\":\"Sets the initial operator set\"},\"setPauserRegistry(address)\":{\"notice\":\"Allows the unpauser to set a new pauser registry\"},\"setQuorumThreshold(uint128)\":{\"notice\":\"Sets the operator set quorum weight threshold\"},\"unpause(uint256)\":{\"notice\":\"This function is used to unpause an EigenLayer contract's functionality. It is permissioned to the `unpauser` address, which is expected to be a high threshold multisig or governance contract.\"},\"updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)\":{\"notice\":\"Gets a storage key value based on a rollup's state root in a block\"},\"updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))\":{\"notice\":\"Updates the operator set through an operator set update message\"},\"updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))\":{\"notice\":\"Updates a rollup's state root for a block height through a state root update message\"}},\"notice\":\"Contract that centralizes the AVS operator set copy management, which is based on agreements such as the state root updates, as well as state root updates themselves. Differently from the Ethereum AVS contracts, the rollup contract heavily assumes a one-quorum operator set and can only prove agreements based on the current operator set state\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/rollup/SFFLRegistryRollup.sol\":\"SFFLRegistryRollup\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[\":@eigenlayer/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":@eth-optimism/=node_modules/@eth-optimism/\",\":@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324\",\"dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d\",\"dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol\":{\"keccak256\":\"0xc543d34b3e0fd116227fc5218286de6b30a9141f47df2e8cc17d857d2c0cb338\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e78ca3c3c9f14ccde852ea41bc411726ea7770a1cf2ef18851e67bcdf7522cff\",\"dweb:/ipfs/QmWagcWsaNZqBZhdEHhZ4PcU9fx5wQnrbjoaaFvjEwgGHt\"]},\"lib/eigenlayer-middleware/src/libraries/BN254.sol\":{\"keccak256\":\"0x40a9a94aaa705b67d1c4efdccb8e1ff8ccf41d1ce20639f6cd6fd27d84891417\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4b7a07633fc3fce4d2eac8dc16ee2cf138e34583e1822d3d705d7c567667bf49\",\"dweb:/ipfs/QmVWYp64T71yKnT2Bpoq4wj7bADUKmjW8w5uzhCTh5Bs91\"]},\"node_modules/@eth-optimism/contracts/libraries/codec/Lib_OVMCodec.sol\":{\"keccak256\":\"0xb5009ac1e0617e0b3b2fb917f08f8e8a7ae706034cc3a675258bc3d91978525e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://776f8407a5c3bcd0991801a922ea69a9665b14e85e6ac925ef9ec5dc5d0de87c\",\"dweb:/ipfs/QmRE5yQd69rDDmPPo2TcFDoCzXtbodHgicQNoXiRCTsBJb\"]},\"node_modules/@eth-optimism/contracts/libraries/resolver/Lib_AddressManager.sol\":{\"keccak256\":\"0xcde9b29429d512c549f7c1b8a033f161fa71c18cda08b241748663854196ae14\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6fbd748ce0173bd14166174c68a43e108ec27d8f90cf3dc3703cda120b641e0b\",\"dweb:/ipfs/QmT818AKJieRAndixSms9L7gmC7b1cvD4BGycUPtFpbWaM\"]},\"node_modules/@eth-optimism/contracts/libraries/resolver/Lib_AddressResolver.sol\":{\"keccak256\":\"0x515c4db671a28e2fe180201f6d11c0208c05f582ca3489fb6b8e81c27659bc62\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c92c08efa7be210e9447267517c77ca39372b5bd33d121539ef1f59fac149fa\",\"dweb:/ipfs/QmZ8V2Kaw7XqGhCCe2CAPMCPkHgcMGr92enXfXqGpBYw23\"]},\"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPReader.sol\":{\"keccak256\":\"0xd794d1b32c6e31d40e2526b5e519de1b4e8d14d6933889f9b916e69c5d1848c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://76a6d82cce64bf143f77249c49de3d93687a2b3e69b020f2f74fad503806b52b\",\"dweb:/ipfs/QmUHF33h4Tn4Q4cVHwk82eMMer8YTDTk1u3e4MCfrSYt3J\"]},\"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPWriter.sol\":{\"keccak256\":\"0x215b90672ce126effc3f2df61ca0cdf52d2b1cc9be602877e637829b0bf229fd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7418707a22a792e838759becfa4ceb60774171a0a219cdd39452351225ec31a6\",\"dweb:/ipfs/QmZWxL4DNv8EVZoJbLSf4euzQwhzyRduSia5cVFJo4Bxh2\"]},\"node_modules/@eth-optimism/contracts/libraries/trie/Lib_MerkleTrie.sol\":{\"keccak256\":\"0x081304d7627b242e0a5724785a9cc4128b3104460f234ffe404d7bc87c1ad162\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1891f18b4ac99bc8c1dcbe255bf9db1e5c724389c0fa533ca18a6039aa8fe9f7\",\"dweb:/ipfs/QmW8GaMNvDeDQnjHAaAfv9wwjmtvjvEcQ9pyoxVmeK5x1x\"]},\"node_modules/@eth-optimism/contracts/libraries/trie/Lib_SecureMerkleTrie.sol\":{\"keccak256\":\"0x38e47070ba79b1049b6d623db3377322d98c2217e8fa786bd48116fc7e3bfd9e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90c88905fa6495e230e8099e2d7e5ad08bc95466a54d1f0eb0cedcdbbf5bdb63\",\"dweb:/ipfs/QmQVY4xxCLZC825mAgLjyaHEeHP4gPr65pN2SJCgPURDDA\"]},\"node_modules/@eth-optimism/contracts/libraries/utils/Lib_Bytes32Utils.sol\":{\"keccak256\":\"0xf2d1a526f2529e51fc2fffccf093c1691e291cbbb6de8a3da7d7f80024a9a234\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3e0ff635f68c17f1b1a9b094a9da670dd1170241e67d8e87b00be2157f28ad6\",\"dweb:/ipfs/QmS9fK2TZ123NE2iXAbUxfaasSPGbui5EG6HP9uz6gveiN\"]},\"node_modules/@eth-optimism/contracts/libraries/utils/Lib_BytesUtils.sol\":{\"keccak256\":\"0xc39ee13f97e4ccfbc72a5aac571deb3c1aff882fca2dd18be794d43ac5de0a30\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c5761b5cf7287ac94404f54481d88ee0122bc031f1c2e0b4b2cc4c384e1b018\",\"dweb:/ipfs/QmbBTssPvH5ABa3e8MNRoHMkGGaoRXqneWhJzrDx7FsD1R\"]},\"src/base/SFFLRegistryBase.sol\":{\"keccak256\":\"0x7f36c3b4792292004cd625caf96eb003dc1be3b24e7ab2f449be13f1b150ec31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5e2a259efbc6542ac0badd7b3969a564c7f563742874bccd1c3b4ca12056bbd9\",\"dweb:/ipfs/QmRDavGQa82t6B9rjtYXvPcAMWALLA4Uzd5ZT9YpgBXYyV\"]},\"src/base/message/OperatorSetUpdate.sol\":{\"keccak256\":\"0x534462101877424c2c233d4032582dbc5a430205d9362e81d1343dd9e9822e5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a99f49eb89a0b1c4447386e0e5bb065b78695a594621b22fd0fa1271311fba83\",\"dweb:/ipfs/QmRyrpJDeeYMzLQTCwFkCHndSdYsujfFDhXPhpJN19HPRw\"]},\"src/base/message/StateRootUpdate.sol\":{\"keccak256\":\"0x678b218208110cf1d50201459ed67fb2e110c7313251ffa240465ecfce89e6a7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dbae4e861fec0cbcdf7b98603ffc42e2a71034576ff4db50534d73e83e17523b\",\"dweb:/ipfs/QmPWNZXWKaxTA8MJzSNX5Qtmw31rM4SrYgVJtQ9UjM2kFu\"]},\"src/base/utils/RollupOperators.sol\":{\"keccak256\":\"0xbfc1ca2ec06fb58629caa7bdf00fce61daaca1a58a3d50e7b4f69ddf1b132784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://853941dc11c18731968065c60851971e41e41d35471337d67eb3f92a28aa8ff6\",\"dweb:/ipfs/Qma9YMpvp8X9B1Fe5Win3vyKGd3LPavEJQCLNpFDFg1MLb\"]},\"src/rollup/SFFLRegistryRollup.sol\":{\"keccak256\":\"0xf2d58f60a6869128f8ebf7c2f49b8515842fbafce49ce8d9e4c1214b3bb1a113\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9ffba4b68c3b53a3c6472fcc3e9fbb14a99575c6faa76fcaae3d7eeb754247d7\",\"dweb:/ipfs/QmfD27QeaYNirGaZqkFPj5ceGiajnq57MYsCShmbk7Zsmn\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.12+commit.f00d7308"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"uint256","name":"newPausedStatus","type":"uint256","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"contract IPauserRegistry","name":"pauserRegistry","type":"address","indexed":false},{"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address","indexed":false}],"type":"event","name":"PauserRegistrySet","anonymous":false},{"inputs":[{"internalType":"uint32","name":"rollupId","type":"uint32","indexed":true},{"internalType":"uint64","name":"blockHeight","type":"uint64","indexed":true},{"internalType":"bytes32","name":"stateRoot","type":"bytes32","indexed":false}],"type":"event","name":"StateRootUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"uint256","name":"newPausedStatus","type":"uint256","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"PAUSED_UPDATE_OPERATOR_SET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PAUSED_UPDATE_STATE_ROOT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"THRESHOLD_DENOMINATOR","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"aggregator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"struct OperatorSetUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]","components":[{"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint128","name":"weight","type":"uint128"}]}]}],"stateMutability":"nonpayable","type":"function","name":"forceOperatorSetUpdate"},{"inputs":[],"stateMutability":"view","type":"function","name":"getApk","outputs":[{"internalType":"struct BN254.G1Point","name":"","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes32","name":"pubkeyHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getOperatorWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getQuorumThreshold","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"}],"stateMutability":"view","type":"function","name":"getStateRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}]},{"internalType":"struct SFFLRegistryBase.ProofParams","name":"proofParams","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"storageKey","type":"bytes32"},{"internalType":"bytes","name":"stateTrieWitness","type":"bytes"},{"internalType":"bytes","name":"storageTrieWitness","type":"bytes"}]}],"stateMutability":"view","type":"function","name":"getStorageValue","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getTotalWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[{"internalType":"uint128","name":"quorumThreshold","type":"uint128"},{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_aggregator","type":"address"},{"internalType":"contract IPauserRegistry","name":"_pauserRegistry","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"nextOperatorUpdateId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pauseAll"},{"inputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"pauserRegistry","outputs":[{"internalType":"contract IPauserRegistry","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]","components":[{"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint128","name":"weight","type":"uint128"}]},{"internalType":"uint64","name":"_nextOperatorUpdateId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setInitialOperatorSet"},{"inputs":[{"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setPauserRegistry"},{"inputs":[{"internalType":"uint128","name":"newQuorumThreshold","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"setQuorumThreshold"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}]},{"internalType":"struct SFFLRegistryBase.ProofParams","name":"proofParams","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"storageKey","type":"bytes32"},{"internalType":"bytes","name":"stateTrieWitness","type":"bytes"},{"internalType":"bytes","name":"storageTrieWitness","type":"bytes"}]},{"internalType":"bytes","name":"agreement","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"updateAndGetStorageValue","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct OperatorSetUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]","components":[{"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint128","name":"weight","type":"uint128"}]}]},{"internalType":"struct RollupOperators.SignatureInfo","name":"signatureInfo","type":"tuple","components":[{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}]}],"stateMutability":"nonpayable","type":"function","name":"updateOperatorSet"},{"inputs":[{"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}]},{"internalType":"struct RollupOperators.SignatureInfo","name":"signatureInfo","type":"tuple","components":[{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}]}],"stateMutability":"nonpayable","type":"function","name":"updateStateRoot"}],"devdoc":{"kind":"dev","methods":{"THRESHOLD_DENOMINATOR()":{"returns":{"_0":"Operator set weight threshold denominator"}},"forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))":{"params":{"message":"Operator set update message"}},"getApk()":{"returns":{"_0":"Operator set aggregate public key"}},"getOperatorWeight(bytes32)":{"params":{"pubkeyHash":"Operator pubkey hash"},"returns":{"_0":"Operator weight"}},"getQuorumThreshold()":{"returns":{"_0":"Operator set weight threshold"}},"getStateRoot(uint32,uint64)":{"details":"Does not fail if it's empty, should be checked for zeroes","params":{"blockHeight":"Rollup block height","rollupId":"Pre-defined rollup ID"},"returns":{"_0":"Rollup state root, or 0 if unset"}},"getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))":{"params":{"message":"State root update message","proofParams":"Storage proof parameters"},"returns":{"_0":"Verified storage value"}},"getTotalWeight()":{"returns":{"_0":"Operator set total weight"}},"initialize(uint128,address,address,address)":{"params":{"_aggregator":"Aggregator address","_pauserRegistry":"Pauser registry address","initialOwner":"Owner address","quorumThreshold":"Quorum threshold, based on THRESHOLD_DENOMINATOR"}},"owner()":{"details":"Returns the address of the current owner."},"pause(uint256)":{"details":"This function can only pause functionality, and thus cannot 'unflip' any bit in `_paused` from 1 to 0.","params":{"newPausedStatus":"represents the new value for `_paused` to take, which means it may flip several bits at once."}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)":{"params":{"_nextOperatorUpdateId":"Starting next operator update message ID","operators":"Initial operator list"}},"setQuorumThreshold(uint128)":{"params":{"newQuorumThreshold":"New quorum threshold, based on THRESHOLD_DENOMINATOR"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"unpause(uint256)":{"details":"This function can only unpause functionality, and thus cannot 'flip' any bit in `_paused` from 0 to 1.","params":{"newPausedStatus":"represents the new value for `_paused` to take, which means it may flip several bits at once."}},"updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)":{"params":{"agreement":"AVS operators agreement info","message":"State root update message","proofParams":"Storage proof parameters"},"returns":{"_0":"Verified storage value"}},"updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":{"params":{"message":"Operator set update message","signatureInfo":"BLS aggregated signature info"}},"updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":{"params":{"message":"State root update message","signatureInfo":"BLS aggregated signature info"}}},"version":1},"userdoc":{"kind":"user","methods":{"PAUSED_UPDATE_OPERATOR_SET()":{"notice":"Index for flag that pauses operator set updates"},"PAUSED_UPDATE_STATE_ROOT()":{"notice":"Index for flag that pauses state root updates"},"THRESHOLD_DENOMINATOR()":{"notice":"Gets the operator set quorum weight threshold denominator"},"aggregator()":{"notice":"Aggregator address, used for the initial operator set setup"},"forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))":{"notice":"Forces an operator set update. This is meant to be used only by the owner in a testnet scenario in case there is no consensus on a particular operator set update. This can also be used while operator set updating is paused."},"getApk()":{"notice":"Gets the operator set aggregate public key"},"getOperatorWeight(bytes32)":{"notice":"Gets an operator's weight"},"getQuorumThreshold()":{"notice":"Gets the operator set weight threshold"},"getStateRoot(uint32,uint64)":{"notice":"Gets a state root for a rollup in a specific block height"},"getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))":{"notice":"Gets a storage key value based on a rollup's state root in a block"},"getTotalWeight()":{"notice":"Gets the operator set total weight"},"initialize(uint128,address,address,address)":{"notice":"Initializes the contract"},"nextOperatorUpdateId()":{"notice":"Next operator set update message ID"},"pause(uint256)":{"notice":"This function is used to pause an EigenLayer contract's functionality. It is permissioned to the `pauser` address, which is expected to be a low threshold multisig."},"pauseAll()":{"notice":"Alias for `pause(type(uint256).max)`."},"paused()":{"notice":"Returns the current paused status as a uint256."},"paused(uint8)":{"notice":"Returns 'true' if the `indexed`th bit of `_paused` is 1, and 'false' otherwise"},"pauserRegistry()":{"notice":"Address of the `PauserRegistry` contract that this contract defers to for determining access control (for pausing)."},"setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)":{"notice":"Sets the initial operator set"},"setPauserRegistry(address)":{"notice":"Allows the unpauser to set a new pauser registry"},"setQuorumThreshold(uint128)":{"notice":"Sets the operator set quorum weight threshold"},"unpause(uint256)":{"notice":"This function is used to unpause an EigenLayer contract's functionality. It is permissioned to the `unpauser` address, which is expected to be a high threshold multisig or governance contract."},"updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)":{"notice":"Gets a storage key value based on a rollup's state root in a block"},"updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":{"notice":"Updates the operator set through an operator set update message"},"updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":{"notice":"Updates a rollup's state root for a block height through a state root update message"}},"version":1}},"settings":{"remappings":["@eigenlayer/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","@eth-optimism/=node_modules/@eth-optimism/","@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/","@openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/","eigenlayer-middleware/=lib/eigenlayer-middleware/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":100},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/rollup/SFFLRegistryRollup.sol":"SFFLRegistryRollup"},"evmVersion":"london","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673","urls":["bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2","dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7","urls":["bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92","dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol":{"keccak256":"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f","urls":["bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324","dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol":{"keccak256":"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49","urls":["bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d","dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol":{"keccak256":"0xc543d34b3e0fd116227fc5218286de6b30a9141f47df2e8cc17d857d2c0cb338","urls":["bzz-raw://e78ca3c3c9f14ccde852ea41bc411726ea7770a1cf2ef18851e67bcdf7522cff","dweb:/ipfs/QmWagcWsaNZqBZhdEHhZ4PcU9fx5wQnrbjoaaFvjEwgGHt"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/libraries/BN254.sol":{"keccak256":"0x40a9a94aaa705b67d1c4efdccb8e1ff8ccf41d1ce20639f6cd6fd27d84891417","urls":["bzz-raw://4b7a07633fc3fce4d2eac8dc16ee2cf138e34583e1822d3d705d7c567667bf49","dweb:/ipfs/QmVWYp64T71yKnT2Bpoq4wj7bADUKmjW8w5uzhCTh5Bs91"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/codec/Lib_OVMCodec.sol":{"keccak256":"0xb5009ac1e0617e0b3b2fb917f08f8e8a7ae706034cc3a675258bc3d91978525e","urls":["bzz-raw://776f8407a5c3bcd0991801a922ea69a9665b14e85e6ac925ef9ec5dc5d0de87c","dweb:/ipfs/QmRE5yQd69rDDmPPo2TcFDoCzXtbodHgicQNoXiRCTsBJb"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/resolver/Lib_AddressManager.sol":{"keccak256":"0xcde9b29429d512c549f7c1b8a033f161fa71c18cda08b241748663854196ae14","urls":["bzz-raw://6fbd748ce0173bd14166174c68a43e108ec27d8f90cf3dc3703cda120b641e0b","dweb:/ipfs/QmT818AKJieRAndixSms9L7gmC7b1cvD4BGycUPtFpbWaM"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/resolver/Lib_AddressResolver.sol":{"keccak256":"0x515c4db671a28e2fe180201f6d11c0208c05f582ca3489fb6b8e81c27659bc62","urls":["bzz-raw://8c92c08efa7be210e9447267517c77ca39372b5bd33d121539ef1f59fac149fa","dweb:/ipfs/QmZ8V2Kaw7XqGhCCe2CAPMCPkHgcMGr92enXfXqGpBYw23"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPReader.sol":{"keccak256":"0xd794d1b32c6e31d40e2526b5e519de1b4e8d14d6933889f9b916e69c5d1848c6","urls":["bzz-raw://76a6d82cce64bf143f77249c49de3d93687a2b3e69b020f2f74fad503806b52b","dweb:/ipfs/QmUHF33h4Tn4Q4cVHwk82eMMer8YTDTk1u3e4MCfrSYt3J"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPWriter.sol":{"keccak256":"0x215b90672ce126effc3f2df61ca0cdf52d2b1cc9be602877e637829b0bf229fd","urls":["bzz-raw://7418707a22a792e838759becfa4ceb60774171a0a219cdd39452351225ec31a6","dweb:/ipfs/QmZWxL4DNv8EVZoJbLSf4euzQwhzyRduSia5cVFJo4Bxh2"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/trie/Lib_MerkleTrie.sol":{"keccak256":"0x081304d7627b242e0a5724785a9cc4128b3104460f234ffe404d7bc87c1ad162","urls":["bzz-raw://1891f18b4ac99bc8c1dcbe255bf9db1e5c724389c0fa533ca18a6039aa8fe9f7","dweb:/ipfs/QmW8GaMNvDeDQnjHAaAfv9wwjmtvjvEcQ9pyoxVmeK5x1x"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/trie/Lib_SecureMerkleTrie.sol":{"keccak256":"0x38e47070ba79b1049b6d623db3377322d98c2217e8fa786bd48116fc7e3bfd9e","urls":["bzz-raw://90c88905fa6495e230e8099e2d7e5ad08bc95466a54d1f0eb0cedcdbbf5bdb63","dweb:/ipfs/QmQVY4xxCLZC825mAgLjyaHEeHP4gPr65pN2SJCgPURDDA"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/utils/Lib_Bytes32Utils.sol":{"keccak256":"0xf2d1a526f2529e51fc2fffccf093c1691e291cbbb6de8a3da7d7f80024a9a234","urls":["bzz-raw://f3e0ff635f68c17f1b1a9b094a9da670dd1170241e67d8e87b00be2157f28ad6","dweb:/ipfs/QmS9fK2TZ123NE2iXAbUxfaasSPGbui5EG6HP9uz6gveiN"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/utils/Lib_BytesUtils.sol":{"keccak256":"0xc39ee13f97e4ccfbc72a5aac571deb3c1aff882fca2dd18be794d43ac5de0a30","urls":["bzz-raw://5c5761b5cf7287ac94404f54481d88ee0122bc031f1c2e0b4b2cc4c384e1b018","dweb:/ipfs/QmbBTssPvH5ABa3e8MNRoHMkGGaoRXqneWhJzrDx7FsD1R"],"license":"MIT"},"src/base/SFFLRegistryBase.sol":{"keccak256":"0x7f36c3b4792292004cd625caf96eb003dc1be3b24e7ab2f449be13f1b150ec31","urls":["bzz-raw://5e2a259efbc6542ac0badd7b3969a564c7f563742874bccd1c3b4ca12056bbd9","dweb:/ipfs/QmRDavGQa82t6B9rjtYXvPcAMWALLA4Uzd5ZT9YpgBXYyV"],"license":"MIT"},"src/base/message/OperatorSetUpdate.sol":{"keccak256":"0x534462101877424c2c233d4032582dbc5a430205d9362e81d1343dd9e9822e5e","urls":["bzz-raw://a99f49eb89a0b1c4447386e0e5bb065b78695a594621b22fd0fa1271311fba83","dweb:/ipfs/QmRyrpJDeeYMzLQTCwFkCHndSdYsujfFDhXPhpJN19HPRw"],"license":"MIT"},"src/base/message/StateRootUpdate.sol":{"keccak256":"0x678b218208110cf1d50201459ed67fb2e110c7313251ffa240465ecfce89e6a7","urls":["bzz-raw://dbae4e861fec0cbcdf7b98603ffc42e2a71034576ff4db50534d73e83e17523b","dweb:/ipfs/QmPWNZXWKaxTA8MJzSNX5Qtmw31rM4SrYgVJtQ9UjM2kFu"],"license":"MIT"},"src/base/utils/RollupOperators.sol":{"keccak256":"0xbfc1ca2ec06fb58629caa7bdf00fce61daaca1a58a3d50e7b4f69ddf1b132784","urls":["bzz-raw://853941dc11c18731968065c60851971e41e41d35471337d67eb3f92a28aa8ff6","dweb:/ipfs/Qma9YMpvp8X9B1Fe5Win3vyKGd3LPavEJQCLNpFDFg1MLb"],"license":"MIT"},"src/rollup/SFFLRegistryRollup.sol":{"keccak256":"0xf2d58f60a6869128f8ebf7c2f49b8515842fbafce49ce8d9e4c1214b3bb1a113","urls":["bzz-raw://9ffba4b68c3b53a3c6472fcc3e9fbb14a99575c6faa76fcaae3d7eeb754247d7","dweb:/ipfs/QmfD27QeaYNirGaZqkFPj5ceGiajnq57MYsCShmbk7Zsmn"],"license":"MIT"}},"version":1},"id":128} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"PAUSED_UPDATE_OPERATOR_SET","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"PAUSED_UPDATE_STATE_ROOT","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"THRESHOLD_DENOMINATOR","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"pure"},{"type":"function","name":"aggregator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"forceOperatorSetUpdate","inputs":[{"name":"message","type":"tuple","internalType":"struct OperatorSetUpdate.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"operators","type":"tuple[]","internalType":"struct RollupOperators.Operator[]","components":[{"name":"pubkey","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"weight","type":"uint128","internalType":"uint128"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getApk","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getOperatorWeight","inputs":[{"name":"pubkeyHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"getQuorumThreshold","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"getStateRoot","inputs":[{"name":"rollupId","type":"uint32","internalType":"uint32"},{"name":"blockHeight","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStorageValue","inputs":[{"name":"message","type":"tuple","internalType":"struct StateRootUpdate.Message","components":[{"name":"rollupId","type":"uint32","internalType":"uint32"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"nearDaTransactionId","type":"bytes32","internalType":"bytes32"},{"name":"nearDaCommitment","type":"bytes32","internalType":"bytes32"},{"name":"stateRoot","type":"bytes32","internalType":"bytes32"}]},{"name":"proofParams","type":"tuple","internalType":"struct SFFLRegistryBase.ProofParams","components":[{"name":"target","type":"address","internalType":"address"},{"name":"storageKey","type":"bytes32","internalType":"bytes32"},{"name":"stateTrieWitness","type":"bytes","internalType":"bytes"},{"name":"storageTrieWitness","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getTotalWeight","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"quorumThreshold","type":"uint128","internalType":"uint128"},{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_aggregator","type":"address","internalType":"address"},{"name":"_pauserRegistry","type":"address","internalType":"contract IPauserRegistry"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nextOperatorUpdateId","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[{"name":"newPausedStatus","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"pauseAll","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[{"name":"index","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"pauserRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPauserRegistry"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAggregator","inputs":[{"name":"_aggregator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setInitialOperatorSet","inputs":[{"name":"operators","type":"tuple[]","internalType":"struct RollupOperators.Operator[]","components":[{"name":"pubkey","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"weight","type":"uint128","internalType":"uint128"}]},{"name":"_nextOperatorUpdateId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPauserRegistry","inputs":[{"name":"newPauserRegistry","type":"address","internalType":"contract IPauserRegistry"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setQuorumThreshold","inputs":[{"name":"newQuorumThreshold","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unpause","inputs":[{"name":"newPausedStatus","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateAndGetStorageValue","inputs":[{"name":"message","type":"tuple","internalType":"struct StateRootUpdate.Message","components":[{"name":"rollupId","type":"uint32","internalType":"uint32"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"nearDaTransactionId","type":"bytes32","internalType":"bytes32"},{"name":"nearDaCommitment","type":"bytes32","internalType":"bytes32"},{"name":"stateRoot","type":"bytes32","internalType":"bytes32"}]},{"name":"proofParams","type":"tuple","internalType":"struct SFFLRegistryBase.ProofParams","components":[{"name":"target","type":"address","internalType":"address"},{"name":"storageKey","type":"bytes32","internalType":"bytes32"},{"name":"stateTrieWitness","type":"bytes","internalType":"bytes"},{"name":"storageTrieWitness","type":"bytes","internalType":"bytes"}]},{"name":"agreement","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"updateOperatorSet","inputs":[{"name":"message","type":"tuple","internalType":"struct OperatorSetUpdate.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"operators","type":"tuple[]","internalType":"struct RollupOperators.Operator[]","components":[{"name":"pubkey","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"weight","type":"uint128","internalType":"uint128"}]}]},{"name":"signatureInfo","type":"tuple","internalType":"struct RollupOperators.SignatureInfo","components":[{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateStateRoot","inputs":[{"name":"message","type":"tuple","internalType":"struct StateRootUpdate.Message","components":[{"name":"rollupId","type":"uint32","internalType":"uint32"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"nearDaTransactionId","type":"bytes32","internalType":"bytes32"},{"name":"nearDaCommitment","type":"bytes32","internalType":"bytes32"},{"name":"stateRoot","type":"bytes32","internalType":"bytes32"}]},{"name":"signatureInfo","type":"tuple","internalType":"struct RollupOperators.SignatureInfo","components":[{"name":"nonSignerPubkeys","type":"tuple[]","internalType":"struct BN254.G1Point[]","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"apkG2","type":"tuple","internalType":"struct BN254.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"sigma","type":"tuple","internalType":"struct BN254.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"newPausedStatus","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PauserRegistrySet","inputs":[{"name":"pauserRegistry","type":"address","indexed":false,"internalType":"contract IPauserRegistry"},{"name":"newPauserRegistry","type":"address","indexed":false,"internalType":"contract IPauserRegistry"}],"anonymous":false},{"type":"event","name":"StateRootUpdated","inputs":[{"name":"rollupId","type":"uint32","indexed":true,"internalType":"uint32"},{"name":"blockHeight","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"stateRoot","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"newPausedStatus","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61441480620000f46000396000f3fe608060405234801561001057600080fd5b506004361061018f5760003560e01c8063715018a6116100e4578063d5d4bb5a11610092578063d5d4bb5a14610377578063dd64766e1461038a578063e0f5d9f01461039d578063ef024458146103c8578063f2fde38b146103cf578063f4db0571146103e2578063f9120af6146103ea578063fabc1cbc146103fd57600080fd5b8063715018a6146102ff57806382616b7b14610307578063886f11951461031a5780638da5cb5b1461032d57806390540c371461033e578063b128aeee14610351578063b3a9e53b1461036457600080fd5b80632db52ea5116101415780632db52ea51461024d5780632f65284e146102605780634afa71b914610281578063595c6a67146102995780635ac86ab7146102a15780635c975abb146102d45780636f5b9918146102dc57600080fd5b80630510c1911461019457806306aba0e1146101b357806310d67a2f146101d8578063136439dd146101ed5780631df9e1d2146102005780631fb4d41114610213578063245a7bfc14610226575b600080fd5b61019c600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b0390911681526020016101aa565b6101eb6101e6366004613798565b610410565b005b6101eb6101fb3660046137b5565b6104cc565b6101eb61020e3660046137e6565b6105f9565b6101eb61022136600461383e565b6106ea565b60ce5461024090600160401b90046001600160a01b031681565b6040516101aa919061388c565b6101eb61025b3660046138b7565b610773565b61027361026e3660046138e4565b610786565b6040519081526020016101aa565b60cd54600160801b90046001600160801b03166101c0565b6101eb6108a5565b6102c46102af366004613987565b606654600160ff9092169190911b9081161490565b60405190151581526020016101aa565b606654610273565b6102e461095f565b604080518251815260209283015192810192909252016101aa565b6101eb610982565b6101eb6103153660046139aa565b610996565b606554610240906001600160a01b031681565b6033546001600160a01b0316610240565b6101eb61034c366004613a03565b610abb565b6101eb61035f366004613b51565b610c0b565b610273610372366004613c25565b610cef565b610273610385366004613c58565b610d20565b6101c06103983660046137b5565b610e79565b60ce546103b0906001600160401b031681565b6040516001600160401b0390911681526020016101aa565b60646101c0565b6101eb6103dd366004613798565b610e96565b61019c600081565b6101eb6103f8366004613798565b610f0c565b6101eb61040b3660046137b5565b610f40565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104879190613c9c565b6001600160a01b0316336001600160a01b0316146104c05760405162461bcd60e51b81526004016104b790613cb9565b60405180910390fd5b6104c981611097565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906104fc90339060040161388c565b602060405180830381865afa158015610519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053d9190613d03565b6105595760405162461bcd60e51b81526004016104b790613d25565b606654818116146105cd5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b60648201526084016104b7565b6066819055604051818152339060008051602061439f833981519152906020015b60405180910390a250565b61060161118e565b60ce546001600160401b031661061a6020830183613d6d565b6001600160401b0316146106405760405162461bcd60e51b81526004016104b790613d88565b61064d6020820182613d6d565b610658906001613dc8565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104c96106896040830183613df3565b808060200260200160405190810160405280939291908181526020016000905b828210156106d5576106c660608302860136819003810190613e42565b815260200190600101906106a9565b505050505060ca6111e890919063ffffffff16565b606654600190600290811614156107135760405162461bcd60e51b81526004016104b790613e5e565b61072861071f846113f1565b60ca9084611472565b6107445760405162461bcd60e51b81526004016104b790613e91565b61076e6107546020850185613eb9565b6107646040860160208701613d6d565b8560a0013561185c565b505050565b61077b61118e565b6104c960ca826118c2565b600060608501351580159061079e5750608085013515155b6107e55760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b60448201526064016104b7565b60006097816107f76020890189613eb9565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906108269190613d6d565b6001600160401b0316815260208101919091526040016000205490508061089157826108865760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b60448201526064016104b7565b61089186858561197b565b61089b8686610d20565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906108d590339060040161388c565b602060405180830381865afa1580156108f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109169190613d03565b6109325760405162461bcd60e51b81526004016104b790613d25565b6000196066819055604051908152339060008051602061439f8339815191529060200160405180910390a2565b61096761366f565b506040805180820190915260cb54815260cc54602082015290565b61098a61118e565b610994600061198c565b565b606654600090600190811614156109bf5760405162461bcd60e51b81526004016104b790613e5e565b60ce546001600160401b03166109d86020850185613d6d565b6001600160401b0316146109fe5760405162461bcd60e51b81526004016104b790613d88565b610a0a61071f846119de565b610a265760405162461bcd60e51b81526004016104b790613e91565b610a336020840184613d6d565b610a3e906001613dc8565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905561076e610a6f6040850185613df3565b808060200260200160405190810160405280939291908181526020016000905b828210156106d557610aac60608302860136819003810190613e42565b81526020019060010190610a8f565b600054610100900460ff1615808015610adb5750600054600160ff909116105b80610af55750303b158015610af5575060005460ff166001145b610b585760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104b7565b6000805460ff191660011790558015610b7b576000805461ff0019166101001790555b610b86826000611a12565b610b8f8461198c565b610b9a60ca866118c2565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610c04576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610c675760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b60448201526064016104b7565b60cd546001600160801b031615610cc05760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a656460448201526064016104b7565b610ccb60ca836111e8565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d336020870187613eb9565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610d629190613d6d565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610dd25760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b60448201526064016104b7565b610e71610de26020850185613798565b602085013583610df56040880188613ed4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e37925050506060890189613ed4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aea92505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610d1a565b610e9e61118e565b6001600160a01b038116610f035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b7565b6104c98161198c565b610f1461118e565b60ce80546001600160a01b03909216600160401b02600160401b600160e01b0319909216919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb79190613c9c565b6001600160a01b0316336001600160a01b031614610fe75760405162461bcd60e51b81526004016104b790613cb9565b6066541981196066541916146110605760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b60648201526084016104b7565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016105ee565b6001600160a01b0381166111255760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016104b7565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b7565b6111f0613689565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b84518110156113b65784818151811061123757611237613f1a565b6020026020010151935060006112628560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b0390811691168114156112ce5760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b60448201526064016104b7565b60208601516112dd8286613f30565b6112e79190613f58565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b03928316179055909450811661133257855161132b908690611c25565b945061135e565b60208601516001600160801b031661135e5761135b6113548760000151611cbc565b8690611c25565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a2505080806113ae90613f7a565b91505061121c565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016114259190613f95565b60405160208183030381529060405280519060200120604051602001611455929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820181905260038501549091906001600160801b0316806114e65760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a656460448201526064016104b7565b60006114f28580613fff565b90506001600160401b0381111561150b5761150b613a5d565b604051908082528060200260200182016040528015611534578160200160208202803683370190505b50905060005b6115448680613fff565b905081101561171d5761159761155a8780613fff565b8381811061156a5761156a613f1a565b9050604002018036038101906115809190614048565b805160009081526020918201519091526040902090565b8282815181106115a9576115a9613f1a565b6020908102919091010152801561164057816115c6600183614064565b815181106115d6576115d6613f1a565b602002602001015160001c8282815181106115f3576115f3613f1a565b602002602001015160001c116116405760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b60448201526064016104b7565b600088600001600084848151811061165a5761165a613f1a565b6020908102919091018101518252810191909152604001600020546001600160801b03169050806116c85760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b60448201526064016104b7565b6116fb6116d58880613fff565b848181106116e5576116e5613f1a565b9050604002018036038101906113549190614048565b94506117078185614064565b935050808061171590613f7a565b91505061153a565b5061174b61172a84611cbc565b6040805180820190915260018a0154815260028a0154602082015290611c25565b925060008061177e8886611767368b90038b0160208c016140ea565b611779368c90038c0160a08d01614048565b611d4b565b91509150816117cf5760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c6564000060448201526064016104b7565b806118135760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b60448201526064016104b7565b6003890154606490611837906001600160801b03600160801b820481169116614129565b611841919061416e565b6001600160801b0316841015955050505050505b9392505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b038216111561192e5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b60648201526084016104b7565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b8161198684826106ea565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f826040516020016114259190614194565b6065546001600160a01b0316158015611a3357506001600160a01b03821615155b611ab55760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016104b7565b6066819055604051818152339060008051602061439f8339815191529060200160405180910390a2611ae682611097565b5050565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611b2a906034016040516020818303038152906040528688611eaa565b9150915081611b745760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016104b7565b6000611b7f82611ed3565b9050600080611bb48a604051602001611b9a91815260200190565b604051602081830303815290604052888560400151611eaa565b9150915081611c055760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f742065786973740000000060448201526064016104b7565b611c16611c1182611f97565b611faa565b9b9a5050505050505050505050565b611c2d61366f565b611c356136a9565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611c7457611c76565bfe5b5080611cb45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104b7565b505092915050565b611cc461366f565b8151158015611cd557506020820151155b15611cf3575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206143bf8339815191528460200151611d26919061426c565b611d3e906000805160206143bf833981519152614064565b905292915050565b919050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611d9357611d93613f1a565b60200201518951600160200201518a60200151600060028110611db857611db8613f1a565b60200201518b60200151600160028110611dd457611dd4613f1a565b602090810291909101518c518d830151604051611e319a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611e54919061426c565b9050611e9c611e666113548884611fd9565b611e6e612055565b611e92611e8385611e7d612115565b90611fd9565b611e8c8c612136565b90611c25565b886201d4c06121ba565b909890975095505050505050565b600060606000611eb9866123de565b9050611ec6818686612410565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611f00836124eb565b90506040518060800160405280611f3083600081518110611f2357611f23613f1a565b60200260200101516124fe565b8152602001611f4b83600181518110611f2357611f23613f1a565b8152602001611f7383600281518110611f6657611f66613f1a565b6020026020010151612505565b8152602001611f8e83600381518110611f6657611f66613f1a565b90529392505050565b6060610d1a611fa5836125a7565b6125d4565b6000806000602084511115611fc0576020611fc3565b83515b60209485015194036008029390931c9392505050565b611fe161366f565b611fe96136c7565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611c74575080611cb45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104b7565b61205d6136e5565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b61211d61366f565b5060408051808201909152600181526002602082015290565b61213e61366f565b6000808061215a6000805160206143bf8339815191528661426c565b90505b6121668161265f565b90935091506000805160206143bf8339815191528283098314156121a0576040805180820190915290815260208101919091529392505050565b6000805160206143bf83398151915260018208905061215d565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906121ec61370a565b60005b60028110156123b1576000612205826006614280565b905084826002811061221957612219613f1a565b6020020151518361222b83600061429f565b600c811061223b5761223b613f1a565b602002015284826002811061225257612252613f1a565b60200201516020015183826001612269919061429f565b600c811061227957612279613f1a565b602002015283826002811061229057612290613f1a565b60200201515151836122a383600261429f565b600c81106122b3576122b3613f1a565b60200201528382600281106122ca576122ca613f1a565b60200201515160016020020151836122e383600361429f565b600c81106122f3576122f3613f1a565b602002015283826002811061230a5761230a613f1a565b60200201516020015160006002811061232557612325613f1a565b60200201518361233683600461429f565b600c811061234657612346613f1a565b602002015283826002811061235d5761235d613f1a565b60200201516020015160016002811061237857612378613f1a565b60200201518361238983600561429f565b600c811061239957612399613f1a565b602002015250806123a981613f7a565b9150506121ef565b506123ba613729565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606081805190602001206040516020016123fa91815260200190565b6040516020818303038152906040529050919050565b60006060600061241f856126e1565b90506000806000612431848a896127db565b815192955090935091501580806124455750815b6124915760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e00000000000060448201526064016104b7565b6000816124ad57604051806020016040528060008152506124d9565b6124d9866124bc600188614064565b815181106124cc576124cc613f1a565b6020026020010151612bff565b919b919a509098505050505050505050565b6060610d1a6124f9836125a7565b612c29565b6000610d1a825b600060218260000151111561252c5760405162461bcd60e51b81526004016104b7906142b7565b600080600061253a85612e0f565b919450925090506000816001811115612555576125556142ee565b146125725760405162461bcd60e51b81526004016104b7906142b7565b6000838660200151612584919061429f565b8051909150602084101561089b5760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b606060008060006125e485612e0f565b9194509250905060008160018111156125ff576125ff6142ee565b146126475760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b60448201526064016104b7565b61265685602001518484613145565b95945050505050565b600080806000805160206143bf83398151915260036000805160206143bf833981519152866000805160206143bf8339815191528889090908905060006126d5827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f526000805160206143bf833981519152613223565b91959194509092505050565b606060006126ee836124eb565b9050600081516001600160401b0381111561270b5761270b613a5d565b60405190808252806020026020018201604052801561275057816020015b60408051808201909152606080825260208201528152602001906001900390816127295790505b50905060005b82518110156127d357600061278384838151811061277657612776613f1a565b60200260200101516125d4565b9050604051806040016040528082815260200161279f836124eb565b8152508383815181106127b4576127b4613f1a565b60200260200101819052505080806127cb90613f7a565b915050612756565b509392505050565b600060608180806127eb876132cb565b90506000869050600080612812604051806040016040528060608152602001606081525090565b60005b8c51811015612bd7578c818151811061283057612830613f1a565b602002602001015191508284612846919061429f565b935061285360018861429f565b9650836128ab578151805160209091012085146128a65760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b60448201526064016104b7565b612968565b81515160201161290d578151805160209091012085146128a65760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c2068617368000000000060448201526064016104b7565b8461291b8360000151613405565b146129685760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f6465206861736800000000000060448201526064016104b7565b6129746010600161429f565b82602001515114156129ed57855184141561298e57612bd7565b60008685815181106129a2576129a2613f1a565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106129cd576129cd613f1a565b602002602001015190506129e08161342d565b9650600194505050612bc5565b60028260200151511415612b7d576000612a0683613463565b9050600081600081518110612a1d57612a1d613f1a565b016020015160f81c90506000612a34600283614304565b612a3f906002614326565b90506000612a50848360ff16613487565b90506000612a5e8b8a613487565b90506000612a6c83836134bd565b905060ff851660021480612a83575060ff85166003145b15612abd57808351148015612a985750808251145b15612aaa57612aa7818b61429f565b99505b50600160ff1b9950612bd7945050505050565b60ff85161580612ad0575060ff85166001145b15612b265782518114612af05750600160ff1b9950612bd7945050505050565b612b178860200151600181518110612b0a57612b0a613f1a565b602002602001015161342d565b9a509750612bc5945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b60648201526084016104b7565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e00000060448201526064016104b7565b80612bcf81613f7a565b915050612815565b50600160ff1b841486612bea8786613487565b909e909d50909b509950505050505050505050565b60208101518051606091610d1a91612c1990600190614064565b8151811061277657612776613f1a565b6060600080612c3784612e0f565b91935090915060019050816001811115612c5357612c536142ee565b14612c9a5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b60448201526064016104b7565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612cb35790505090506000835b8651811015612e045760208210612d4c5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b60648201526084016104b7565b600080612d896040518060400160405280858c60000151612d6d9190614064565b8152602001858c60200151612d82919061429f565b9052612e0f565b509150915060405180604001604052808383612da5919061429f565b8152602001848b60200151612dba919061429f565b815250858581518110612dcf57612dcf613f1a565b6020908102919091010152612de560018561429f565b9350612df1818361429f565b612dfb908461429f565b92505050612ce0565b508152949350505050565b600080600080846000015111612e625760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b60448201526064016104b7565b6020840151805160001a607f8111612e8757600060016000945094509450505061313e565b60b78111612eff576000612e9c608083614064565b905080876000015111612eed5760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b60448201526064016104b7565b6001955093506000925061313e915050565b60bf8111612fe9576000612f1460b783614064565b905080876000015111612f695760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e0060448201526064016104b7565b600183015160208290036101000a9004612f83818361429f565b885111612fcd5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b60448201526064016104b7565b612fd882600161429f565b965094506000935061313e92505050565b60f7811161305e576000612ffe60c083614064565b90508087600001511161304d5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b60448201526064016104b7565b60019550935084925061313e915050565b600061306b60f783614064565b9050808760000151116130c05760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e00000060448201526064016104b7565b600183015160208290036101000a90046130da818361429f565b8851116131225760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b60448201526064016104b7565b61312d82600161429f565b965094506001935061313e92505050565b9193909250565b60606000826001600160401b0381111561316157613161613a5d565b6040519080825280601f01601f19166020018201604052801561318b576020820181803683370190505b50905080516000141561319f579050611855565b60006131ab858761429f565b90506020820160005b6131bf602087614349565b8110156131f657825182526131d560208461429f565b92506131e260208361429f565b9150806131ee81613f7a565b9150506131b4565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60008061322e613729565b613236613747565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611c745750826132c05760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016104b7565b505195945050505050565b60606000825160026132dd9190614280565b6001600160401b038111156132f4576132f4613a5d565b6040519080825280601f01601f19166020018201604052801561331e576020820181803683370190505b50905060005b83518110156133fe57600484828151811061334157613341613f1a565b01602001516001600160f81b031916901c8261335e836002614280565b8151811061336e5761336e613f1a565b60200101906001600160f81b031916908160001a905350601084828151811061339957613399613f1a565b01602001516133ab919060f81c614304565b60f81b826133ba836002614280565b6133c590600161429f565b815181106133d5576133d5613f1a565b60200101906001600160f81b031916908160001a905350806133f681613f7a565b915050613324565b5092915050565b600060208251101561341957506020015190565b81806020019051810190610d1a919061435d565b6000606060208360000151101561344e5761344783613539565b905061345a565b613457836125d4565b90505b61185581613405565b6060610d1a613482836020015160008151811061277657612776613f1a565b6132cb565b6060825182106134a65750604080516020810190915260008152610d1a565b61185583838486516134b89190614064565b613544565b6000805b8084511180156134d15750808351115b801561352257508281815181106134ea576134ea613f1a565b602001015160f81c60f81b6001600160f81b03191684828151811061351157613511613f1a565b01602001516001600160f81b031916145b15611855578061353181613f7a565b9150506134c1565b6060610d1a82613659565b60608161355281601f61429f565b10156135705760405162461bcd60e51b81526004016104b790614376565b8261357b838261429f565b10156135995760405162461bcd60e51b81526004016104b790614376565b6135a3828461429f565b845110156135e75760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016104b7565b6060821580156136065760405191506000825260208201604052613650565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561363f578051835260209283019201613627565b5050858452601f01601f1916604052505b50949350505050565b6060610d1a826020015160008460000151613145565b604051806040016040528060008152602001600081525090565b604051806040016040528061369c61366f565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806136f8613765565b8152602001613705613765565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104c957600080fd5b6000602082840312156137aa57600080fd5b813561185581613783565b6000602082840312156137c757600080fd5b5035919050565b6000606082840312156137e057600080fd5b50919050565b6000602082840312156137f857600080fd5b81356001600160401b0381111561380e57600080fd5b610e71848285016137ce565b600060c082840312156137e057600080fd5b600060e082840312156137e057600080fd5b60008060e0838503121561385157600080fd5b61385b848461381a565b915060c08301356001600160401b0381111561387657600080fd5b6138828582860161382c565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611d4657600080fd5b6000602082840312156138c957600080fd5b611855826138a0565b6000608082840312156137e057600080fd5b60008060008061010085870312156138fb57600080fd5b613905868661381a565b935060c08501356001600160401b038082111561392157600080fd5b61392d888389016138d2565b945060e087013591508082111561394357600080fd5b818701915087601f83011261395757600080fd5b81358181111561396657600080fd5b88602082850101111561397857600080fd5b95989497505060200194505050565b60006020828403121561399957600080fd5b813560ff8116811461185557600080fd5b600080604083850312156139bd57600080fd5b82356001600160401b03808211156139d457600080fd5b6139e0868387016137ce565b935060208501359150808211156139f657600080fd5b506138828582860161382c565b60008060008060808587031215613a1957600080fd5b613a22856138a0565b93506020850135613a3281613783565b92506040850135613a4281613783565b91506060850135613a5281613783565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a9557613a95613a5d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613ac357613ac3613a5d565b604052919050565b600060408284031215613add57600080fd5b613ae5613a73565b9050813581526020820135602082015292915050565b600060608284031215613b0d57600080fd5b613b15613a73565b9050613b218383613acb565b8152613b2f604083016138a0565b602082015292915050565b80356001600160401b0381168114611d4657600080fd5b60008060408385031215613b6457600080fd5b82356001600160401b0380821115613b7b57600080fd5b818501915085601f830112613b8f57600080fd5b8135602082821115613ba357613ba3613a5d565b613bb1818360051b01613a9b565b82815281810193506060928302850182019289841115613bd057600080fd5b948201945b83861015613bf657613be78a87613afb565b85529485019493820193613bd5565b509550613c04878201613b3a565b9450505050509250929050565b803563ffffffff81168114611d4657600080fd5b60008060408385031215613c3857600080fd5b613c4183613c11565b9150613c4f60208401613b3a565b90509250929050565b60008060e08385031215613c6b57600080fd5b613c75848461381a565b915060c08301356001600160401b03811115613c9057600080fd5b613882858286016138d2565b600060208284031215613cae57600080fd5b815161185581613783565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613d1557600080fd5b8151801515811461185557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613d7f57600080fd5b61185582613b3a565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613dea57613dea613db2565b01949350505050565b6000808335601e19843603018112613e0a57600080fd5b8301803591506001600160401b03821115613e2457600080fd5b6020019150606081023603821315613e3b57600080fd5b9250929050565b600060608284031215613e5457600080fd5b6118558383613afb565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613ecb57600080fd5b61185582613c11565b6000808335601e19843603018112613eeb57600080fd5b8301803591506001600160401b03821115613f0557600080fd5b602001915036819003821315613e3b57600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613f5057613f50613db2565b039392505050565b60006001600160801b03828116848216808303821115613dea57613dea613db2565b6000600019821415613f8e57613f8e613db2565b5060010190565b60c0810163ffffffff613fa784613c11565b168252613fb660208401613b3a565b6001600160401b03808216602085015280613fd360408701613b3a565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e1984360301811261401657600080fd5b8301803591506001600160401b0382111561403057600080fd5b6020019150600681901b3603821315613e3b57600080fd5b60006040828403121561405a57600080fd5b6118558383613acb565b60008282101561407657614076613db2565b500390565b600082601f83011261408c57600080fd5b604051604081018181106001600160401b03821117156140ae576140ae613a5d565b80604052508060408401858111156140c557600080fd5b845b818110156140df5780358352602092830192016140c7565b509195945050505050565b6000608082840312156140fc57600080fd5b614104613a73565b61410e848461407b565b815261411d846040850161407b565b60208201529392505050565b60006001600160801b038281168482168115158284048211161561414f5761414f613db2565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061418857614188614158565b92169190910492915050565b60006020808352608083016001600160401b03806141b187613b3a565b16838601526141c1838701613b3a565b604082821681880152808801359150601e198836030182126141e257600080fd5b908701908135838111156141f557600080fd5b60609350838102360389131561420a57600080fd5b87840184905293849052908401926000919060a088015b8184101561425f578535815286860135878201526001600160801b036142488488016138a0565b168184015294840194600193909301928401614221565b9998505050505050505050565b60008261427b5761427b614158565b500690565b600081600019048311821515161561429a5761429a613db2565b500290565b600082198211156142b2576142b2613db2565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff83168061431757614317614158565b8060ff84160691505092915050565b600060ff821660ff84168082101561434057614340613db2565b90039392505050565b60008261435857614358614158565b500490565b60006020828403121561436f57600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220fdfa99bdec7bb54cf2840cc043d0340ddf6031f4ac0ec2cdb06fff0ff26140c564736f6c634300080c0033","sourceMap":"1185:6563:108:-:0;;;2233:53;;;;;;;;;-1:-1:-1;2257:22:108;:20;:22::i;:::-;1185:6563;;5388:279:1;5456:13;;;;;;;5455:14;5447:66;;;;-1:-1:-1;;;5447:66:1;;216:2:110;5447:66:1;;;198:21:110;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:110;;;338:37;392:19;;5447:66:1;;;;;;;;5527:12;;5542:15;5527:12;;;:30;5523:138;;;5573:12;:30;;-1:-1:-1;;5573:30:1;5588:15;5573:30;;;;;;5622:28;;564:36:110;;;5622:28:1;;552:2:110;537:18;5622:28:1;;;;;;;5523:138;5388:279::o;422:184:110:-;1185:6563:108;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b506004361061018f5760003560e01c8063715018a6116100e4578063d5d4bb5a11610092578063d5d4bb5a14610377578063dd64766e1461038a578063e0f5d9f01461039d578063ef024458146103c8578063f2fde38b146103cf578063f4db0571146103e2578063f9120af6146103ea578063fabc1cbc146103fd57600080fd5b8063715018a6146102ff57806382616b7b14610307578063886f11951461031a5780638da5cb5b1461032d57806390540c371461033e578063b128aeee14610351578063b3a9e53b1461036457600080fd5b80632db52ea5116101415780632db52ea51461024d5780632f65284e146102605780634afa71b914610281578063595c6a67146102995780635ac86ab7146102a15780635c975abb146102d45780636f5b9918146102dc57600080fd5b80630510c1911461019457806306aba0e1146101b357806310d67a2f146101d8578063136439dd146101ed5780631df9e1d2146102005780631fb4d41114610213578063245a7bfc14610226575b600080fd5b61019c600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b0390911681526020016101aa565b6101eb6101e6366004613798565b610410565b005b6101eb6101fb3660046137b5565b6104cc565b6101eb61020e3660046137e6565b6105f9565b6101eb61022136600461383e565b6106ea565b60ce5461024090600160401b90046001600160a01b031681565b6040516101aa919061388c565b6101eb61025b3660046138b7565b610773565b61027361026e3660046138e4565b610786565b6040519081526020016101aa565b60cd54600160801b90046001600160801b03166101c0565b6101eb6108a5565b6102c46102af366004613987565b606654600160ff9092169190911b9081161490565b60405190151581526020016101aa565b606654610273565b6102e461095f565b604080518251815260209283015192810192909252016101aa565b6101eb610982565b6101eb6103153660046139aa565b610996565b606554610240906001600160a01b031681565b6033546001600160a01b0316610240565b6101eb61034c366004613a03565b610abb565b6101eb61035f366004613b51565b610c0b565b610273610372366004613c25565b610cef565b610273610385366004613c58565b610d20565b6101c06103983660046137b5565b610e79565b60ce546103b0906001600160401b031681565b6040516001600160401b0390911681526020016101aa565b60646101c0565b6101eb6103dd366004613798565b610e96565b61019c600081565b6101eb6103f8366004613798565b610f0c565b6101eb61040b3660046137b5565b610f40565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104879190613c9c565b6001600160a01b0316336001600160a01b0316146104c05760405162461bcd60e51b81526004016104b790613cb9565b60405180910390fd5b6104c981611097565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906104fc90339060040161388c565b602060405180830381865afa158015610519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053d9190613d03565b6105595760405162461bcd60e51b81526004016104b790613d25565b606654818116146105cd5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b60648201526084016104b7565b6066819055604051818152339060008051602061439f833981519152906020015b60405180910390a250565b61060161118e565b60ce546001600160401b031661061a6020830183613d6d565b6001600160401b0316146106405760405162461bcd60e51b81526004016104b790613d88565b61064d6020820182613d6d565b610658906001613dc8565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104c96106896040830183613df3565b808060200260200160405190810160405280939291908181526020016000905b828210156106d5576106c660608302860136819003810190613e42565b815260200190600101906106a9565b505050505060ca6111e890919063ffffffff16565b606654600190600290811614156107135760405162461bcd60e51b81526004016104b790613e5e565b61072861071f846113f1565b60ca9084611472565b6107445760405162461bcd60e51b81526004016104b790613e91565b61076e6107546020850185613eb9565b6107646040860160208701613d6d565b8560a0013561185c565b505050565b61077b61118e565b6104c960ca826118c2565b600060608501351580159061079e5750608085013515155b6107e55760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b60448201526064016104b7565b60006097816107f76020890189613eb9565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906108269190613d6d565b6001600160401b0316815260208101919091526040016000205490508061089157826108865760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b60448201526064016104b7565b61089186858561197b565b61089b8686610d20565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906108d590339060040161388c565b602060405180830381865afa1580156108f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109169190613d03565b6109325760405162461bcd60e51b81526004016104b790613d25565b6000196066819055604051908152339060008051602061439f8339815191529060200160405180910390a2565b61096761366f565b506040805180820190915260cb54815260cc54602082015290565b61098a61118e565b610994600061198c565b565b606654600090600190811614156109bf5760405162461bcd60e51b81526004016104b790613e5e565b60ce546001600160401b03166109d86020850185613d6d565b6001600160401b0316146109fe5760405162461bcd60e51b81526004016104b790613d88565b610a0a61071f846119de565b610a265760405162461bcd60e51b81526004016104b790613e91565b610a336020840184613d6d565b610a3e906001613dc8565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905561076e610a6f6040850185613df3565b808060200260200160405190810160405280939291908181526020016000905b828210156106d557610aac60608302860136819003810190613e42565b81526020019060010190610a8f565b600054610100900460ff1615808015610adb5750600054600160ff909116105b80610af55750303b158015610af5575060005460ff166001145b610b585760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104b7565b6000805460ff191660011790558015610b7b576000805461ff0019166101001790555b610b86826000611a12565b610b8f8461198c565b610b9a60ca866118c2565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610c04576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610c675760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b60448201526064016104b7565b60cd546001600160801b031615610cc05760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a656460448201526064016104b7565b610ccb60ca836111e8565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d336020870187613eb9565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610d629190613d6d565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610dd25760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b60448201526064016104b7565b610e71610de26020850185613798565b602085013583610df56040880188613ed4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e37925050506060890189613ed4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aea92505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610d1a565b610e9e61118e565b6001600160a01b038116610f035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b7565b6104c98161198c565b610f1461118e565b60ce80546001600160a01b03909216600160401b02600160401b600160e01b0319909216919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb79190613c9c565b6001600160a01b0316336001600160a01b031614610fe75760405162461bcd60e51b81526004016104b790613cb9565b6066541981196066541916146110605760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b60648201526084016104b7565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016105ee565b6001600160a01b0381166111255760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016104b7565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b7565b6111f0613689565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b84518110156113b65784818151811061123757611237613f1a565b6020026020010151935060006112628560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b0390811691168114156112ce5760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b60448201526064016104b7565b60208601516112dd8286613f30565b6112e79190613f58565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b03928316179055909450811661133257855161132b908690611c25565b945061135e565b60208601516001600160801b031661135e5761135b6113548760000151611cbc565b8690611c25565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a2505080806113ae90613f7a565b91505061121c565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016114259190613f95565b60405160208183030381529060405280519060200120604051602001611455929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820181905260038501549091906001600160801b0316806114e65760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a656460448201526064016104b7565b60006114f28580613fff565b90506001600160401b0381111561150b5761150b613a5d565b604051908082528060200260200182016040528015611534578160200160208202803683370190505b50905060005b6115448680613fff565b905081101561171d5761159761155a8780613fff565b8381811061156a5761156a613f1a565b9050604002018036038101906115809190614048565b805160009081526020918201519091526040902090565b8282815181106115a9576115a9613f1a565b6020908102919091010152801561164057816115c6600183614064565b815181106115d6576115d6613f1a565b602002602001015160001c8282815181106115f3576115f3613f1a565b602002602001015160001c116116405760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b60448201526064016104b7565b600088600001600084848151811061165a5761165a613f1a565b6020908102919091018101518252810191909152604001600020546001600160801b03169050806116c85760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b60448201526064016104b7565b6116fb6116d58880613fff565b848181106116e5576116e5613f1a565b9050604002018036038101906113549190614048565b94506117078185614064565b935050808061171590613f7a565b91505061153a565b5061174b61172a84611cbc565b6040805180820190915260018a0154815260028a0154602082015290611c25565b925060008061177e8886611767368b90038b0160208c016140ea565b611779368c90038c0160a08d01614048565b611d4b565b91509150816117cf5760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c6564000060448201526064016104b7565b806118135760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b60448201526064016104b7565b6003890154606490611837906001600160801b03600160801b820481169116614129565b611841919061416e565b6001600160801b0316841015955050505050505b9392505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b038216111561192e5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b60648201526084016104b7565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b8161198684826106ea565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f826040516020016114259190614194565b6065546001600160a01b0316158015611a3357506001600160a01b03821615155b611ab55760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016104b7565b6066819055604051818152339060008051602061439f8339815191529060200160405180910390a2611ae682611097565b5050565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611b2a906034016040516020818303038152906040528688611eaa565b9150915081611b745760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016104b7565b6000611b7f82611ed3565b9050600080611bb48a604051602001611b9a91815260200190565b604051602081830303815290604052888560400151611eaa565b9150915081611c055760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f742065786973740000000060448201526064016104b7565b611c16611c1182611f97565b611faa565b9b9a5050505050505050505050565b611c2d61366f565b611c356136a9565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611c7457611c76565bfe5b5080611cb45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104b7565b505092915050565b611cc461366f565b8151158015611cd557506020820151155b15611cf3575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206143bf8339815191528460200151611d26919061426c565b611d3e906000805160206143bf833981519152614064565b905292915050565b919050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611d9357611d93613f1a565b60200201518951600160200201518a60200151600060028110611db857611db8613f1a565b60200201518b60200151600160028110611dd457611dd4613f1a565b602090810291909101518c518d830151604051611e319a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611e54919061426c565b9050611e9c611e666113548884611fd9565b611e6e612055565b611e92611e8385611e7d612115565b90611fd9565b611e8c8c612136565b90611c25565b886201d4c06121ba565b909890975095505050505050565b600060606000611eb9866123de565b9050611ec6818686612410565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611f00836124eb565b90506040518060800160405280611f3083600081518110611f2357611f23613f1a565b60200260200101516124fe565b8152602001611f4b83600181518110611f2357611f23613f1a565b8152602001611f7383600281518110611f6657611f66613f1a565b6020026020010151612505565b8152602001611f8e83600381518110611f6657611f66613f1a565b90529392505050565b6060610d1a611fa5836125a7565b6125d4565b6000806000602084511115611fc0576020611fc3565b83515b60209485015194036008029390931c9392505050565b611fe161366f565b611fe96136c7565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611c74575080611cb45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104b7565b61205d6136e5565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b61211d61366f565b5060408051808201909152600181526002602082015290565b61213e61366f565b6000808061215a6000805160206143bf8339815191528661426c565b90505b6121668161265f565b90935091506000805160206143bf8339815191528283098314156121a0576040805180820190915290815260208101919091529392505050565b6000805160206143bf83398151915260018208905061215d565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906121ec61370a565b60005b60028110156123b1576000612205826006614280565b905084826002811061221957612219613f1a565b6020020151518361222b83600061429f565b600c811061223b5761223b613f1a565b602002015284826002811061225257612252613f1a565b60200201516020015183826001612269919061429f565b600c811061227957612279613f1a565b602002015283826002811061229057612290613f1a565b60200201515151836122a383600261429f565b600c81106122b3576122b3613f1a565b60200201528382600281106122ca576122ca613f1a565b60200201515160016020020151836122e383600361429f565b600c81106122f3576122f3613f1a565b602002015283826002811061230a5761230a613f1a565b60200201516020015160006002811061232557612325613f1a565b60200201518361233683600461429f565b600c811061234657612346613f1a565b602002015283826002811061235d5761235d613f1a565b60200201516020015160016002811061237857612378613f1a565b60200201518361238983600561429f565b600c811061239957612399613f1a565b602002015250806123a981613f7a565b9150506121ef565b506123ba613729565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606081805190602001206040516020016123fa91815260200190565b6040516020818303038152906040529050919050565b60006060600061241f856126e1565b90506000806000612431848a896127db565b815192955090935091501580806124455750815b6124915760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e00000000000060448201526064016104b7565b6000816124ad57604051806020016040528060008152506124d9565b6124d9866124bc600188614064565b815181106124cc576124cc613f1a565b6020026020010151612bff565b919b919a509098505050505050505050565b6060610d1a6124f9836125a7565b612c29565b6000610d1a825b600060218260000151111561252c5760405162461bcd60e51b81526004016104b7906142b7565b600080600061253a85612e0f565b919450925090506000816001811115612555576125556142ee565b146125725760405162461bcd60e51b81526004016104b7906142b7565b6000838660200151612584919061429f565b8051909150602084101561089b5760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b606060008060006125e485612e0f565b9194509250905060008160018111156125ff576125ff6142ee565b146126475760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b60448201526064016104b7565b61265685602001518484613145565b95945050505050565b600080806000805160206143bf83398151915260036000805160206143bf833981519152866000805160206143bf8339815191528889090908905060006126d5827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f526000805160206143bf833981519152613223565b91959194509092505050565b606060006126ee836124eb565b9050600081516001600160401b0381111561270b5761270b613a5d565b60405190808252806020026020018201604052801561275057816020015b60408051808201909152606080825260208201528152602001906001900390816127295790505b50905060005b82518110156127d357600061278384838151811061277657612776613f1a565b60200260200101516125d4565b9050604051806040016040528082815260200161279f836124eb565b8152508383815181106127b4576127b4613f1a565b60200260200101819052505080806127cb90613f7a565b915050612756565b509392505050565b600060608180806127eb876132cb565b90506000869050600080612812604051806040016040528060608152602001606081525090565b60005b8c51811015612bd7578c818151811061283057612830613f1a565b602002602001015191508284612846919061429f565b935061285360018861429f565b9650836128ab578151805160209091012085146128a65760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b60448201526064016104b7565b612968565b81515160201161290d578151805160209091012085146128a65760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c2068617368000000000060448201526064016104b7565b8461291b8360000151613405565b146129685760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f6465206861736800000000000060448201526064016104b7565b6129746010600161429f565b82602001515114156129ed57855184141561298e57612bd7565b60008685815181106129a2576129a2613f1a565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106129cd576129cd613f1a565b602002602001015190506129e08161342d565b9650600194505050612bc5565b60028260200151511415612b7d576000612a0683613463565b9050600081600081518110612a1d57612a1d613f1a565b016020015160f81c90506000612a34600283614304565b612a3f906002614326565b90506000612a50848360ff16613487565b90506000612a5e8b8a613487565b90506000612a6c83836134bd565b905060ff851660021480612a83575060ff85166003145b15612abd57808351148015612a985750808251145b15612aaa57612aa7818b61429f565b99505b50600160ff1b9950612bd7945050505050565b60ff85161580612ad0575060ff85166001145b15612b265782518114612af05750600160ff1b9950612bd7945050505050565b612b178860200151600181518110612b0a57612b0a613f1a565b602002602001015161342d565b9a509750612bc5945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b60648201526084016104b7565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e00000060448201526064016104b7565b80612bcf81613f7a565b915050612815565b50600160ff1b841486612bea8786613487565b909e909d50909b509950505050505050505050565b60208101518051606091610d1a91612c1990600190614064565b8151811061277657612776613f1a565b6060600080612c3784612e0f565b91935090915060019050816001811115612c5357612c536142ee565b14612c9a5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b60448201526064016104b7565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612cb35790505090506000835b8651811015612e045760208210612d4c5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b60648201526084016104b7565b600080612d896040518060400160405280858c60000151612d6d9190614064565b8152602001858c60200151612d82919061429f565b9052612e0f565b509150915060405180604001604052808383612da5919061429f565b8152602001848b60200151612dba919061429f565b815250858581518110612dcf57612dcf613f1a565b6020908102919091010152612de560018561429f565b9350612df1818361429f565b612dfb908461429f565b92505050612ce0565b508152949350505050565b600080600080846000015111612e625760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b60448201526064016104b7565b6020840151805160001a607f8111612e8757600060016000945094509450505061313e565b60b78111612eff576000612e9c608083614064565b905080876000015111612eed5760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b60448201526064016104b7565b6001955093506000925061313e915050565b60bf8111612fe9576000612f1460b783614064565b905080876000015111612f695760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e0060448201526064016104b7565b600183015160208290036101000a9004612f83818361429f565b885111612fcd5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b60448201526064016104b7565b612fd882600161429f565b965094506000935061313e92505050565b60f7811161305e576000612ffe60c083614064565b90508087600001511161304d5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b60448201526064016104b7565b60019550935084925061313e915050565b600061306b60f783614064565b9050808760000151116130c05760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e00000060448201526064016104b7565b600183015160208290036101000a90046130da818361429f565b8851116131225760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b60448201526064016104b7565b61312d82600161429f565b965094506001935061313e92505050565b9193909250565b60606000826001600160401b0381111561316157613161613a5d565b6040519080825280601f01601f19166020018201604052801561318b576020820181803683370190505b50905080516000141561319f579050611855565b60006131ab858761429f565b90506020820160005b6131bf602087614349565b8110156131f657825182526131d560208461429f565b92506131e260208361429f565b9150806131ee81613f7a565b9150506131b4565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60008061322e613729565b613236613747565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611c745750826132c05760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016104b7565b505195945050505050565b60606000825160026132dd9190614280565b6001600160401b038111156132f4576132f4613a5d565b6040519080825280601f01601f19166020018201604052801561331e576020820181803683370190505b50905060005b83518110156133fe57600484828151811061334157613341613f1a565b01602001516001600160f81b031916901c8261335e836002614280565b8151811061336e5761336e613f1a565b60200101906001600160f81b031916908160001a905350601084828151811061339957613399613f1a565b01602001516133ab919060f81c614304565b60f81b826133ba836002614280565b6133c590600161429f565b815181106133d5576133d5613f1a565b60200101906001600160f81b031916908160001a905350806133f681613f7a565b915050613324565b5092915050565b600060208251101561341957506020015190565b81806020019051810190610d1a919061435d565b6000606060208360000151101561344e5761344783613539565b905061345a565b613457836125d4565b90505b61185581613405565b6060610d1a613482836020015160008151811061277657612776613f1a565b6132cb565b6060825182106134a65750604080516020810190915260008152610d1a565b61185583838486516134b89190614064565b613544565b6000805b8084511180156134d15750808351115b801561352257508281815181106134ea576134ea613f1a565b602001015160f81c60f81b6001600160f81b03191684828151811061351157613511613f1a565b01602001516001600160f81b031916145b15611855578061353181613f7a565b9150506134c1565b6060610d1a82613659565b60608161355281601f61429f565b10156135705760405162461bcd60e51b81526004016104b790614376565b8261357b838261429f565b10156135995760405162461bcd60e51b81526004016104b790614376565b6135a3828461429f565b845110156135e75760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016104b7565b6060821580156136065760405191506000825260208201604052613650565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561363f578051835260209283019201613627565b5050858452601f01601f1916604052505b50949350505050565b6060610d1a826020015160008460000151613145565b604051806040016040528060008152602001600081525090565b604051806040016040528061369c61366f565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806136f8613765565b8152602001613705613765565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104c957600080fd5b6000602082840312156137aa57600080fd5b813561185581613783565b6000602082840312156137c757600080fd5b5035919050565b6000606082840312156137e057600080fd5b50919050565b6000602082840312156137f857600080fd5b81356001600160401b0381111561380e57600080fd5b610e71848285016137ce565b600060c082840312156137e057600080fd5b600060e082840312156137e057600080fd5b60008060e0838503121561385157600080fd5b61385b848461381a565b915060c08301356001600160401b0381111561387657600080fd5b6138828582860161382c565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611d4657600080fd5b6000602082840312156138c957600080fd5b611855826138a0565b6000608082840312156137e057600080fd5b60008060008061010085870312156138fb57600080fd5b613905868661381a565b935060c08501356001600160401b038082111561392157600080fd5b61392d888389016138d2565b945060e087013591508082111561394357600080fd5b818701915087601f83011261395757600080fd5b81358181111561396657600080fd5b88602082850101111561397857600080fd5b95989497505060200194505050565b60006020828403121561399957600080fd5b813560ff8116811461185557600080fd5b600080604083850312156139bd57600080fd5b82356001600160401b03808211156139d457600080fd5b6139e0868387016137ce565b935060208501359150808211156139f657600080fd5b506138828582860161382c565b60008060008060808587031215613a1957600080fd5b613a22856138a0565b93506020850135613a3281613783565b92506040850135613a4281613783565b91506060850135613a5281613783565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a9557613a95613a5d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613ac357613ac3613a5d565b604052919050565b600060408284031215613add57600080fd5b613ae5613a73565b9050813581526020820135602082015292915050565b600060608284031215613b0d57600080fd5b613b15613a73565b9050613b218383613acb565b8152613b2f604083016138a0565b602082015292915050565b80356001600160401b0381168114611d4657600080fd5b60008060408385031215613b6457600080fd5b82356001600160401b0380821115613b7b57600080fd5b818501915085601f830112613b8f57600080fd5b8135602082821115613ba357613ba3613a5d565b613bb1818360051b01613a9b565b82815281810193506060928302850182019289841115613bd057600080fd5b948201945b83861015613bf657613be78a87613afb565b85529485019493820193613bd5565b509550613c04878201613b3a565b9450505050509250929050565b803563ffffffff81168114611d4657600080fd5b60008060408385031215613c3857600080fd5b613c4183613c11565b9150613c4f60208401613b3a565b90509250929050565b60008060e08385031215613c6b57600080fd5b613c75848461381a565b915060c08301356001600160401b03811115613c9057600080fd5b613882858286016138d2565b600060208284031215613cae57600080fd5b815161185581613783565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613d1557600080fd5b8151801515811461185557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613d7f57600080fd5b61185582613b3a565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613dea57613dea613db2565b01949350505050565b6000808335601e19843603018112613e0a57600080fd5b8301803591506001600160401b03821115613e2457600080fd5b6020019150606081023603821315613e3b57600080fd5b9250929050565b600060608284031215613e5457600080fd5b6118558383613afb565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613ecb57600080fd5b61185582613c11565b6000808335601e19843603018112613eeb57600080fd5b8301803591506001600160401b03821115613f0557600080fd5b602001915036819003821315613e3b57600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613f5057613f50613db2565b039392505050565b60006001600160801b03828116848216808303821115613dea57613dea613db2565b6000600019821415613f8e57613f8e613db2565b5060010190565b60c0810163ffffffff613fa784613c11565b168252613fb660208401613b3a565b6001600160401b03808216602085015280613fd360408701613b3a565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e1984360301811261401657600080fd5b8301803591506001600160401b0382111561403057600080fd5b6020019150600681901b3603821315613e3b57600080fd5b60006040828403121561405a57600080fd5b6118558383613acb565b60008282101561407657614076613db2565b500390565b600082601f83011261408c57600080fd5b604051604081018181106001600160401b03821117156140ae576140ae613a5d565b80604052508060408401858111156140c557600080fd5b845b818110156140df5780358352602092830192016140c7565b509195945050505050565b6000608082840312156140fc57600080fd5b614104613a73565b61410e848461407b565b815261411d846040850161407b565b60208201529392505050565b60006001600160801b038281168482168115158284048211161561414f5761414f613db2565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061418857614188614158565b92169190910492915050565b60006020808352608083016001600160401b03806141b187613b3a565b16838601526141c1838701613b3a565b604082821681880152808801359150601e198836030182126141e257600080fd5b908701908135838111156141f557600080fd5b60609350838102360389131561420a57600080fd5b87840184905293849052908401926000919060a088015b8184101561425f578535815286860135878201526001600160801b036142488488016138a0565b168184015294840194600193909301928401614221565b9998505050505050505050565b60008261427b5761427b614158565b500690565b600081600019048311821515161561429a5761429a613db2565b500290565b600082198211156142b2576142b2613db2565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff83168061431757614317614158565b8060ff84160691505092915050565b600060ff821660ff84168082101561434057614340613db2565b90039392505050565b60008261435857614358614158565b500490565b60006020828403121561436f57600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220fdfa99bdec7bb54cf2840cc043d0340ddf6031f4ac0ec2cdb06fff0ff26140c564736f6c634300080c0033","sourceMap":"1185:6563:108:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1707:50;;1756:1;1707:50;;;;;186:4:110;174:17;;;156:36;;144:2;129:18;1707:50:108;;;;;;;;7127:106;7202:24;;-1:-1:-1;;;;;7202:24:108;7127:106;;;-1:-1:-1;;;;;367:32:110;;;349:51;;337:2;322:18;7127:106:108;203:203:110;5826:138:39;;;;;;:::i;:::-;;:::i;:::-;;3832:392;;;;;;:::i;:::-;;:::i;5681:272:108:-;;;;;;:::i;:::-;;:::i;4396:387::-;;;;;;:::i;:::-;;:::i;2080:25::-;;;;;-1:-1:-1;;;2080:25:108;;-1:-1:-1;;;;;2080:25:108;;;;;;;;;;:::i;6347:150::-;;;;;;:::i;:::-;;:::i;2347:670:97:-;;;;;;:::i;:::-;;:::i;:::-;;;4264:25:110;;;4252:2;4237:18;2347:670:97;4118:177:110;7354:114:108;7433:28;;-1:-1:-1;;;7433:28:108;;-1:-1:-1;;;;;7433:28:108;7354:114;;4299:136:39;;;:::i;5606:149::-;;;;;;:::i;:::-;5724:7;;5695:1;:10;;;;;;;;5724:14;;;5723:24;;5606:149;;;;4739:14:110;;4732:22;4714:41;;4702:2;4687:18;5606:149:39;4574:187:110;5418:87:39;5491:7;;5418:87;;6911:103:108;;;:::i;:::-;;;;5164:13:110;;5146:32;;5234:4;5222:17;;;5216:24;5194:20;;;5187:54;;;;5119:18;6911:103:108;4948:299:110;2071:101:0;;;:::i;3679:482:108:-;;;;;;:::i;:::-;;:::i;1825:37:39:-;;;;;-1:-1:-1;;;;;1825:37:39;;;1441:85:0;1513:6;;-1:-1:-1;;;;;1513:6:0;1441:85;;2567:377:108;;;;;;:::i;:::-;;:::i;3134:336::-;;;;;;:::i;:::-;;:::i;1748:155:97:-;;;;;;:::i;:::-;;:::i;3258:550::-;;;;;;:::i;:::-;;:::i;6637:145:108:-;;;;;;:::i;:::-;;:::i;1948:34::-;;;;;-1:-1:-1;;;;;1948:34:108;;;;;;-1:-1:-1;;;;;10616:31:110;;;10598:50;;10586:2;10571:18;1948:34:108;10454:200:110;7620:126:108;697:3:100;7620:126:108;;2321:198:0;;;;;;:::i;:::-;;:::i;1572:52:108:-;;1623:1;1572:52;;6067:104;;;;;;:::i;:::-;;:::i;4911:437:39:-;;;;;;:::i;:::-;;:::i;5826:138::-;2285:14;;;;;;;;;-1:-1:-1;;;;;2285:14:39;-1:-1:-1;;;;;2285:23:39;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2271:39:39;:10;-1:-1:-1;;;;;2271:39:39;;2263:94;;;;-1:-1:-1;;;2263:94:39;;;;;;;:::i;:::-;;;;;;;;;5920:37:::1;5939:17;5920:18;:37::i;:::-;5826:138:::0;:::o;3832:392::-;2125:14;;:35;;-1:-1:-1;;;2125:35:39;;-1:-1:-1;;;;;2125:14:39;;;;:23;;:35;;2149:10;;2125:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2117:88;;;;-1:-1:-1;;;2117:88:39;;;;;;;:::i;:::-;4064:7:::1;::::0;4034:25;;::::1;4033:38;4025:107;;;::::0;-1:-1:-1;;;4025:107:39;;12505:2:110;4025:107:39::1;::::0;::::1;12487:21:110::0;12544:2;12524:18;;;12517:30;12583:34;12563:18;;;12556:62;-1:-1:-1;;;12634:18:110;;;12627:54;12698:19;;4025:107:39::1;12303:420:110::0;4025:107:39::1;4142:7;:25:::0;;;4182:35:::1;::::0;4264:25:110;;;4189:10:39::1;::::0;-1:-1:-1;;;;;;;;;;;4182:35:39;4252:2:110;4237:18;4182:35:39::1;;;;;;;;3832:392:::0;:::o;5681:272:108:-;1334:13:0;:11;:13::i;:::-;5808:20:108::1;::::0;-1:-1:-1;;;;;5808:20:108::1;5794:10;;::::0;::::1;:7:::0;:10:::1;:::i;:::-;-1:-1:-1::0;;;;;5794:34:108::1;;5786:63;;;;-1:-1:-1::0;;;5786:63:108::1;;;;;;;:::i;:::-;5883:10;;::::0;::::1;:7:::0;:10:::1;:::i;:::-;:14;::::0;5896:1:::1;5883:14;:::i;:::-;5860:20;:37:::0;;-1:-1:-1;;5860:37:108::1;-1:-1:-1::0;;;;;5860:37:108;;;::::1;::::0;;;::::1;::::0;;5908:38:::1;5928:17;;::::0;::::1;::::0;::::1;:::i;:::-;5908:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;:12;:19;;:38;;;;:::i;4396:387::-:0;5724:7:39;;1756:1:108;;5695:10:39;5724:14;;;5723:24;2767:14;2759:52;;;;-1:-1:-1;;;2759:52:39;;;;;;;:::i;:::-;4608:66:108::1;4636:22;:7;:20;:22::i;:::-;4608:12;::::0;4660:13;4608:27:::1;:66::i;:::-;4600:93;;;;-1:-1:-1::0;;;4600:93:108::1;;;;;;;:::i;:::-;4704:72;4719:16;;::::0;::::1;:7:::0;:16:::1;:::i;:::-;4737:19;::::0;;;::::1;::::0;::::1;;:::i;:::-;4758:7;:17;;;4704:14;:72::i;:::-;4396:387:::0;;;:::o;6347:150::-;1334:13:0;:11;:13::i;:::-;6439:51:108::1;:12;6471:18:::0;6439:31:::1;:51::i;2347:670:97:-:0;2531:7;2571:27;;;;:41;;;;:83;;-1:-1:-1;2616:24:97;;;;:38;;2571:83;2550:154;;;;-1:-1:-1;;;2550:154:97;;15540:2:110;2550:154:97;;;15522:21:110;15579:2;15559:18;;;15552:30;-1:-1:-1;;;15598:18:110;;;15591:54;15662:18;;2550:154:97;15338:348:110;2550:154:97;2715:17;2735;2715;2753:16;;;;:7;:16;:::i;:::-;2735:35;;;;;;;;;;;;;;;:56;2771:7;:19;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2735:56:97;;;;;;;;;;;;-1:-1:-1;2735:56:97;;;-1:-1:-1;2806:23:97;2802:154;;2853:21;2845:49;;;;-1:-1:-1;;;2845:49:97;;15893:2:110;2845:49:97;;;15875:21:110;15932:2;15912:18;;;15905:30;-1:-1:-1;;;15951:18:110;;;15944:45;16006:18;;2845:49:97;15691:339:110;2845:49:97;2909:36;2926:7;2935:9;;2909:16;:36::i;:::-;2973:37;2989:7;2998:11;2973:15;:37::i;:::-;2966:44;2347:670;-1:-1:-1;;;;;;2347:670:97:o;4299:136:39:-;2125:14;;:35;;-1:-1:-1;;;2125:35:39;;-1:-1:-1;;;;;2125:14:39;;;;:23;;:35;;2149:10;;2125:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2117:88;;;;-1:-1:-1;;;2117:88:39;;;;;;;:::i;:::-;-1:-1:-1;;4349:7:39::1;:27:::0;;;4391:37:::1;::::0;4264:25:110;;;4398:10:39::1;::::0;-1:-1:-1;;;;;;;;;;;4391:37:39;4252:2:110;4237:18;4391:37:39::1;;;;;;;4299:136::o:0;6911:103:108:-;6952:20;;:::i;:::-;-1:-1:-1;6984:23:108;;;;;;;;;6991:16;6984:23;;;;;;;;;;6911:103::o;2071:101:0:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;3679:482:108:-;5724:7:39;;1623:1:108;;5695::39;5724:14;;;5723:24;2767:14;2759:52;;;;-1:-1:-1;;;2759:52:39;;;;;;;:::i;:::-;3913:20:108::1;::::0;-1:-1:-1;;;;;3913:20:108::1;3899:10;;::::0;::::1;:7:::0;:10:::1;:::i;:::-;-1:-1:-1::0;;;;;3899:34:108::1;;3891:63;;;;-1:-1:-1::0;;;3891:63:108::1;;;;;;;:::i;:::-;3972:66;4000:22;:7;:20;:22::i;3972:66::-;3964:93;;;;-1:-1:-1::0;;;3964:93:108::1;;;;;;;:::i;:::-;4091:10;;::::0;::::1;:7:::0;:10:::1;:::i;:::-;:14;::::0;4104:1:::1;4091:14;:::i;:::-;4068:20;:37:::0;;-1:-1:-1;;4068:37:108::1;-1:-1:-1::0;;;;;4068:37:108;;;::::1;::::0;;;::::1;::::0;;4116:38:::1;4136:17;;::::0;::::1;::::0;::::1;:::i;:::-;4116:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;2567:377:::0;3111:19:1;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:1;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:1;1476:19:2;:23;;;3219:66:1;;-1:-1:-1;3268:12:1;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:1;;16237:2:110;3157:201:1;;;16219:21:110;16276:2;16256:18;;;16249:30;16315:34;16295:18;;;16288:62;-1:-1:-1;;;16366:18:110;;;16359:44;16420:19;;3157:201:1;16035:410:110;3157:201:1;3368:12;:16;;-1:-1:-1;;3368:16:1;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:1;;;;;3394:65;2755:47:108::1;2773:15;2000:1:39;2755:17:108;:47::i;:::-;2812:32;2831:12;2812:18;:32::i;:::-;2854:48;:12;2886:15:::0;2854:31:::1;:48::i;:::-;2913:10;:24:::0;;-1:-1:-1;;;;;;;;2913:24:108::1;-1:-1:-1::0;;;;;;;;2913:24:108;::::1;;;::::0;;3479:99:1;;;;3529:5;3513:21;;-1:-1:-1;;3513:21:1;;;3553:14;;-1:-1:-1;156:36:110;;3553:14:1;;144:2:110;129:18;3553:14:1;;;;;;;3479:99;3101:483;2567:377:108;;;;:::o;3134:336::-;2170:10;;-1:-1:-1;;;2170:10:108;;-1:-1:-1;;;;;2170:10:108;2156;:24;2148:61;;;;-1:-1:-1;;;2148:61:108;;16851:2:110;2148:61:108;;;16833:21:110;16890:2;16870:18;;;16863:30;-1:-1:-1;;;16909:18:110;;;16902:54;16973:18;;2148:61:108;16649:348:110;2148:61:108;3302:24;;-1:-1:-1;;;;;3302:24:108::1;:29:::0;3294:74:::1;;;::::0;-1:-1:-1;;;3294:74:108;;17204:2:110;3294:74:108::1;::::0;::::1;17186:21:110::0;;;17223:18;;;17216:30;17282:34;17262:18;;;17255:62;17334:18;;3294:74:108::1;17002:356:110::0;3294:74:108::1;3379:30;:12;3399:9:::0;3379:19:::1;:30::i;:::-;3419:20;:44:::0;;-1:-1:-1;;3419:44:108::1;-1:-1:-1::0;;;;;3419:44:108;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;3134:336:108:o;1748:155:97:-;1856:27;;;1830:7;1856:27;;;:17;:27;;;;;;;;-1:-1:-1;;;;;1856:40:97;;;;;;;;;;1748:155;;;;;:::o;3258:550::-;3404:7;;3447:17;3404:7;3465:16;;;;:7;:16;:::i;:::-;3447:35;;;;;;;;;;;;;;;:56;3483:7;:19;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3447:56:97;-1:-1:-1;;;;;3447:56:97;;;;;;;;;;;;;3427:76;;3535:7;:17;;;3522:9;:30;3514:66;;;;-1:-1:-1;;;3514:66:97;;17565:2:110;3514:66:97;;;17547:21:110;17604:2;17584:18;;;17577:30;-1:-1:-1;;;17623:18:110;;;17616:53;17686:18;;3514:66:97;17363:347:110;3514:66:97;3598:203;3628:18;;;;:11;:18;:::i;:::-;3660:22;;;;3696:9;3719:28;;;;3660:11;3719:28;:::i;:::-;3598:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3761:30:97;;-1:-1:-1;;;3761:30:97;;;;;:::i;:::-;3598:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3598:16:97;;-1:-1:-1;;;3598:203:97:i;:::-;3591:210;3258:550;-1:-1:-1;;;;3258:550:97:o;6637:145:108:-;6707:7;2584:35:100;;;6733:12:108;2584:35:100;;;;;;-1:-1:-1;;;;;2584:35:100;6733:42:108;2462:164:100;2321:198:0;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:0;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:0;;18443:2:110;2401:73:0::1;::::0;::::1;18425:21:110::0;18482:2;18462:18;;;18455:30;18521:34;18501:18;;;18494:62;-1:-1:-1;;;18572:18:110;;;18565:36;18618:19;;2401:73:0::1;18241:402:110::0;2401:73:0::1;2484:28;2503:8;2484:18;:28::i;6067:104:108:-:0;1334:13:0;:11;:13::i;:::-;6140:10:108::1;:24:::0;;-1:-1:-1;;;;;6140:24:108;;::::1;-1:-1:-1::0;;;6140:24:108::1;-1:-1:-1::0;;;;;;;;6140:24:108;;::::1;::::0;;;::::1;::::0;;6067:104::o;4911:437:39:-;2285:14;;;;;;;;;-1:-1:-1;;;;;2285:14:39;-1:-1:-1;;;;;2285:23:39;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2271:39:39;:10;-1:-1:-1;;;;;2271:39:39;;2263:94;;;;-1:-1:-1;;;2263:94:39;;;;;;;:::i;:::-;5164:7:::1;;5163:8;5141:15;5140:16;5128:7;;5127:8;5126:31;5125:47;5104:150;;;::::0;-1:-1:-1;;;5104:150:39;;18850:2:110;5104:150:39::1;::::0;::::1;18832:21:110::0;18889:2;18869:18;;;18862:30;18928:34;18908:18;;;18901:62;-1:-1:-1;;;18979:18:110;;;18972:54;19043:19;;5104:150:39::1;18648:420:110::0;5104:150:39::1;5264:7;:25:::0;;;5304:37:::1;::::0;4264:25:110;;;5313:10:39::1;::::0;5304:37:::1;::::0;4252:2:110;4237:18;5304:37:39::1;4118:177:110::0;6024:360:39;-1:-1:-1;;;;;6127:40:39;;6106:160;;;;-1:-1:-1;;;6106:160:39;;19275:2:110;6106:160:39;;;19257:21:110;19314:2;19294:18;;;19287:30;19353:34;19333:18;;;19326:62;19424:34;19404:18;;;19397:62;-1:-1:-1;;;19475:19:110;;;19468:40;19525:19;;6106:160:39;19073:477:110;6106:160:39;6299:14;;6281:52;;;-1:-1:-1;;;;;6299:14:39;;;19815:34:110;;19885:15;;;19880:2;19865:18;;19858:43;6281:52:39;;19750:18:110;6281:52:39;;;;;;;6343:14;:34;;-1:-1:-1;;;;;;6343:34:39;-1:-1:-1;;;;;6343:34:39;;;;;;;;;;6024:360::o;1599:130:0:-;1513:6;;-1:-1:-1;;;;;1513:6:0;929:10:3;1662:23:0;1654:68;;;;-1:-1:-1;;;1654:68:0;;20114:2:110;1654:68:0;;;20096:21:110;;;20133:18;;;20126:30;20192:34;20172:18;;;20165:62;20244:18;;1654:68:0;19912:356:110;2828:1048:100;2918:24;;:::i;:::-;2953:38;;;;;;;;;2983:8;;;2953:38;;;;;;;;;;;3026:16;;;;-1:-1:-1;;;;;3026:16:100;2953:27;3053:746;3077:9;:16;3073:1;:20;3053:746;;;3125:9;3135:1;3125:12;;;;;;;;:::i;:::-;;;;;;;3114:23;;3152:18;3173:29;:8;:15;;;10534:9:63;;10473:16;10524:20;;;10580:4;10576:13;;;10570:20;10557:34;;;10629:4;10616:18;;;10404:246;3173:29:100;3216:21;3240:35;;;;;;;;;;;;3298:15;;;;3152:50;;-1:-1:-1;;;;;;3240:35:100;;;;3298:32;;;;3290:67;;;;-1:-1:-1;;;3290:67:100;;20607:2:110;3290:67:100;;;20589:21:110;20646:2;20626:18;;;20619:30;-1:-1:-1;;;20665:18:110;;;20658:52;20727:18;;3290:67:100;20405:346:110;3290:67:100;3422:15;;;;3389:30;3406:13;3389:14;:30;:::i;:::-;:48;;;;:::i;:::-;3490:15;;;;;3452:23;:35;;;;;;;;;;;:53;;-1:-1:-1;;;;;;3452:53:100;-1:-1:-1;;;;;3452:53:100;;;;;;3372:65;;-1:-1:-1;3524:18:100;;3520:205;;3583:15;;3571:28;;:6;;:11;:28::i;:::-;3562:37;;3520:205;;;3624:15;;;;-1:-1:-1;;;;;3624:20:100;3620:105;;3673:37;3685:24;:8;:15;;;:22;:24::i;:::-;3673:6;;:11;:37::i;:::-;3664:46;;3620:105;3772:15;;;;;3744:44;;-1:-1:-1;;;;;367:32:110;;;349:51;;3760:10:100;;3744:44;;322:18:110;3744:44:100;;;;;;;3100:699;;3095:3;;;;;:::i;:::-;;;;3053:746;;;-1:-1:-1;3809:16:100;;;:33;;-1:-1:-1;;;;;;3809:33:100;-1:-1:-1;;;;;3809:33:100;;;;;;;;;;3852:17;;-1:-1:-1;3852:8:100;;:17;;;;-1:-1:-1;3852:17:100;;;;;;;-1:-1:-1;;2828:1048:100:o;1127:188:99:-;1198:7;939:41;1297:7;1286:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;1276:30;;;;;;1234:73;;;;;;;;22278:25:110;;;22334:2;22319:18;;22312:34;22266:2;22251:18;;22104:248;1234:73:99;;;;;;;;;;;;;1224:84;;;;;;1217:91;;1127:188;;;:::o;4236:1467:100:-;4435:19;;;;;;;;;4388:4;4435:19;;;;;;;;;4481:16;;;;4388:4;;4435:19;-1:-1:-1;;;;;4481:16:100;4516:11;4508:56;;;;-1:-1:-1;;;4508:56:100;;22559:2:110;4508:56:100;;;22541:21:110;;;22578:18;;;22571:30;22637:34;22617:18;;;22610:62;22689:18;;4508:56:100;22357:356:110;4508:56:100;4575:38;4630:30;:13;;:30;:::i;:::-;:37;;-1:-1:-1;;;;;4616:52:100;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4616:52:100;;4575:93;;4684:9;4679:592;4703:30;:13;;:30;:::i;:::-;:37;;4699:1;:41;4679:592;;;4788:47;:30;:13;;:30;:::i;:::-;4819:1;4788:33;;;;;;;:::i;:::-;;;;;;:45;;;;;;;;;;:::i;:::-;10534:9:63;;10473:16;10524:20;;;10580:4;10576:13;;;10570:20;10557:34;;;10629:4;10616:18;;;10404:246;4788:47:100;4761:21;4783:1;4761:24;;;;;;;;:::i;:::-;;;;;;;;;;:74;4854:6;;4850:149;;4932:21;4954:5;4958:1;4954;:5;:::i;:::-;4932:28;;;;;;;;:::i;:::-;;;;;;;4924:37;;4896:21;4918:1;4896:24;;;;;;;;:::i;:::-;;;;;;;4888:33;;:73;4880:104;;;;-1:-1:-1;;;4880:104:100;;23861:2:110;4880:104:100;;;23843:21:110;23900:2;23880:18;;;23873:30;-1:-1:-1;;;23919:18:110;;;23912:48;23977:18;;4880:104:100;23659:342:110;4880:104:100;5013:22;5038:4;:23;;:49;5062:21;5084:1;5062:24;;;;;;;;:::i;:::-;;;;;;;;;;;;5038:49;;;;;;;;;;-1:-1:-1;5038:49:100;;-1:-1:-1;;;;;5038:49:100;;-1:-1:-1;5110:19:100;5102:56;;;;-1:-1:-1;;;5102:56:100;;24208:2:110;5102:56:100;;;24190:21:110;24247:2;24227:18;;;24220:30;-1:-1:-1;;;24266:18:110;;;24259:54;24330:18;;5102:56:100;24006:348:110;5102:56:100;5179:43;5188:30;:13;;:30;:::i;:::-;5219:1;5188:33;;;;;;;:::i;:::-;;;;;;5179:43;;;;;;;;;;:::i;:::-;5173:49;-1:-1:-1;5236:24:100;5246:14;5236:24;;:::i;:::-;;;4747:524;4742:3;;;;;:::i;:::-;;;;4679:592;;;;5287:27;5301:12;:3;:10;:12::i;:::-;5287:13;;;;;;;;;:8;;;:13;;;;;;;;;;;;;:27::i;:::-;5281:33;-1:-1:-1;5326:22:100;;5387:86;5418:7;5281:33;5387:86;;;;;;;5432:19;;;5387:86;:::i;:::-;;;;;;;;5453:19;;;5387:86;:::i;:::-;:30;:86::i;:::-;5325:148;;;;5492:17;5484:60;;;;-1:-1:-1;;;5484:60:100;;25608:2:110;5484:60:100;;;25590:21:110;25647:2;25627:18;;;25620:30;25686:32;25666:18;;;25659:60;25736:18;;5484:60:100;25406:354:110;5484:60:100;5562:16;5554:49;;;;-1:-1:-1;;;5554:49:100;;25967:2:110;5554:49:100;;;25949:21:110;26006:2;25986:18;;;25979:30;-1:-1:-1;;;26025:18:110;;;26018:50;26085:18;;5554:49:100;25765:344:110;5554:49:100;5651:20;;;;697:3;;5632:39;;-1:-1:-1;;;;;;;;5651:20:100;;;;;5632:16;:39;:::i;:::-;5631:65;;;;:::i;:::-;-1:-1:-1;;;;;5621:75:100;:6;:75;;5614:82;;;;;;;4236:1467;;;;;;:::o;6380:224:97:-;6479:27;;;;;;;:17;:27;;;;;;;;-1:-1:-1;;;;;6479:40:97;;;;;;;;;;;;:52;;;6547:50;4264:25:110;;;6479:40:97;;:27;6547:50;;4237:18:110;6547:50:97;;;;;;;6380:224;;;:::o;1987:303:100:-;697:3;-1:-1:-1;;;;;2093:40:100;;;;2085:94;;;;-1:-1:-1;;;2085:94:100;;26931:2:110;2085:94:100;;;26913:21:110;26970:2;26950:18;;;26943:30;27009:34;26989:18;;;26982:62;-1:-1:-1;;;27060:18:110;;;27053:39;27109:19;;2085:94:100;26729:405:110;2085:94:100;2190:20;;;:38;;-1:-1:-1;;;;;2190:38:100;;;-1:-1:-1;;;2190:38:100;;;;;;;;;;2244:39;;;;-1:-1:-1;;2244:39:100;1987:303;;:::o;5000:349:108:-;5256:27;5303:39;5319:7;5256:27;5303:15;:39::i;:::-;5143:206;5000:349;;;:::o;2673:187:0:-;2765:6;;;-1:-1:-1;;;;;2781:17:0;;;-1:-1:-1;;;;;;2781:17:0;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;913:190:98:-;984:7;720:43;1085:7;1074:19;;;;;;;;:::i;2943:441:39:-;3077:14;;-1:-1:-1;;;;;3077:14:39;3069:37;:79;;;;-1:-1:-1;;;;;;3110:38:39;;;;3069:79;3048:197;;;;-1:-1:-1;;;3048:197:39;;28809:2:110;3048:197:39;;;28791:21:110;28848:2;28828:18;;;28821:30;28887:34;28867:18;;;28860:62;28958:34;28938:18;;;28931:62;-1:-1:-1;;;29009:19:110;;;29002:38;29057:19;;3048:197:39;28607:475:110;3048:197:39;3255:7;:26;;;3296:36;;4264:25:110;;;3303:10:39;;-1:-1:-1;;;;;;;;;;;3296:36:39;4252:2:110;4237:18;3296:36:39;;;;;;;3342:35;3361:15;3342:18;:35::i;:::-;2943:441;;:::o;4378:840:97:-;4695:24;;-1:-1:-1;;29236:2:110;29232:15;;;29228:53;4695:24:97;;;29216:66:110;4586:7:97;;;;;;4670:79;;29298:12:110;;4695:24:97;;;;;;;;;;;;4721:16;4739:9;4670:24;:79::i;:::-;4605:144;;;;4768:6;4760:41;;;;-1:-1:-1;;;4760:41:97;;29523:2:110;4760:41:97;;;29505:21:110;29562:2;29542:18;;;29535:30;-1:-1:-1;;;29581:18:110;;;29574:52;29643:18;;4760:41:97;29321:346:110;4760:41:97;4812:38;4853:53;4883:22;4853:29;:53::i;:::-;4812:94;;4918:18;4938:27;4981:89;5023:4;5006:22;;;;;;29801:19:110;;29845:2;29836:12;;29672:182;5006:22:97;;;;;;;;;;;;;5030:18;5050:7;:19;;;4981:24;:89::i;:::-;4917:153;;;;5089:13;5081:54;;;;-1:-1:-1;;;5081:54:97;;30061:2:110;5081:54:97;;;30043:21:110;30100:2;30080:18;;;30073:30;30139;30119:18;;;30112:58;30187:18;;5081:54:97;29859:352:110;5081:54:97;5153:58;5171:39;5195:14;5171:23;:39::i;:::-;5153:17;:58::i;:::-;5146:65;4378:840;-1:-1:-1;;;;;;;;;;;4378:840:97:o;4823:615:63:-;4898:16;;:::i;:::-;4926:23;;:::i;:::-;4970:4;;4959:15;;:8;4995:4;;;;4984:8;;;:15;5020:4;;5009:8;;;;:15;;;;5045:4;;;;5034:8;;;:15;-1:-1:-1;;5225:1:63;5219:4;4959:15;5209:1;5202:4;5195:5;5191:16;5180:53;5169:64;-1:-1:-1;5169:64:63;5330:48;;;;5303:75;;5330:48;5355:9;5303:75;;5406:7;5398:33;;;;-1:-1:-1;;;5398:33:63;;30418:2:110;5398:33:63;;;30400:21:110;30457:2;30437:18;;;30430:30;-1:-1:-1;;;30476:18:110;;;30469:43;30529:18;;5398:33:63;30216:337:110;5398:33:63;4916:522;;4823:615;;;;:::o;4461:295::-;4518:14;;:::i;:::-;4600:3;;:8;:20;;;;-1:-1:-1;4612:3:63;;;;:8;4600:20;4596:154;;;-1:-1:-1;;4643:13:63;;;;;;;;;-1:-1:-1;4643:13:63;;;;;;;;4461:295::o;4596:154::-;4694:45;;;;;;;;4702:1;:3;;;4694:45;;;;-1:-1:-1;;;;;;;;;;;4721:1:63;:3;;;:16;;;;:::i;:::-;4707:31;;-1:-1:-1;;;;;;;;;;;4707:31:63;:::i;:::-;4694:45;;4687:52;4461:295;-1:-1:-1;;4461:295:63:o;4596:154::-;4461:295;;;:::o;6046:814:100:-;6245:22;6269:21;6302:13;2037:77:63;6404:7:100;6413:3;:5;;;6420:3;:5;;;6427;:7;;;6435:1;6427:10;;;;;;;:::i;:::-;;;;;6439:7;;6447:1;6439:10;;;;6451:5;:7;;;6459:1;6451:10;;;;;;;:::i;:::-;;;;;6463:5;:7;;;6471:1;6463:10;;;;;;;:::i;:::-;;;;;;;;;;6475:7;;6484;;;;6366:143;;;;;;;;;;;31028:19:110;;;31072:2;31063:12;;31056:28;;;;31109:2;31100:12;;31093:28;;;;31146:2;31137:12;;31130:28;;;;31183:3;31174:13;;31167:29;;;;31221:3;31212:13;;31205:29;31259:3;31250:13;;31243:29;31297:3;31288:13;;31281:29;31335:3;31326:13;;31319:29;31373:3;31364:13;;30675:708;6366:143:100;;;;;;;;;;;;;6339:184;;;;;;6318:215;;:234;;;;:::i;:::-;6302:250;-1:-1:-1;6603:250:100;6634:33;6645:21;:3;6302:250;6645:14;:21::i;6634:33::-;6681:22;:20;:22::i;:::-;6717:67;6746:37;6777:5;6746:19;:17;:19::i;:::-;:30;;:37::i;:::-;6717:23;6732:7;6717:14;:23::i;:::-;:28;;:67::i;:::-;6798:5;891:6;6603:17;:250::i;:::-;6563:290;;;;-1:-1:-1;6046:814:100;-1:-1:-1;;;;;;6046:814:100:o;1669:266:92:-;1790:12;1804:19;1835:16;1854:19;1868:4;1854:13;:19::i;:::-;1835:38;;1890;1909:3;1914:6;1922:5;1890:18;:38::i;:::-;1883:45;;;;;1669:266;;;;;;:::o;2769:521:86:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2916:32:86;2939:8;2916:22;:32::i;:::-;2870:78;;2978:305;;;;;;;;3014:42;3040:12;3053:1;3040:15;;;;;;;;:::i;:::-;;;;;;;3014:25;:42::i;:::-;2978:305;;;;3083:42;3109:12;3122:1;3109:15;;;;;;;;:::i;3083:42::-;2978:305;;;;3156:42;3182:12;3195:1;3182:15;;;;;;;;:::i;:::-;;;;;;;3156:25;:42::i;:::-;2978:305;;;;3226:42;3252:12;3265:1;3252:15;;;;;;;;:::i;3226:42::-;2978:305;;2959:324;2769:521;-1:-1:-1;;;2769:521:86:o;3430:123:89:-;3490:12;3521:25;3531:14;3541:3;3531:9;:14::i;:::-;3521:9;:25::i;5846:290:97:-;5917:7;5936:11;5957;5988:2;5971:6;:13;:19;;:40;;6009:2;5971:40;;;5993:6;:13;5971:40;6095:2;6083:15;;;6077:22;6059:12;;6073:1;6055:20;6051:49;;;;;5846:290;-1:-1:-1;;;5846:290:97:o;7084:580:63:-;7156:16;;:::i;:::-;7184:23;;:::i;:::-;7228:3;;7217:14;;:8;7252:3;;;;7241:8;;;:14;7265:8;;;;:12;;;-1:-1:-1;;7452:1:63;7446:4;7217:14;7436:1;7429:4;7422:5;7418:16;7407:53;7396:64;-1:-1:-1;7396:64:63;7557:48;;;;7530:75;7632:7;7624:33;;;;-1:-1:-1;;;7624:33:63;;31590:2:110;7624:33:63;;;31572:21:110;31629:2;31609:18;;;31602:30;-1:-1:-1;;;31648:18:110;;;31641:43;31701:18;;7624:33:63;31388:337:110;4070:128:63;4119:14;;:::i;:::-;-1:-1:-1;4152:39:63;;;;;;;;3635:77;4152:39;;;;;;3752:77;4152:39;;;;;;;;;;;;;;3869:77;4152:39;;3986:77;4152:39;;;;;;;;;;;;;;;4070:128::o;2313:99::-;2359:14;;:::i;:::-;-1:-1:-1;2392:13:63;;;;;;;;;2400:1;2392:13;;2403:1;2392:13;;;;;2313:99::o;11044:451::-;11097:14;;:::i;:::-;11123:12;;;11185:24;-1:-1:-1;;;;;;;;;;;11193:2:63;11185:24;:::i;:::-;11173:36;;11220:239;11259:13;11270:1;11259:10;:13::i;:::-;11247:25;;-1:-1:-1;11247:25:63;-1:-1:-1;;;;;;;;;;;;11336:1:63;11333;11326:24;11318:4;:32;11314:92;;;11378:13;;;;;;;;;;;;;;;;;;;;11044:451;-1:-1:-1;;;11044:451:63:o;11314:92::-;-1:-1:-1;;;;;;;;;;;11434:1:63;11431;11424:24;11420:28;;11220:239;;9189:1112;9397:31;;;;;;;;;;;;;;;;;;9438;;;;;;;;;;;;;;;;9375:4;;;;9397:31;9480:24;;:::i;:::-;9520:9;9515:302;9539:1;9535;:5;9515:302;;;9561:9;9573:5;:1;9577;9573:5;:::i;:::-;9561:17;;9607:2;9610:1;9607:5;;;;;;;:::i;:::-;;;;;:7;9592:5;9598;:1;9607:7;9598:5;:::i;:::-;9592:12;;;;;;;:::i;:::-;;;;:22;9643:2;9646:1;9643:5;;;;;;;:::i;:::-;;;;;:7;;;9628:5;9634:1;9638;9634:5;;;;:::i;:::-;9628:12;;;;;;;:::i;:::-;;;;:22;9679:2;9682:1;9679:5;;;;;;;:::i;:::-;;;;;:7;:10;9664:5;9670;:1;9674;9670:5;:::i;:::-;9664:12;;;;;;;:::i;:::-;;;;:25;9718:2;9721:1;9718:5;;;;;;;:::i;:::-;;;;;:7;9726:1;9718:10;;;;9703:5;9709;:1;9713;9709:5;:::i;:::-;9703:12;;;;;;;:::i;:::-;;;;:25;9757:2;9760:1;9757:5;;;;;;;:::i;:::-;;;;;:7;;;9765:1;9757:10;;;;;;;:::i;:::-;;;;;9742:5;9748;:1;9752;9748:5;:::i;:::-;9742:12;;;;;;;:::i;:::-;;;;:25;9796:2;9799:1;9796:5;;;;;;;:::i;:::-;;;;;:7;;;9804:1;9796:10;;;;;;;:::i;:::-;;;;;9781:5;9787;:1;9791;9787:5;:::i;:::-;9781:12;;;;;;;:::i;:::-;;;;:25;-1:-1:-1;9542:3:63;;;;:::i;:::-;;;;9515:302;;;;9827:21;;:::i;:::-;9858:12;10032:4;10027:3;10012:13;10005:5;10002:1;9990:10;9979:58;10282:6;;9968:69;;10282:11;;;;-1:-1:-1;10265:29:63;;-1:-1:-1;;;;;;;;;;9189:1112:63:o;2191:146:92:-;2255:23;2324:4;2314:15;;;;;;2297:33;;;;;;29801:19:110;;29845:2;29836:12;;29672:182;2297:33:92;;;;;;;;;;;;;2290:40;;2191:146;;;:::o;3187:617:91:-;3308:12;3322:19;3353:23;3379:19;3391:6;3379:11;:19::i;:::-;3353:45;;3409:18;3429:25;3456:16;3476:79;3503:5;3522:4;3540:5;3476:13;:79::i;:::-;3580:19;;3408:147;;-1:-1:-1;3408:147:91;;-1:-1:-1;3408:147:91;-1:-1:-1;3580:24:91;;;3623:21;;;3633:11;3623:21;3615:60;;;;-1:-1:-1;;;3615:60:91;;32238:2:110;3615:60:91;;;32220:21:110;32277:2;32257:18;;;32250:30;32316:28;32296:18;;;32289:56;32362:18;;3615:60:91;32036:350:110;3615:60:91;3686:18;3707:6;:57;;3755:9;;;;;;;;;;;;3707:57;;;3716:36;3730:5;3736:14;3749:1;3736:10;:14;:::i;:::-;3730:21;;;;;;;;:::i;:::-;;;;;;;3716:13;:36::i;:::-;3783:6;;;;-1:-1:-1;3187:617:91;;-1:-1:-1;;;;;;;;;3187:617:91:o;2730:125:89:-;2789:16;2824:24;2833:14;2843:3;2833:9;:14::i;:::-;2824:8;:24::i;5264:122::-;5328:7;5362:16;5374:3;4218:642;4282:7;4323:2;4309:3;:10;;;:16;;4301:55;;;;-1:-1:-1;;;4301:55:89;;;;;;;:::i;:::-;4368:18;4388;4408:20;4432:18;4446:3;4432:13;:18::i;:::-;4367:83;;-1:-1:-1;4367:83:89;-1:-1:-1;4367:83:89;-1:-1:-1;4481:21:89;4469:8;:33;;;;;;;;:::i;:::-;;4461:72;;;;-1:-1:-1;;;4461:72:89;;;;;;;:::i;:::-;4544:11;4568:10;4558:3;:7;;;:20;;;;:::i;:::-;4639:10;;4544:34;;-1:-1:-1;4741:2:89;4726:18;;4723:100;;;4792:2;4788:19;;;4783:3;4779:29;4770:39;;4850:3;4218:642;-1:-1:-1;;;;;;4218:642:89:o;796:224::-;-1:-1:-1;;;;;;;;;;;;;;;;;972:41:89;;;;;;;;990:10;;972:41;;933:12;;;972:41;;;;;;;;796:224::o;2986:313::-;3048:12;3073:18;3093;3113:20;3137:18;3151:3;3137:13;:18::i;:::-;3072:83;;-1:-1:-1;3072:83:89;-1:-1:-1;3072:83:89;-1:-1:-1;3186:21:89;3174:8;:33;;;;;;;;:::i;:::-;;3166:70;;;;-1:-1:-1;;;3166:70:89;;33080:2:110;3166:70:89;;;33062:21:110;33119:2;33099:18;;;33092:30;-1:-1:-1;;;33138:18:110;;;33131:54;33202:18;;3166:70:89;32878:348:110;3166:70:89;3254:38;3260:3;:7;;;3269:10;3281;3254:5;:38::i;:::-;3247:45;2986:313;-1:-1:-1;;;;;2986:313:89:o;11616:433:63:-;11670:7;;;-1:-1:-1;;;;;;;;;;;11801:1:63;-1:-1:-1;;;;;;;;;;;11785:1:63;-1:-1:-1;;;;;;;;;;;11769:1:63;11766;11759:24;11752:47;11745:70;11730:85;;11912:9;11924:91;11931:4;11937:65;-1:-1:-1;;;;;;;;;;;11924:6:63;:91::i;:::-;12034:4;;11912:103;;-1:-1:-1;11616:433:63;;-1:-1:-1;;;11616:433:63:o;9383:495:91:-;9447:25;9484:36;9523:30;9546:6;9523:22;:30::i;:::-;9484:69;;9563:23;9604:5;:12;-1:-1:-1;;;;;9589:28:91;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;9589:28:91;;;;;;;;;;;;;;;;9563:54;;9633:9;9628:221;9652:5;:12;9648:1;:16;9628:221;;;9685:20;9708:33;9732:5;9738:1;9732:8;;;;;;;;:::i;:::-;;;;;;;9708:23;:33::i;:::-;9685:56;;9766:72;;;;;;;;9786:7;9766:72;;;;9804:31;9827:7;9804:22;:31::i;:::-;9766:72;;;9755:5;9761:1;9755:8;;;;;;;;:::i;:::-;;;;;;:83;;;;9671:178;9666:3;;;;;:::i;:::-;;;;9628:221;;;-1:-1:-1;9866:5:91;9383:495;-1:-1:-1;;;9383:495:91:o;4301:4872::-;4473:19;4506:26;4473:19;;;4639:30;4664:4;4639:24;:30::i;:::-;4620:49;;4680:21;4704:5;4680:29;;4719:23;4756:27;4797;-1:-1:-1;;;;;;;;;;;;;;;;;;;4797:27:91;4911:9;4906:4050;4930:6;:13;4926:1;:17;4906:4050;;;4978:6;4985:1;4978:9;;;;;;;;:::i;:::-;;;;;;;4964:23;;5020:19;5001:38;;;;;:::i;:::-;;-1:-1:-1;5202:15:91;5216:1;5202:15;;:::i;:::-;;-1:-1:-1;5236:20:91;5232:758;;5358:19;;5348:30;;;;;;;:47;;5340:77;;;;-1:-1:-1;;;5340:77:91;;33433:2:110;5340:77:91;;;33415:21:110;33472:2;33452:18;;;33445:30;-1:-1:-1;;;33491:18:110;;;33484:47;33548:18;;5340:77:91;33231:341:110;5340:77:91;5232:758;;;5442:19;;:26;5472:2;-1:-1:-1;5438:552:91;;5609:19;;5599:30;;;;;;;:47;;5570:145;;;;-1:-1:-1;;;5570:145:91;;33779:2:110;5570:145:91;;;33761:21:110;33818:2;33798:18;;;33791:30;33857:29;33837:18;;;33830:57;33904:18;;5570:145:91;33577:351:110;5438:552:91;5894:13;5845:45;5870:11;:19;;;5845:24;:45::i;:::-;:62;5816:159;;;;-1:-1:-1;;;5816:159:91;;34135:2:110;5816:159:91;;;34117:21:110;34174:2;34154:18;;;34147:30;34213:28;34193:18;;;34186:56;34259:18;;5816:159:91;33933:350:110;5816:159:91;886:14;762:2;899:1;886:14;:::i;:::-;6008:11;:19;;;:26;:48;6004:2942;;;6099:3;:10;6080:15;:29;6076:666;;;6261:5;;6076:666;6453:15;6477:3;6481:15;6477:20;;;;;;;;:::i;:::-;;;;;;;;;6471:27;;6453:45;;6520:37;6560:11;:19;;;6580:9;6560:30;;;;;;;;;;:::i;:::-;;;;;;;6520:70;;6628:20;6639:8;6628:10;:20::i;:::-;6612:36;;6692:1;6670:23;;6715:8;;;;6004:2942;1043:1;6766:11;:19;;;:26;:59;6762:2184;;;6845:17;6865:25;6878:11;6865:12;:25::i;:::-;6845:45;;6908:12;6929:4;6934:1;6929:7;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;6955:12:91;6975:10;6984:1;6929:7;6975:10;:::i;:::-;6970:16;;:1;:16;:::i;:::-;6955:31;;7004:26;7033:34;7054:4;7060:6;7033:34;;:20;:34::i;:::-;7004:63;;7085:25;7113:42;7134:3;7139:15;7113:20;:42::i;:::-;7085:70;;7173:26;7202:51;7225:13;7240:12;7202:22;:51::i;:::-;7173:80;-1:-1:-1;7276:26:91;;;1563:1;7276:26;;:55;;-1:-1:-1;7306:25:91;;;1603:1;7306:25;7276:55;7272:1582;;;7408:18;7384:13;:20;:42;:111;;;;;7477:18;7454:12;:19;:41;7384:111;7355:415;;;7710:37;7729:18;7710:37;;:::i;:::-;;;7355:415;-1:-1:-1;;;;1701:12:91;-1:-1:-1;7926:5:91;;-1:-1:-1;;;;;7926:5:91;7272:1582;7960:31;;;;;:65;;-1:-1:-1;7995:30:91;;;1522:1;7995:30;7960:65;7956:898;;;8075:13;:20;8053:18;:42;8049:692;;-1:-1:-1;;;;1701:12:91;-1:-1:-1;8392:5:91;;-1:-1:-1;;;;;8392:5:91;8049:692;8584:34;8595:11;:19;;;8615:1;8595:22;;;;;;;;:::i;:::-;;;;;;;8584:10;:34::i;:::-;8568:50;-1:-1:-1;8666:18:91;-1:-1:-1;8710:8:91;;-1:-1:-1;;;;;8710:8:91;7956:898;8787:48;;-1:-1:-1;;;8787:48:91;;34852:2:110;8787:48:91;;;34834:21:110;34891:2;34871:18;;;34864:30;34930:34;34910:18;;;34903:62;-1:-1:-1;;;34981:18:110;;;34974:36;35027:19;;8787:48:91;34650:402:110;6762:2184:91;8892:39;;-1:-1:-1;;;8892:39:91;;35259:2:110;8892:39:91;;;35241:21:110;35298:2;35278:18;;;35271:30;35337:31;35317:18;;;35310:59;35386:18;;8892:39:91;35057:353:110;6762:2184:91;4945:3;;;;:::i;:::-;;;;4906:4050;;;-1:-1:-1;;;;9046:34:91;;9098:10;9110:42;9131:3;9136:15;9110:20;:42::i;:::-;9090:76;;;;-1:-1:-1;9154:11:91;;-1:-1:-1;4301:4872:91;-1:-1:-1;;;;;;;;;;4301:4872:91:o;11178:177::-;11308:13;;;;11322:20;;11246:19;;11284:64;;11322:24;;11345:1;;11322:24;:::i;:::-;11308:39;;;;;;;;:::i;1172:1406:89:-;1233:16;1262:18;1284:20;1308:18;1322:3;1308:13;:18::i;:::-;1261:65;;-1:-1:-1;1261:65:89;;-1:-1:-1;1357:21:89;;-1:-1:-1;1345:8:89;:33;;;;;;;;:::i;:::-;;1337:69;;;;-1:-1:-1;;;1337:69:89;;35617:2:110;1337:69:89;;;35599:21:110;35656:2;35636:18;;;35629:30;-1:-1:-1;;;35675:18:110;;;35668:53;35738:18;;1337:69:89;35415:347:110;1337:69:89;1832:30;;;295:2;1832:30;;;;;;;;;1809:20;;1832:30;;;;-1:-1:-1;;;;;;;;;;;;;;;;;1832:30:89;;;;;;;;;;;;;;-1:-1:-1;1809:53:89;-1:-1:-1;1873:17:89;1921:10;1941:478;1957:10;;1948:19;;1941:478;;;295:2;1991:9;:27;1983:82;;;;-1:-1:-1;;;1983:82:89;;35969:2:110;1983:82:89;;;35951:21:110;36008:2;35988:18;;;35981:30;36047:34;36027:18;;;36020:62;-1:-1:-1;;;36098:18:110;;;36091:40;36148:19;;1983:82:89;35767:406:110;1983:82:89;2081:18;2101;2125:108;2156:63;;;;;;;;2187:6;2174:3;:10;;;:19;;;;:::i;:::-;2156:63;;;;2210:6;2200:3;:7;;;:16;;;;:::i;:::-;2156:63;;2125:13;:108::i;:::-;2080:153;;;;;2265:67;;;;;;;;2296:10;2283;:23;;;;:::i;:::-;2265:67;;;;2323:6;2313:3;:7;;;:16;;;;:::i;:::-;2265:67;;;2248:3;2252:9;2248:14;;;;;;;;:::i;:::-;;;;;;;;;;:84;2347:14;2360:1;2347:14;;:::i;:::-;;-1:-1:-1;2385:23:89;2398:10;2385;:23;:::i;:::-;2375:33;;;;:::i;:::-;;;1969:450;;1941:478;;;-1:-1:-1;2519:22:89;;2526:3;1172:1406;-1:-1:-1;;;;1172:1406:89:o;7649:2148::-;7751:7;7772;7793:11;7850:1;7837:3;:10;;;:14;7829:51;;;;-1:-1:-1;;;7829:51:89;;36380:2:110;7829:51:89;;;36362:21:110;36419:2;36399:18;;;36392:30;-1:-1:-1;;;36438:18:110;;;36431:54;36502:18;;7829:51:89;36178:348:110;7829:51:89;7905:7;;;;7987:10;;7891:11;7979:19;8032:4;8022:14;;8018:1773;;8089:1;8092;8095:21;8081:36;;;;;;;;;;8018:1773;8148:4;8138:6;:14;8134:1657;;8254:14;8271:13;8280:4;8271:6;:13;:::i;:::-;8254:30;;8320:6;8307:3;:10;;;:19;8299:57;;;;-1:-1:-1;;;8299:57:89;;36733:2:110;8299:57:89;;;36715:21:110;36772:2;36752:18;;;36745:30;-1:-1:-1;;;36791:18:110;;;36784:55;36856:18;;8299:57:89;36531:349:110;8299:57:89;8379:1;;-1:-1:-1;8382:6:89;-1:-1:-1;8390:21:89;;-1:-1:-1;8371:41:89;;-1:-1:-1;;8371:41:89;8134:1657;8443:4;8433:6;:14;8429:1362;;8491:19;8513:13;8522:4;8513:6;:13;:::i;:::-;8491:35;;8562:11;8549:3;:10;;;:24;8541:68;;;;-1:-1:-1;;;8541:68:89;;37087:2:110;8541:68:89;;;37069:21:110;37126:2;37106:18;;;37099:30;37165:33;37145:18;;;37138:61;37216:18;;8541:68:89;36885:355:110;8541:68:89;8755:1;8746:11;;8740:18;8773:2;8769:20;;;8764:3;8760:30;8736:55;;8840:20;8736:55;8777:11;8840:20;:::i;:::-;8827:10;;:33;8819:70;;;;-1:-1:-1;;;8819:70:89;;37447:2:110;8819:70:89;;;37429:21:110;37486:2;37466:18;;;37459:30;-1:-1:-1;;;37505:18:110;;;37498:54;37569:18;;8819:70:89;37245:348:110;8819:70:89;8912:15;8916:11;8912:1;:15;:::i;:::-;8904:55;-1:-1:-1;8929:6:89;-1:-1:-1;8937:21:89;;-1:-1:-1;8904:55:89;;-1:-1:-1;;;8904:55:89;8429:1362;8990:4;8980:6;:14;8976:815;;9093:15;9111:13;9120:4;9111:6;:13;:::i;:::-;9093:31;;9160:7;9147:3;:10;;;:20;9139:56;;;;-1:-1:-1;;;9139:56:89;;37800:2:110;9139:56:89;;;37782:21:110;37839:2;37819:18;;;37812:30;-1:-1:-1;;;37858:18:110;;;37851:53;37921:18;;9139:56:89;37598:347:110;9139:56:89;9218:1;;-1:-1:-1;9221:7:89;-1:-1:-1;9218:1:89;;-1:-1:-1;9210:42:89;;-1:-1:-1;;9210:42:89;8976:815;9309:20;9332:13;9341:4;9332:6;:13;:::i;:::-;9309:36;;9381:12;9368:3;:10;;;:25;9360:67;;;;-1:-1:-1;;;9360:67:89;;38152:2:110;9360:67:89;;;38134:21:110;38191:2;38171:18;;;38164:30;38230:31;38210:18;;;38203:59;38279:18;;9360:67:89;37950:353:110;9360:67:89;9573:1;9564:11;;9558:18;9591:2;9587:21;;;9582:3;9578:31;9554:56;;9659:22;9554:56;9595:12;9659:22;:::i;:::-;9646:10;;:35;9638:70;;;;-1:-1:-1;;;9638:70:89;;38510:2:110;9638:70:89;;;38492:21:110;38549:2;38529:18;;;38522:30;-1:-1:-1;;;38568:18:110;;;38561:52;38630:18;;9638:70:89;38308:346:110;9638:70:89;9731:16;9735:12;9731:1;:16;:::i;:::-;9723:57;-1:-1:-1;9749:7:89;-1:-1:-1;9758:21:89;;-1:-1:-1;9723:57:89;;-1:-1:-1;;;9723:57:89;7649:2148;;;;;;:::o;10052:892::-;10167:12;10191:16;10220:7;-1:-1:-1;;;;;10210:18:89;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10210:18:89;;10191:37;;10242:3;:10;10256:1;10242:15;10238:56;;;10280:3;-1:-1:-1;10273:10:89;;10238:56;10304:11;10318:14;10325:7;10318:4;:14;:::i;:::-;10304:28;-1:-1:-1;10404:2:89;10395:12;;10342;10482:180;10506:12;10516:2;10506:7;:12;:::i;:::-;10502:1;:16;10482:180;;;10579:10;;10566:24;;10618:9;10625:2;10585:3;10618:9;:::i;:::-;;-1:-1:-1;10641:10:89;10649:2;10641:10;;:::i;:::-;;-1:-1:-1;10520:3:89;;;;:::i;:::-;;;;10482:180;;;-1:-1:-1;10713:12:89;10795:1;10788:2;10778:7;:12;10772:2;:19;10766:3;:26;:30;10759:37;;10901:4;10894;10888:11;10884:22;10876:4;10872:9;10866:3;10860:10;10856:26;10853:54;10847:4;10840:68;10934:3;10927:10;;;;;;10052:892;;;;;:::o;12055:874:63:-;12146:14;12172:12;12194:24;;:::i;:::-;12228:20;;:::i;:::-;12269:4;12258:15;;;12341:8;;;:15;;;12425:8;;;:15;;;12509:8;;;:16;;;12535:8;;;:20;;;12565:8;;;:19;;;12673:6;12667:4;12258:15;12571:1;12650:4;12643:5;12639:16;12628:58;12617:69;-1:-1:-1;12617:69:63;12783:48;;;;12756:75;12858:7;12850:46;;;;-1:-1:-1;;;12850:46:63;;38986:2:110;12850:46:63;;;38968:21:110;39025:2;39005:18;;;38998:30;39064:28;39044:18;;;39037:56;39110:18;;12850:46:63;38784:350:110;12850:46:63;-1:-1:-1;12913:9:63;;;-1:-1:-1;;;;;12055:874:63:o;3775:344:94:-;3838:12;3862:20;3895:6;:13;3911:1;3895:17;;;;:::i;:::-;-1:-1:-1;;;;;3885:28:94;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3885:28:94;;3862:51;;3929:9;3924:164;3948:6;:13;3944:1;:17;3924:164;;;4012:1;3999:6;4006:1;3999:9;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;3999:9:94;:14;;3982:7;3990:5;:1;3994;3990:5;:::i;:::-;3982:14;;;;;;;;:::i;:::-;;;;:31;-1:-1:-1;;;;;3982:31:94;;;;;;;;;4074:2;4061:6;4068:1;4061:9;;;;;;;;:::i;:::-;;;;;4055:21;;;4061:9;;4055:21;:::i;:::-;4048:29;;4027:7;4035:5;:1;4039;4035:5;:::i;:::-;:9;;4043:1;4035:9;:::i;:::-;4027:18;;;;;;;;:::i;:::-;;;;:50;-1:-1:-1;;;;;4027:50:94;;;;;;;;-1:-1:-1;3963:3:94;;;;:::i;:::-;;;;3924:164;;;-1:-1:-1;4105:7:94;3775:344;-1:-1:-1;;3775:344:94:o;3295:346::-;3358:7;3397:2;3381:6;:13;:18;3377:167;;;-1:-1:-1;3492:2:94;3480:15;3474:22;;3295:346::o;3377:167::-;3572:6;3561:29;;;;;;;;;;;;:::i;10190:463:91:-;10268:15;10295:19;10344:2;10329:5;:12;;;:17;10325:272;;;10431:33;10458:5;10431:26;:33::i;:::-;10422:42;;10325:272;;;10556:30;10580:5;10556:23;:30::i;:::-;10547:39;;10325:272;10614:32;10639:6;10614:24;:32::i;10844:178::-;10911:18;10948:67;10973:41;10997:5;:13;;;11011:1;10997:16;;;;;;;;:::i;10973:41::-;10948:24;:67::i;3051:238:94:-;3126:12;3164:6;:13;3154:6;:23;3150:70;;-1:-1:-1;3200:9:94;;;;;;;;;-1:-1:-1;3200:9:94;;3193:16;;3150:70;3237:45;3243:6;3251;3275;3259;:13;:22;;;;:::i;:::-;3237:5;:45::i;11599:275:91:-;11711:15;;11765:85;11784:1;11772:2;:9;:13;:30;;;;;11801:1;11789:2;:9;:13;11772:30;:48;;;;;11815:2;11818:1;11815:5;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;11806:14:91;;:2;11809:1;11806:5;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;11806:5:91;:14;11772:48;11765:85;;;11836:3;;;;:::i;:::-;;;;11765:85;;7210:113:89;7275:12;7306:10;7312:3;7306:5;:10::i;205:2840:94:-;327:12;375:7;359:12;375:7;369:2;359:12;:::i;:::-;:23;;351:50;;;;-1:-1:-1;;;351:50:94;;;;;;;:::i;:::-;439:6;419:16;428:7;439:6;419:16;:::i;:::-;:26;;411:53;;;;-1:-1:-1;;;411:53:94;;;;;;;:::i;:::-;499:16;508:7;499:6;:16;:::i;:::-;482:6;:13;:33;;474:63;;;;-1:-1:-1;;;474:63:94;;39873:2:110;474:63:94;;;39855:21:110;39912:2;39892:18;;;39885:30;-1:-1:-1;;;39931:18:110;;;39924:47;39988:18;;474:63:94;39671:341:110;474:63:94;548:22;611:15;;639:1967;;;;2747:4;2741:11;2728:24;;2934:1;2923:9;2916:20;2982:4;2971:9;2967:20;2961:4;2954:34;604:2398;;639:1967;821:4;815:11;802:24;;1480:2;1471:7;1467:16;1862:9;1855:17;1849:4;1845:28;1833:9;1822;1818:25;1814:60;1910:7;1906:2;1902:16;2162:6;2148:9;2141:17;2135:4;2131:28;2119:9;2111:6;2107:22;2103:57;2099:70;1936:425;2195:3;2191:2;2188:11;1936:425;;;2333:9;;2322:21;;2236:4;2228:13;;;;2268;1936:425;;;-1:-1:-1;;2379:26:94;;;2587:2;2570:11;-1:-1:-1;;2566:25:94;2560:4;2553:39;-1:-1:-1;604:2398:94;-1:-1:-1;3029:9:94;205:2840;-1:-1:-1;;;;205:2840:94:o;11069:124:89:-;11126:12;11157:29;11163:3;:7;;;11172:1;11175:3;:10;;;11157:5;:29::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;411:148:110:-;-1:-1:-1;;;;;503:31:110;;493:42;;483:70;;549:1;546;539:12;564:288;647:6;700:2;688:9;679:7;675:23;671:32;668:52;;;716:1;713;706:12;668:52;755:9;742:23;774:48;816:5;774:48;:::i;857:180::-;916:6;969:2;957:9;948:7;944:23;940:32;937:52;;;985:1;982;975:12;937:52;-1:-1:-1;1008:23:110;;857:180;-1:-1:-1;857:180:110:o;1042:159::-;1106:5;1151:2;1142:6;1137:3;1133:16;1129:25;1126:45;;;1167:1;1164;1157:12;1126:45;-1:-1:-1;1189:6:110;1042:159;-1:-1:-1;1042:159:110:o;1206:361::-;1293:6;1346:2;1334:9;1325:7;1321:23;1317:32;1314:52;;;1362:1;1359;1352:12;1314:52;1402:9;1389:23;-1:-1:-1;;;;;1427:6:110;1424:30;1421:50;;;1467:1;1464;1457:12;1421:50;1490:71;1553:7;1544:6;1533:9;1529:22;1490:71;:::i;1572:156::-;1632:5;1677:3;1668:6;1663:3;1659:16;1655:26;1652:46;;;1694:1;1691;1684:12;1733:162;1799:5;1844:3;1835:6;1830:3;1826:16;1822:26;1819:46;;;1861:1;1858;1851:12;1900:498;2030:6;2038;2091:3;2079:9;2070:7;2066:23;2062:33;2059:53;;;2108:1;2105;2098:12;2059:53;2131:54;2177:7;2166:9;2131:54;:::i;:::-;2121:64;;2236:3;2225:9;2221:19;2208:33;-1:-1:-1;;;;;2256:6:110;2253:30;2250:50;;;2296:1;2293;2286:12;2250:50;2319:73;2384:7;2375:6;2364:9;2360:22;2319:73;:::i;:::-;2309:83;;;1900:498;;;;;:::o;2403:203::-;-1:-1:-1;;;;;2567:32:110;;;;2549:51;;2537:2;2522:18;;2403:203::o;2611:173::-;2679:20;;-1:-1:-1;;;;;2728:31:110;;2718:42;;2708:70;;2774:1;2771;2764:12;2789:186;2848:6;2901:2;2889:9;2880:7;2876:23;2872:32;2869:52;;;2917:1;2914;2907:12;2869:52;2940:29;2959:9;2940:29;:::i;2980:160::-;3044:5;3089:3;3080:6;3075:3;3071:16;3067:26;3064:46;;;3106:1;3103;3096:12;3145:968;3293:6;3301;3309;3317;3370:3;3358:9;3349:7;3345:23;3341:33;3338:53;;;3387:1;3384;3377:12;3338:53;3410:54;3456:7;3445:9;3410:54;:::i;:::-;3400:64;;3515:3;3504:9;3500:19;3487:33;-1:-1:-1;;;;;3580:2:110;3572:6;3569:14;3566:34;;;3596:1;3593;3586:12;3566:34;3619:71;3682:7;3673:6;3662:9;3658:22;3619:71;:::i;:::-;3609:81;;3743:3;3732:9;3728:19;3715:33;3699:49;;3773:2;3763:8;3760:16;3757:36;;;3789:1;3786;3779:12;3757:36;3827:8;3816:9;3812:24;3802:34;;3874:7;3867:4;3863:2;3859:13;3855:27;3845:55;;3896:1;3893;3886:12;3845:55;3936:2;3923:16;3962:2;3954:6;3951:14;3948:34;;;3978:1;3975;3968:12;3948:34;4025:7;4018:4;4009:6;4005:2;4001:15;3997:26;3994:39;3991:59;;;4046:1;4043;4036:12;3991:59;3145:968;;;;-1:-1:-1;;4077:4:110;4069:13;;-1:-1:-1;;;3145:968:110:o;4300:269::-;4357:6;4410:2;4398:9;4389:7;4385:23;4381:32;4378:52;;;4426:1;4423;4416:12;4378:52;4465:9;4452:23;4515:4;4508:5;4504:16;4497:5;4494:27;4484:55;;4535:1;4532;4525:12;5252:629;5382:6;5390;5443:2;5431:9;5422:7;5418:23;5414:32;5411:52;;;5459:1;5456;5449:12;5411:52;5499:9;5486:23;-1:-1:-1;;;;;5569:2:110;5561:6;5558:14;5555:34;;;5585:1;5582;5575:12;5555:34;5608:71;5671:7;5662:6;5651:9;5647:22;5608:71;:::i;:::-;5598:81;;5732:2;5721:9;5717:18;5704:32;5688:48;;5761:2;5751:8;5748:16;5745:36;;;5777:1;5774;5767:12;5745:36;;5800:75;5867:7;5856:8;5845:9;5841:24;5800:75;:::i;6118:679::-;6228:6;6236;6244;6252;6305:3;6293:9;6284:7;6280:23;6276:33;6273:53;;;6322:1;6319;6312:12;6273:53;6345:29;6364:9;6345:29;:::i;:::-;6335:39;;6424:2;6413:9;6409:18;6396:32;6437:48;6479:5;6437:48;:::i;:::-;6504:5;-1:-1:-1;6561:2:110;6546:18;;6533:32;6574:50;6533:32;6574:50;:::i;:::-;6643:7;-1:-1:-1;6702:2:110;6687:18;;6674:32;6715:50;6674:32;6715:50;:::i;:::-;6118:679;;;;-1:-1:-1;6118:679:110;;-1:-1:-1;;6118:679:110:o;6802:127::-;6863:10;6858:3;6854:20;6851:1;6844:31;6894:4;6891:1;6884:15;6918:4;6915:1;6908:15;6934:257;7006:4;7000:11;;;7038:17;;-1:-1:-1;;;;;7070:34:110;;7106:22;;;7067:62;7064:88;;;7132:18;;:::i;:::-;7168:4;7161:24;6934:257;:::o;7196:275::-;7267:2;7261:9;7332:2;7313:13;;-1:-1:-1;;7309:27:110;7297:40;;-1:-1:-1;;;;;7352:34:110;;7388:22;;;7349:62;7346:88;;;7414:18;;:::i;:::-;7450:2;7443:22;7196:275;;-1:-1:-1;7196:275:110:o;7476:282::-;7530:5;7578:4;7566:9;7561:3;7557:19;7553:30;7550:50;;;7596:1;7593;7586:12;7550:50;7618:22;;:::i;:::-;7609:31;;7676:9;7663:23;7656:5;7649:38;7747:2;7736:9;7732:18;7719:32;7714:2;7707:5;7703:14;7696:56;7476:282;;;;:::o;7763:311::-;7818:5;7866:4;7854:9;7849:3;7845:19;7841:30;7838:50;;;7884:1;7881;7874:12;7838:50;7906:22;;:::i;:::-;7897:31;;7951:41;7988:3;7977:9;7951:41;:::i;:::-;7944:5;7937:56;8027:40;8061:4;8050:9;8046:20;8027:40;:::i;:::-;8020:4;8013:5;8009:16;8002:66;7763:311;;;;:::o;8079:171::-;8146:20;;-1:-1:-1;;;;;8195:30:110;;8185:41;;8175:69;;8240:1;8237;8230:12;8255:1081;8374:6;8382;8435:2;8423:9;8414:7;8410:23;8406:32;8403:52;;;8451:1;8448;8441:12;8403:52;8491:9;8478:23;-1:-1:-1;;;;;8561:2:110;8553:6;8550:14;8547:34;;;8577:1;8574;8567:12;8547:34;8615:6;8604:9;8600:22;8590:32;;8660:7;8653:4;8649:2;8645:13;8641:27;8631:55;;8682:1;8679;8672:12;8631:55;8718:2;8705:16;8740:4;8763:2;8759;8756:10;8753:36;;;8769:18;;:::i;:::-;8809:36;8841:2;8836;8833:1;8829:10;8825:19;8809:36;:::i;:::-;8879:15;;;8910:12;;;;-1:-1:-1;8941:4:110;8980:11;;;8972:20;;8968:29;;;9009:19;;;9006:39;;;9041:1;9038;9031:12;9006:39;9065:11;;;;9085:165;9101:6;9096:3;9093:15;9085:165;;;9167:40;9199:7;9194:3;9167:40;:::i;:::-;9155:53;;9118:12;;;;9228;;;;9085:165;;;-1:-1:-1;9269:5:110;-1:-1:-1;9293:37:110;9311:18;;;9293:37;:::i;:::-;9283:47;;;;;;8255:1081;;;;;:::o;9341:163::-;9408:20;;9468:10;9457:22;;9447:33;;9437:61;;9494:1;9491;9484:12;9509:256;9575:6;9583;9636:2;9624:9;9615:7;9611:23;9607:32;9604:52;;;9652:1;9649;9642:12;9604:52;9675:28;9693:9;9675:28;:::i;:::-;9665:38;;9722:37;9755:2;9744:9;9740:18;9722:37;:::i;:::-;9712:47;;9509:256;;;;;:::o;9770:494::-;9898:6;9906;9959:3;9947:9;9938:7;9934:23;9930:33;9927:53;;;9976:1;9973;9966:12;9927:53;9999:54;10045:7;10034:9;9999:54;:::i;:::-;9989:64;;10104:3;10093:9;10089:19;10076:33;-1:-1:-1;;;;;10124:6:110;10121:30;10118:50;;;10164:1;10161;10154:12;10118:50;10187:71;10250:7;10241:6;10230:9;10226:22;10187:71;:::i;10928:268::-;10998:6;11051:2;11039:9;11030:7;11026:23;11022:32;11019:52;;;11067:1;11064;11057:12;11019:52;11099:9;11093:16;11118:48;11160:5;11118:48;:::i;11201:406::-;11403:2;11385:21;;;11442:2;11422:18;;;11415:30;11481:34;11476:2;11461:18;;11454:62;-1:-1:-1;;;11547:2:110;11532:18;;11525:40;11597:3;11582:19;;11201:406::o;11612:277::-;11679:6;11732:2;11720:9;11711:7;11707:23;11703:32;11700:52;;;11748:1;11745;11738:12;11700:52;11780:9;11774:16;11833:5;11826:13;11819:21;11812:5;11809:32;11799:60;;11855:1;11852;11845:12;11894:404;12096:2;12078:21;;;12135:2;12115:18;;;12108:30;12174:34;12169:2;12154:18;;12147:62;-1:-1:-1;;;12240:2:110;12225:18;;12218:38;12288:3;12273:19;;11894:404::o;12728:184::-;12786:6;12839:2;12827:9;12818:7;12814:23;12810:32;12807:52;;;12855:1;12852;12845:12;12807:52;12878:28;12896:9;12878:28;:::i;12917:340::-;13119:2;13101:21;;;13158:2;13138:18;;;13131:30;-1:-1:-1;;;13192:2:110;13177:18;;13170:46;13248:2;13233:18;;12917:340::o;13262:127::-;13323:10;13318:3;13314:20;13311:1;13304:31;13354:4;13351:1;13344:15;13378:4;13375:1;13368:15;13394:236;13433:3;-1:-1:-1;;;;;13506:2:110;13503:1;13499:10;13536:2;13533:1;13529:10;13567:3;13563:2;13559:12;13554:3;13551:21;13548:47;;;13575:18;;:::i;:::-;13611:13;;13394:236;-1:-1:-1;;;;13394:236:110:o;13635:577::-;13757:4;13763:6;13823:11;13810:25;13917:2;13913:7;13902:8;13886:14;13882:29;13878:43;13858:18;13854:68;13844:96;;13936:1;13933;13926:12;13844:96;13963:33;;14015:20;;;-1:-1:-1;;;;;;14047:30:110;;14044:50;;;14090:1;14087;14080:12;14044:50;14123:4;14111:17;;-1:-1:-1;14182:4:110;14170:17;;14154:14;14150:38;14140:49;;14137:69;;;14202:1;14199;14192:12;14137:69;13635:577;;;;;:::o;14217:230::-;14303:6;14356:2;14344:9;14335:7;14331:23;14327:32;14324:52;;;14372:1;14369;14362:12;14324:52;14395:46;14433:7;14422:9;14395:46;:::i;14452:349::-;14654:2;14636:21;;;14693:2;14673:18;;;14666:30;-1:-1:-1;;;14727:2:110;14712:18;;14705:55;14792:2;14777:18;;14452:349::o;14806:338::-;15008:2;14990:21;;;15047:2;15027:18;;;15020:30;-1:-1:-1;;;15081:2:110;15066:18;;15059:44;15135:2;15120:18;;14806:338::o;15149:184::-;15207:6;15260:2;15248:9;15239:7;15235:23;15231:32;15228:52;;;15276:1;15273;15266:12;15228:52;15299:28;15317:9;15299:28;:::i;17715:521::-;17792:4;17798:6;17858:11;17845:25;17952:2;17948:7;17937:8;17921:14;17917:29;17913:43;17893:18;17889:68;17879:96;;17971:1;17968;17961:12;17879:96;17998:33;;18050:20;;;-1:-1:-1;;;;;;18082:30:110;;18079:50;;;18125:1;18122;18115:12;18079:50;18158:4;18146:17;;-1:-1:-1;18189:14:110;18185:27;;;18175:38;;18172:58;;;18226:1;18223;18216:12;20273:127;20334:10;20329:3;20325:20;20322:1;20315:31;20365:4;20362:1;20355:15;20389:4;20386:1;20379:15;20756:231;20796:4;-1:-1:-1;;;;;20894:10:110;;;;20864;;20916:12;;;20913:38;;;20931:18;;:::i;:::-;20968:13;;20756:231;-1:-1:-1;;;20756:231:110:o;20992:238::-;21032:3;-1:-1:-1;;;;;21099:10:110;;;21129;;;21159:12;;;21151:21;;21148:47;;;21175:18;;:::i;21235:135::-;21274:3;-1:-1:-1;;21295:17:110;;21292:43;;;21315:18;;:::i;:::-;-1:-1:-1;21362:1:110;21351:13;;21235:135::o;21375:724::-;21563:3;21548:19;;21625:10;21598:25;21616:6;21598:25;:::i;:::-;21594:42;21583:9;21576:61;21666:36;21696:4;21688:6;21684:17;21666:36;:::i;:::-;-1:-1:-1;;;;;21795:2:110;21781:12;21777:21;21770:4;21759:9;21755:20;21748:51;21879:2;21841:36;21871:4;21863:6;21859:17;21841:36;:::i;:::-;21837:45;21830:4;21819:9;21815:20;21808:75;;;21946:4;21938:6;21934:17;21921:31;21914:4;21903:9;21899:20;21892:61;22016:4;22008:6;22004:17;21991:31;21984:4;21973:9;21969:20;21962:61;22086:4;22078:6;22074:17;22061:31;22054:4;22043:9;22039:20;22032:61;21375:724;;;;:::o;22718:573::-;22839:4;22845:6;22905:11;22892:25;22999:2;22995:7;22984:8;22968:14;22964:29;22960:43;22940:18;22936:68;22926:96;;23018:1;23015;23008:12;22926:96;23045:33;;23097:20;;;-1:-1:-1;;;;;;23129:30:110;;23126:50;;;23172:1;23169;23162:12;23126:50;23205:4;23193:17;;-1:-1:-1;23256:1:110;23252:14;;;23236;23232:35;23222:46;;23219:66;;;23281:1;23278;23271:12;23296:228;23381:6;23434:2;23422:9;23413:7;23409:23;23405:32;23402:52;;;23450:1;23447;23440:12;23402:52;23473:45;23510:7;23499:9;23473:45;:::i;23529:125::-;23569:4;23597:1;23594;23591:8;23588:34;;;23602:18;;:::i;:::-;-1:-1:-1;23639:9:110;;23529:125::o;24359:646::-;24409:5;24462:3;24455:4;24447:6;24443:17;24439:27;24429:55;;24480:1;24477;24470:12;24429:55;24513:2;24507:9;24555:2;24547:6;24543:15;24624:6;24612:10;24609:22;-1:-1:-1;;;;;24576:10:110;24573:34;24570:62;24567:88;;;24635:18;;:::i;:::-;24675:10;24671:2;24664:22;;24706:6;24747:2;24739:6;24735:15;24773:3;24765:6;24762:15;24759:35;;;24790:1;24787;24780:12;24759:35;24814:6;24829:146;24845:6;24840:3;24837:15;24829:146;;;24913:17;;24901:30;;24960:4;24951:14;;;;24862;24829:146;;;-1:-1:-1;24993:6:110;;24359:646;-1:-1:-1;;;;;24359:646:110:o;25010:391::-;25095:6;25148:3;25136:9;25127:7;25123:23;25119:33;25116:53;;;25165:1;25162;25155:12;25116:53;25191:22;;:::i;:::-;25236:44;25272:7;25261:9;25236:44;:::i;:::-;25229:5;25222:59;25315:55;25362:7;25355:4;25344:9;25340:20;25315:55;:::i;:::-;25308:4;25297:16;;25290:81;25301:5;25010:391;-1:-1:-1;;;25010:391:110:o;26114:272::-;26154:7;-1:-1:-1;;;;;26225:10:110;;;26255;;;26288:11;;26281:19;26310:12;;;26302:21;;26277:47;26274:73;;;26327:18;;:::i;:::-;26367:13;;26114:272;-1:-1:-1;;;;26114:272:110:o;26391:127::-;26452:10;26447:3;26443:20;26440:1;26433:31;26483:4;26480:1;26473:15;26507:4;26504:1;26497:15;26523:201;26563:1;-1:-1:-1;;;;;26628:10:110;;;;26647:37;;26664:18;;:::i;:::-;26702:10;;26698:20;;;;;26523:201;-1:-1:-1;;26523:201:110:o;27139:1463::-;27285:4;27314:2;27343;27332:9;27325:21;27384:3;27373:9;27369:19;-1:-1:-1;;;;;27492:2:110;27465:25;27483:6;27465:25;:::i;:::-;27461:34;27456:2;27445:9;27441:18;27434:62;27525:34;27555:2;27547:6;27543:15;27525:34;:::i;:::-;27578:2;27634;27620:12;27616:21;27611:2;27600:9;27596:18;27589:49;27698:2;27690:6;27686:15;27673:29;27647:55;;27782:2;27778:7;27769:6;27753:14;27749:27;27745:41;27725:18;27721:66;27711:94;;27801:1;27798;27791:12;27711:94;27827:31;;;;27881:19;;27912:14;;;27909:34;;;27939:1;27936;27929:12;27909:34;27962:4;27952:14;;28022:2;28014:6;28010:15;27994:14;27990:36;27982:6;27978:49;27975:69;;;28040:1;28037;28030:12;27975:69;28060:18;;;28053:30;;;28118:22;;;;28198:14;;;;28230:1;;-1:-1:-1;28171:3:110;28156:19;;28240:336;28254:6;28251:1;28248:13;28240:336;;;28315:20;;28303:33;;28383:15;;;28370:29;28356:12;;;28349:51;-1:-1:-1;;;;;28438:35:110;28457:15;;;28438:35;:::i;:::-;28434:61;28420:12;;;28413:83;28551:15;;;;28276:1;28269:9;;;;;28516:12;;28240:336;;;28593:3;27139:1463;-1:-1:-1;;;;;;;;;27139:1463:110:o;30558:112::-;30590:1;30616;30606:35;;30621:18;;:::i;:::-;-1:-1:-1;30655:9:110;;30558:112::o;31730:168::-;31770:7;31836:1;31832;31828:6;31824:14;31821:1;31818:21;31813:1;31806:9;31799:17;31795:45;31792:71;;;31843:18;;:::i;:::-;-1:-1:-1;31883:9:110;;31730:168::o;31903:128::-;31943:3;31974:1;31970:6;31967:1;31964:13;31961:39;;;31980:18;;:::i;:::-;-1:-1:-1;32016:9:110;;31903:128::o;32391:350::-;32593:2;32575:21;;;32632:2;32612:18;;;32605:30;32671:28;32666:2;32651:18;;32644:56;32732:2;32717:18;;32391:350::o;32746:127::-;32807:10;32802:3;32798:20;32795:1;32788:31;32838:4;32835:1;32828:15;32862:4;32859:1;32852:15;34288:157;34318:1;34352:4;34349:1;34345:12;34376:3;34366:37;;34383:18;;:::i;:::-;34435:3;34428:4;34425:1;34421:12;34417:22;34412:27;;;34288:157;;;;:::o;34450:195::-;34488:4;34525;34522:1;34518:12;34557:4;34554:1;34550:12;34582:3;34577;34574:12;34571:38;;;34589:18;;:::i;:::-;34626:13;;;34450:195;-1:-1:-1;;;34450:195:110:o;38659:120::-;38699:1;38725;38715:35;;38730:18;;:::i;:::-;-1:-1:-1;38764:9:110;;38659:120::o;39139:184::-;39209:6;39262:2;39250:9;39241:7;39237:23;39233:32;39230:52;;;39278:1;39275;39268:12;39230:52;-1:-1:-1;39301:16:110;;39139:184;-1:-1:-1;39139:184:110:o;39328:338::-;39530:2;39512:21;;;39569:2;39549:18;;;39542:30;-1:-1:-1;;;39603:2:110;39588:18;;39581:44;39657:2;39642:18;;39328:338::o","linkReferences":{}},"methodIdentifiers":{"PAUSED_UPDATE_OPERATOR_SET()":"f4db0571","PAUSED_UPDATE_STATE_ROOT()":"0510c191","THRESHOLD_DENOMINATOR()":"ef024458","aggregator()":"245a7bfc","forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))":"1df9e1d2","getApk()":"6f5b9918","getOperatorWeight(bytes32)":"dd64766e","getQuorumThreshold()":"4afa71b9","getStateRoot(uint32,uint64)":"b3a9e53b","getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))":"d5d4bb5a","getTotalWeight()":"06aba0e1","initialize(uint128,address,address,address)":"90540c37","nextOperatorUpdateId()":"e0f5d9f0","owner()":"8da5cb5b","pause(uint256)":"136439dd","pauseAll()":"595c6a67","paused()":"5c975abb","paused(uint8)":"5ac86ab7","pauserRegistry()":"886f1195","renounceOwnership()":"715018a6","setAggregator(address)":"f9120af6","setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)":"b128aeee","setPauserRegistry(address)":"10d67a2f","setQuorumThreshold(uint128)":"2db52ea5","transferOwnership(address)":"f2fde38b","unpause(uint256)":"fabc1cbc","updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)":"2f65284e","updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":"82616b7b","updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":"1fb4d411"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IPauserRegistry\",\"name\":\"pauserRegistry\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"PauserRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"name\":\"StateRootUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"PAUSED_UPDATE_OPERATOR_SET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSED_UPDATE_STATE_ROOT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"THRESHOLD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aggregator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"weight\",\"type\":\"uint128\"}],\"internalType\":\"struct RollupOperators.Operator[]\",\"name\":\"operators\",\"type\":\"tuple[]\"}],\"internalType\":\"struct OperatorSetUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"forceOperatorSetUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getApk\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"pubkeyHash\",\"type\":\"bytes32\"}],\"name\":\"getOperatorWeight\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getQuorumThreshold\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"}],\"name\":\"getStateRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct StateRootUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"storageKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"stateTrieWitness\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"storageTrieWitness\",\"type\":\"bytes\"}],\"internalType\":\"struct SFFLRegistryBase.ProofParams\",\"name\":\"proofParams\",\"type\":\"tuple\"}],\"name\":\"getStorageValue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalWeight\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"quorumThreshold\",\"type\":\"uint128\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_aggregator\",\"type\":\"address\"},{\"internalType\":\"contract IPauserRegistry\",\"name\":\"_pauserRegistry\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorUpdateId\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauserRegistry\",\"outputs\":[{\"internalType\":\"contract IPauserRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_aggregator\",\"type\":\"address\"}],\"name\":\"setAggregator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"weight\",\"type\":\"uint128\"}],\"internalType\":\"struct RollupOperators.Operator[]\",\"name\":\"operators\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"_nextOperatorUpdateId\",\"type\":\"uint64\"}],\"name\":\"setInitialOperatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"setPauserRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newQuorumThreshold\",\"type\":\"uint128\"}],\"name\":\"setQuorumThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct StateRootUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"storageKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"stateTrieWitness\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"storageTrieWitness\",\"type\":\"bytes\"}],\"internalType\":\"struct SFFLRegistryBase.ProofParams\",\"name\":\"proofParams\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"agreement\",\"type\":\"bytes\"}],\"name\":\"updateAndGetStorageValue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"weight\",\"type\":\"uint128\"}],\"internalType\":\"struct RollupOperators.Operator[]\",\"name\":\"operators\",\"type\":\"tuple[]\"}],\"internalType\":\"struct OperatorSetUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"internalType\":\"struct RollupOperators.SignatureInfo\",\"name\":\"signatureInfo\",\"type\":\"tuple\"}],\"name\":\"updateOperatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"rollupId\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"nearDaCommitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct StateRootUpdate.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"internalType\":\"struct RollupOperators.SignatureInfo\",\"name\":\"signatureInfo\",\"type\":\"tuple\"}],\"name\":\"updateStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"THRESHOLD_DENOMINATOR()\":{\"returns\":{\"_0\":\"Operator set weight threshold denominator\"}},\"forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))\":{\"params\":{\"message\":\"Operator set update message\"}},\"getApk()\":{\"returns\":{\"_0\":\"Operator set aggregate public key\"}},\"getOperatorWeight(bytes32)\":{\"params\":{\"pubkeyHash\":\"Operator pubkey hash\"},\"returns\":{\"_0\":\"Operator weight\"}},\"getQuorumThreshold()\":{\"returns\":{\"_0\":\"Operator set weight threshold\"}},\"getStateRoot(uint32,uint64)\":{\"details\":\"Does not fail if it's empty, should be checked for zeroes\",\"params\":{\"blockHeight\":\"Rollup block height\",\"rollupId\":\"Pre-defined rollup ID\"},\"returns\":{\"_0\":\"Rollup state root, or 0 if unset\"}},\"getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))\":{\"params\":{\"message\":\"State root update message\",\"proofParams\":\"Storage proof parameters\"},\"returns\":{\"_0\":\"Verified storage value\"}},\"getTotalWeight()\":{\"returns\":{\"_0\":\"Operator set total weight\"}},\"initialize(uint128,address,address,address)\":{\"params\":{\"_aggregator\":\"Aggregator address\",\"_pauserRegistry\":\"Pauser registry address\",\"initialOwner\":\"Owner address\",\"quorumThreshold\":\"Quorum threshold, based on THRESHOLD_DENOMINATOR\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pause(uint256)\":{\"details\":\"This function can only pause functionality, and thus cannot 'unflip' any bit in `_paused` from 1 to 0.\",\"params\":{\"newPausedStatus\":\"represents the new value for `_paused` to take, which means it may flip several bits at once.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setAggregator(address)\":{\"params\":{\"_aggregator\":\"New aggregator address\"}},\"setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)\":{\"params\":{\"_nextOperatorUpdateId\":\"Starting next operator update message ID\",\"operators\":\"Initial operator list\"}},\"setQuorumThreshold(uint128)\":{\"params\":{\"newQuorumThreshold\":\"New quorum threshold, based on THRESHOLD_DENOMINATOR\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unpause(uint256)\":{\"details\":\"This function can only unpause functionality, and thus cannot 'flip' any bit in `_paused` from 0 to 1.\",\"params\":{\"newPausedStatus\":\"represents the new value for `_paused` to take, which means it may flip several bits at once.\"}},\"updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)\":{\"params\":{\"agreement\":\"AVS operators agreement info\",\"message\":\"State root update message\",\"proofParams\":\"Storage proof parameters\"},\"returns\":{\"_0\":\"Verified storage value\"}},\"updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))\":{\"params\":{\"message\":\"Operator set update message\",\"signatureInfo\":\"BLS aggregated signature info\"}},\"updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))\":{\"params\":{\"message\":\"State root update message\",\"signatureInfo\":\"BLS aggregated signature info\"}}},\"stateVariables\":{\"_operatorSet\":{\"details\":\"Operator set used for agreements\"}},\"title\":\"SFFL registry for rollups / external networks\",\"version\":1},\"userdoc\":{\"events\":{\"Paused(address,uint256)\":{\"notice\":\"Emitted when the pause is triggered by `account`, and changed to `newPausedStatus`.\"},\"PauserRegistrySet(address,address)\":{\"notice\":\"Emitted when the `pauserRegistry` is set to `newPauserRegistry`.\"},\"StateRootUpdated(uint32,uint64,bytes32)\":{\"notice\":\"Emitted when a rollup's state root is updated\"},\"Unpaused(address,uint256)\":{\"notice\":\"Emitted when the pause is lifted by `account`, and changed to `newPausedStatus`.\"}},\"kind\":\"user\",\"methods\":{\"PAUSED_UPDATE_OPERATOR_SET()\":{\"notice\":\"Index for flag that pauses operator set updates\"},\"PAUSED_UPDATE_STATE_ROOT()\":{\"notice\":\"Index for flag that pauses state root updates\"},\"THRESHOLD_DENOMINATOR()\":{\"notice\":\"Gets the operator set quorum weight threshold denominator\"},\"aggregator()\":{\"notice\":\"Aggregator address, used for the initial operator set setup\"},\"forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))\":{\"notice\":\"Forces an operator set update. This is meant to be used only by the owner in a testnet scenario in case there is no consensus on a particular operator set update. This can also be used while operator set updating is paused.\"},\"getApk()\":{\"notice\":\"Gets the operator set aggregate public key\"},\"getOperatorWeight(bytes32)\":{\"notice\":\"Gets an operator's weight\"},\"getQuorumThreshold()\":{\"notice\":\"Gets the operator set weight threshold\"},\"getStateRoot(uint32,uint64)\":{\"notice\":\"Gets a state root for a rollup in a specific block height\"},\"getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))\":{\"notice\":\"Gets a storage key value based on a rollup's state root in a block\"},\"getTotalWeight()\":{\"notice\":\"Gets the operator set total weight\"},\"initialize(uint128,address,address,address)\":{\"notice\":\"Initializes the contract\"},\"nextOperatorUpdateId()\":{\"notice\":\"Next operator set update message ID\"},\"pause(uint256)\":{\"notice\":\"This function is used to pause an EigenLayer contract's functionality. It is permissioned to the `pauser` address, which is expected to be a low threshold multisig.\"},\"pauseAll()\":{\"notice\":\"Alias for `pause(type(uint256).max)`.\"},\"paused()\":{\"notice\":\"Returns the current paused status as a uint256.\"},\"paused(uint8)\":{\"notice\":\"Returns 'true' if the `indexed`th bit of `_paused` is 1, and 'false' otherwise\"},\"pauserRegistry()\":{\"notice\":\"Address of the `PauserRegistry` contract that this contract defers to for determining access control (for pausing).\"},\"setAggregator(address)\":{\"notice\":\"Sets the aggregator address\"},\"setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)\":{\"notice\":\"Sets the initial operator set\"},\"setPauserRegistry(address)\":{\"notice\":\"Allows the unpauser to set a new pauser registry\"},\"setQuorumThreshold(uint128)\":{\"notice\":\"Sets the operator set quorum weight threshold\"},\"unpause(uint256)\":{\"notice\":\"This function is used to unpause an EigenLayer contract's functionality. It is permissioned to the `unpauser` address, which is expected to be a high threshold multisig or governance contract.\"},\"updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)\":{\"notice\":\"Gets a storage key value based on a rollup's state root in a block\"},\"updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))\":{\"notice\":\"Updates the operator set through an operator set update message\"},\"updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))\":{\"notice\":\"Updates a rollup's state root for a block height through a state root update message\"}},\"notice\":\"Contract that centralizes the AVS operator set copy management, which is based on agreements such as the state root updates, as well as state root updates themselves. Differently from the Ethereum AVS contracts, the rollup contract heavily assumes a one-quorum operator set and can only prove agreements based on the current operator set state\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/rollup/SFFLRegistryRollup.sol\":\"SFFLRegistryRollup\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[\":@eigenlayer/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/\",\":@eth-optimism/=node_modules/@eth-optimism/\",\":@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324\",\"dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d\",\"dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx\"]},\"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol\":{\"keccak256\":\"0xc543d34b3e0fd116227fc5218286de6b30a9141f47df2e8cc17d857d2c0cb338\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e78ca3c3c9f14ccde852ea41bc411726ea7770a1cf2ef18851e67bcdf7522cff\",\"dweb:/ipfs/QmWagcWsaNZqBZhdEHhZ4PcU9fx5wQnrbjoaaFvjEwgGHt\"]},\"lib/eigenlayer-middleware/src/libraries/BN254.sol\":{\"keccak256\":\"0x40a9a94aaa705b67d1c4efdccb8e1ff8ccf41d1ce20639f6cd6fd27d84891417\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4b7a07633fc3fce4d2eac8dc16ee2cf138e34583e1822d3d705d7c567667bf49\",\"dweb:/ipfs/QmVWYp64T71yKnT2Bpoq4wj7bADUKmjW8w5uzhCTh5Bs91\"]},\"node_modules/@eth-optimism/contracts/libraries/codec/Lib_OVMCodec.sol\":{\"keccak256\":\"0xb5009ac1e0617e0b3b2fb917f08f8e8a7ae706034cc3a675258bc3d91978525e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://776f8407a5c3bcd0991801a922ea69a9665b14e85e6ac925ef9ec5dc5d0de87c\",\"dweb:/ipfs/QmRE5yQd69rDDmPPo2TcFDoCzXtbodHgicQNoXiRCTsBJb\"]},\"node_modules/@eth-optimism/contracts/libraries/resolver/Lib_AddressManager.sol\":{\"keccak256\":\"0xcde9b29429d512c549f7c1b8a033f161fa71c18cda08b241748663854196ae14\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6fbd748ce0173bd14166174c68a43e108ec27d8f90cf3dc3703cda120b641e0b\",\"dweb:/ipfs/QmT818AKJieRAndixSms9L7gmC7b1cvD4BGycUPtFpbWaM\"]},\"node_modules/@eth-optimism/contracts/libraries/resolver/Lib_AddressResolver.sol\":{\"keccak256\":\"0x515c4db671a28e2fe180201f6d11c0208c05f582ca3489fb6b8e81c27659bc62\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c92c08efa7be210e9447267517c77ca39372b5bd33d121539ef1f59fac149fa\",\"dweb:/ipfs/QmZ8V2Kaw7XqGhCCe2CAPMCPkHgcMGr92enXfXqGpBYw23\"]},\"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPReader.sol\":{\"keccak256\":\"0xd794d1b32c6e31d40e2526b5e519de1b4e8d14d6933889f9b916e69c5d1848c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://76a6d82cce64bf143f77249c49de3d93687a2b3e69b020f2f74fad503806b52b\",\"dweb:/ipfs/QmUHF33h4Tn4Q4cVHwk82eMMer8YTDTk1u3e4MCfrSYt3J\"]},\"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPWriter.sol\":{\"keccak256\":\"0x215b90672ce126effc3f2df61ca0cdf52d2b1cc9be602877e637829b0bf229fd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7418707a22a792e838759becfa4ceb60774171a0a219cdd39452351225ec31a6\",\"dweb:/ipfs/QmZWxL4DNv8EVZoJbLSf4euzQwhzyRduSia5cVFJo4Bxh2\"]},\"node_modules/@eth-optimism/contracts/libraries/trie/Lib_MerkleTrie.sol\":{\"keccak256\":\"0x081304d7627b242e0a5724785a9cc4128b3104460f234ffe404d7bc87c1ad162\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1891f18b4ac99bc8c1dcbe255bf9db1e5c724389c0fa533ca18a6039aa8fe9f7\",\"dweb:/ipfs/QmW8GaMNvDeDQnjHAaAfv9wwjmtvjvEcQ9pyoxVmeK5x1x\"]},\"node_modules/@eth-optimism/contracts/libraries/trie/Lib_SecureMerkleTrie.sol\":{\"keccak256\":\"0x38e47070ba79b1049b6d623db3377322d98c2217e8fa786bd48116fc7e3bfd9e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90c88905fa6495e230e8099e2d7e5ad08bc95466a54d1f0eb0cedcdbbf5bdb63\",\"dweb:/ipfs/QmQVY4xxCLZC825mAgLjyaHEeHP4gPr65pN2SJCgPURDDA\"]},\"node_modules/@eth-optimism/contracts/libraries/utils/Lib_Bytes32Utils.sol\":{\"keccak256\":\"0xf2d1a526f2529e51fc2fffccf093c1691e291cbbb6de8a3da7d7f80024a9a234\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3e0ff635f68c17f1b1a9b094a9da670dd1170241e67d8e87b00be2157f28ad6\",\"dweb:/ipfs/QmS9fK2TZ123NE2iXAbUxfaasSPGbui5EG6HP9uz6gveiN\"]},\"node_modules/@eth-optimism/contracts/libraries/utils/Lib_BytesUtils.sol\":{\"keccak256\":\"0xc39ee13f97e4ccfbc72a5aac571deb3c1aff882fca2dd18be794d43ac5de0a30\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c5761b5cf7287ac94404f54481d88ee0122bc031f1c2e0b4b2cc4c384e1b018\",\"dweb:/ipfs/QmbBTssPvH5ABa3e8MNRoHMkGGaoRXqneWhJzrDx7FsD1R\"]},\"src/base/SFFLRegistryBase.sol\":{\"keccak256\":\"0x7f36c3b4792292004cd625caf96eb003dc1be3b24e7ab2f449be13f1b150ec31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5e2a259efbc6542ac0badd7b3969a564c7f563742874bccd1c3b4ca12056bbd9\",\"dweb:/ipfs/QmRDavGQa82t6B9rjtYXvPcAMWALLA4Uzd5ZT9YpgBXYyV\"]},\"src/base/message/OperatorSetUpdate.sol\":{\"keccak256\":\"0x534462101877424c2c233d4032582dbc5a430205d9362e81d1343dd9e9822e5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a99f49eb89a0b1c4447386e0e5bb065b78695a594621b22fd0fa1271311fba83\",\"dweb:/ipfs/QmRyrpJDeeYMzLQTCwFkCHndSdYsujfFDhXPhpJN19HPRw\"]},\"src/base/message/StateRootUpdate.sol\":{\"keccak256\":\"0x678b218208110cf1d50201459ed67fb2e110c7313251ffa240465ecfce89e6a7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dbae4e861fec0cbcdf7b98603ffc42e2a71034576ff4db50534d73e83e17523b\",\"dweb:/ipfs/QmPWNZXWKaxTA8MJzSNX5Qtmw31rM4SrYgVJtQ9UjM2kFu\"]},\"src/base/utils/RollupOperators.sol\":{\"keccak256\":\"0xbfc1ca2ec06fb58629caa7bdf00fce61daaca1a58a3d50e7b4f69ddf1b132784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://853941dc11c18731968065c60851971e41e41d35471337d67eb3f92a28aa8ff6\",\"dweb:/ipfs/Qma9YMpvp8X9B1Fe5Win3vyKGd3LPavEJQCLNpFDFg1MLb\"]},\"src/rollup/SFFLRegistryRollup.sol\":{\"keccak256\":\"0xa2ffe12de53fd9b03ca7439b8ab2ae939c33859f080b3d05f996452ce5ccb7d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da7dae6faa0744c23d2578362acd6a35aad86ebc57d4e8377b631a697c3c50c3\",\"dweb:/ipfs/QmeL1G2Cvn358X7q2W1H5DX9vxQaMVeETjrgDDw5Lm6wHa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.12+commit.f00d7308"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"uint256","name":"newPausedStatus","type":"uint256","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"contract IPauserRegistry","name":"pauserRegistry","type":"address","indexed":false},{"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address","indexed":false}],"type":"event","name":"PauserRegistrySet","anonymous":false},{"inputs":[{"internalType":"uint32","name":"rollupId","type":"uint32","indexed":true},{"internalType":"uint64","name":"blockHeight","type":"uint64","indexed":true},{"internalType":"bytes32","name":"stateRoot","type":"bytes32","indexed":false}],"type":"event","name":"StateRootUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"uint256","name":"newPausedStatus","type":"uint256","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"PAUSED_UPDATE_OPERATOR_SET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PAUSED_UPDATE_STATE_ROOT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"THRESHOLD_DENOMINATOR","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"aggregator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"struct OperatorSetUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]","components":[{"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint128","name":"weight","type":"uint128"}]}]}],"stateMutability":"nonpayable","type":"function","name":"forceOperatorSetUpdate"},{"inputs":[],"stateMutability":"view","type":"function","name":"getApk","outputs":[{"internalType":"struct BN254.G1Point","name":"","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes32","name":"pubkeyHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getOperatorWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getQuorumThreshold","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"}],"stateMutability":"view","type":"function","name":"getStateRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}]},{"internalType":"struct SFFLRegistryBase.ProofParams","name":"proofParams","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"storageKey","type":"bytes32"},{"internalType":"bytes","name":"stateTrieWitness","type":"bytes"},{"internalType":"bytes","name":"storageTrieWitness","type":"bytes"}]}],"stateMutability":"view","type":"function","name":"getStorageValue","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getTotalWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[{"internalType":"uint128","name":"quorumThreshold","type":"uint128"},{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_aggregator","type":"address"},{"internalType":"contract IPauserRegistry","name":"_pauserRegistry","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"nextOperatorUpdateId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pauseAll"},{"inputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"pauserRegistry","outputs":[{"internalType":"contract IPauserRegistry","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"_aggregator","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setAggregator"},{"inputs":[{"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]","components":[{"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint128","name":"weight","type":"uint128"}]},{"internalType":"uint64","name":"_nextOperatorUpdateId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setInitialOperatorSet"},{"inputs":[{"internalType":"contract IPauserRegistry","name":"newPauserRegistry","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setPauserRegistry"},{"inputs":[{"internalType":"uint128","name":"newQuorumThreshold","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"setQuorumThreshold"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"uint256","name":"newPausedStatus","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}]},{"internalType":"struct SFFLRegistryBase.ProofParams","name":"proofParams","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"storageKey","type":"bytes32"},{"internalType":"bytes","name":"stateTrieWitness","type":"bytes"},{"internalType":"bytes","name":"storageTrieWitness","type":"bytes"}]},{"internalType":"bytes","name":"agreement","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"updateAndGetStorageValue","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct OperatorSetUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"struct RollupOperators.Operator[]","name":"operators","type":"tuple[]","components":[{"internalType":"struct BN254.G1Point","name":"pubkey","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"uint128","name":"weight","type":"uint128"}]}]},{"internalType":"struct RollupOperators.SignatureInfo","name":"signatureInfo","type":"tuple","components":[{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}]}],"stateMutability":"nonpayable","type":"function","name":"updateOperatorSet"},{"inputs":[{"internalType":"struct StateRootUpdate.Message","name":"message","type":"tuple","components":[{"internalType":"uint32","name":"rollupId","type":"uint32"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bytes32","name":"nearDaTransactionId","type":"bytes32"},{"internalType":"bytes32","name":"nearDaCommitment","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}]},{"internalType":"struct RollupOperators.SignatureInfo","name":"signatureInfo","type":"tuple","components":[{"internalType":"struct BN254.G1Point[]","name":"nonSignerPubkeys","type":"tuple[]","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct BN254.G2Point","name":"apkG2","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct BN254.G1Point","name":"sigma","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}]}],"stateMutability":"nonpayable","type":"function","name":"updateStateRoot"}],"devdoc":{"kind":"dev","methods":{"THRESHOLD_DENOMINATOR()":{"returns":{"_0":"Operator set weight threshold denominator"}},"forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))":{"params":{"message":"Operator set update message"}},"getApk()":{"returns":{"_0":"Operator set aggregate public key"}},"getOperatorWeight(bytes32)":{"params":{"pubkeyHash":"Operator pubkey hash"},"returns":{"_0":"Operator weight"}},"getQuorumThreshold()":{"returns":{"_0":"Operator set weight threshold"}},"getStateRoot(uint32,uint64)":{"details":"Does not fail if it's empty, should be checked for zeroes","params":{"blockHeight":"Rollup block height","rollupId":"Pre-defined rollup ID"},"returns":{"_0":"Rollup state root, or 0 if unset"}},"getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))":{"params":{"message":"State root update message","proofParams":"Storage proof parameters"},"returns":{"_0":"Verified storage value"}},"getTotalWeight()":{"returns":{"_0":"Operator set total weight"}},"initialize(uint128,address,address,address)":{"params":{"_aggregator":"Aggregator address","_pauserRegistry":"Pauser registry address","initialOwner":"Owner address","quorumThreshold":"Quorum threshold, based on THRESHOLD_DENOMINATOR"}},"owner()":{"details":"Returns the address of the current owner."},"pause(uint256)":{"details":"This function can only pause functionality, and thus cannot 'unflip' any bit in `_paused` from 1 to 0.","params":{"newPausedStatus":"represents the new value for `_paused` to take, which means it may flip several bits at once."}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setAggregator(address)":{"params":{"_aggregator":"New aggregator address"}},"setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)":{"params":{"_nextOperatorUpdateId":"Starting next operator update message ID","operators":"Initial operator list"}},"setQuorumThreshold(uint128)":{"params":{"newQuorumThreshold":"New quorum threshold, based on THRESHOLD_DENOMINATOR"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"unpause(uint256)":{"details":"This function can only unpause functionality, and thus cannot 'flip' any bit in `_paused` from 0 to 1.","params":{"newPausedStatus":"represents the new value for `_paused` to take, which means it may flip several bits at once."}},"updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)":{"params":{"agreement":"AVS operators agreement info","message":"State root update message","proofParams":"Storage proof parameters"},"returns":{"_0":"Verified storage value"}},"updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":{"params":{"message":"Operator set update message","signatureInfo":"BLS aggregated signature info"}},"updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":{"params":{"message":"State root update message","signatureInfo":"BLS aggregated signature info"}}},"version":1},"userdoc":{"kind":"user","methods":{"PAUSED_UPDATE_OPERATOR_SET()":{"notice":"Index for flag that pauses operator set updates"},"PAUSED_UPDATE_STATE_ROOT()":{"notice":"Index for flag that pauses state root updates"},"THRESHOLD_DENOMINATOR()":{"notice":"Gets the operator set quorum weight threshold denominator"},"aggregator()":{"notice":"Aggregator address, used for the initial operator set setup"},"forceOperatorSetUpdate((uint64,uint64,((uint256,uint256),uint128)[]))":{"notice":"Forces an operator set update. This is meant to be used only by the owner in a testnet scenario in case there is no consensus on a particular operator set update. This can also be used while operator set updating is paused."},"getApk()":{"notice":"Gets the operator set aggregate public key"},"getOperatorWeight(bytes32)":{"notice":"Gets an operator's weight"},"getQuorumThreshold()":{"notice":"Gets the operator set weight threshold"},"getStateRoot(uint32,uint64)":{"notice":"Gets a state root for a rollup in a specific block height"},"getStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes))":{"notice":"Gets a storage key value based on a rollup's state root in a block"},"getTotalWeight()":{"notice":"Gets the operator set total weight"},"initialize(uint128,address,address,address)":{"notice":"Initializes the contract"},"nextOperatorUpdateId()":{"notice":"Next operator set update message ID"},"pause(uint256)":{"notice":"This function is used to pause an EigenLayer contract's functionality. It is permissioned to the `pauser` address, which is expected to be a low threshold multisig."},"pauseAll()":{"notice":"Alias for `pause(type(uint256).max)`."},"paused()":{"notice":"Returns the current paused status as a uint256."},"paused(uint8)":{"notice":"Returns 'true' if the `indexed`th bit of `_paused` is 1, and 'false' otherwise"},"pauserRegistry()":{"notice":"Address of the `PauserRegistry` contract that this contract defers to for determining access control (for pausing)."},"setAggregator(address)":{"notice":"Sets the aggregator address"},"setInitialOperatorSet(((uint256,uint256),uint128)[],uint64)":{"notice":"Sets the initial operator set"},"setPauserRegistry(address)":{"notice":"Allows the unpauser to set a new pauser registry"},"setQuorumThreshold(uint128)":{"notice":"Sets the operator set quorum weight threshold"},"unpause(uint256)":{"notice":"This function is used to unpause an EigenLayer contract's functionality. It is permissioned to the `unpauser` address, which is expected to be a high threshold multisig or governance contract."},"updateAndGetStorageValue((uint32,uint64,uint64,bytes32,bytes32,bytes32),(address,bytes32,bytes,bytes),bytes)":{"notice":"Gets a storage key value based on a rollup's state root in a block"},"updateOperatorSet((uint64,uint64,((uint256,uint256),uint128)[]),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":{"notice":"Updates the operator set through an operator set update message"},"updateStateRoot((uint32,uint64,uint64,bytes32,bytes32,bytes32),((uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256)))":{"notice":"Updates a rollup's state root for a block height through a state root update message"}},"version":1}},"settings":{"remappings":["@eigenlayer/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/","@eth-optimism/=node_modules/@eth-optimism/","@openzeppelin-upgrades/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/","@openzeppelin/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","eigenlayer-contracts/=lib/eigenlayer-middleware/lib/eigenlayer-contracts/","eigenlayer-middleware/=lib/eigenlayer-middleware/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/eigenlayer-middleware/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/eigenlayer-middleware/lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":100},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/rollup/SFFLRegistryRollup.sol":"SFFLRegistryRollup"},"evmVersion":"london","libraries":{}},"sources":{"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e","urls":["bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497","dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3","urls":["bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4","dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673","urls":["bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2","dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7","urls":["bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92","dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"],"license":"MIT"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol":{"keccak256":"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f","urls":["bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324","dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol":{"keccak256":"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49","urls":["bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d","dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol":{"keccak256":"0xc543d34b3e0fd116227fc5218286de6b30a9141f47df2e8cc17d857d2c0cb338","urls":["bzz-raw://e78ca3c3c9f14ccde852ea41bc411726ea7770a1cf2ef18851e67bcdf7522cff","dweb:/ipfs/QmWagcWsaNZqBZhdEHhZ4PcU9fx5wQnrbjoaaFvjEwgGHt"],"license":"BUSL-1.1"},"lib/eigenlayer-middleware/src/libraries/BN254.sol":{"keccak256":"0x40a9a94aaa705b67d1c4efdccb8e1ff8ccf41d1ce20639f6cd6fd27d84891417","urls":["bzz-raw://4b7a07633fc3fce4d2eac8dc16ee2cf138e34583e1822d3d705d7c567667bf49","dweb:/ipfs/QmVWYp64T71yKnT2Bpoq4wj7bADUKmjW8w5uzhCTh5Bs91"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/codec/Lib_OVMCodec.sol":{"keccak256":"0xb5009ac1e0617e0b3b2fb917f08f8e8a7ae706034cc3a675258bc3d91978525e","urls":["bzz-raw://776f8407a5c3bcd0991801a922ea69a9665b14e85e6ac925ef9ec5dc5d0de87c","dweb:/ipfs/QmRE5yQd69rDDmPPo2TcFDoCzXtbodHgicQNoXiRCTsBJb"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/resolver/Lib_AddressManager.sol":{"keccak256":"0xcde9b29429d512c549f7c1b8a033f161fa71c18cda08b241748663854196ae14","urls":["bzz-raw://6fbd748ce0173bd14166174c68a43e108ec27d8f90cf3dc3703cda120b641e0b","dweb:/ipfs/QmT818AKJieRAndixSms9L7gmC7b1cvD4BGycUPtFpbWaM"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/resolver/Lib_AddressResolver.sol":{"keccak256":"0x515c4db671a28e2fe180201f6d11c0208c05f582ca3489fb6b8e81c27659bc62","urls":["bzz-raw://8c92c08efa7be210e9447267517c77ca39372b5bd33d121539ef1f59fac149fa","dweb:/ipfs/QmZ8V2Kaw7XqGhCCe2CAPMCPkHgcMGr92enXfXqGpBYw23"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPReader.sol":{"keccak256":"0xd794d1b32c6e31d40e2526b5e519de1b4e8d14d6933889f9b916e69c5d1848c6","urls":["bzz-raw://76a6d82cce64bf143f77249c49de3d93687a2b3e69b020f2f74fad503806b52b","dweb:/ipfs/QmUHF33h4Tn4Q4cVHwk82eMMer8YTDTk1u3e4MCfrSYt3J"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPWriter.sol":{"keccak256":"0x215b90672ce126effc3f2df61ca0cdf52d2b1cc9be602877e637829b0bf229fd","urls":["bzz-raw://7418707a22a792e838759becfa4ceb60774171a0a219cdd39452351225ec31a6","dweb:/ipfs/QmZWxL4DNv8EVZoJbLSf4euzQwhzyRduSia5cVFJo4Bxh2"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/trie/Lib_MerkleTrie.sol":{"keccak256":"0x081304d7627b242e0a5724785a9cc4128b3104460f234ffe404d7bc87c1ad162","urls":["bzz-raw://1891f18b4ac99bc8c1dcbe255bf9db1e5c724389c0fa533ca18a6039aa8fe9f7","dweb:/ipfs/QmW8GaMNvDeDQnjHAaAfv9wwjmtvjvEcQ9pyoxVmeK5x1x"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/trie/Lib_SecureMerkleTrie.sol":{"keccak256":"0x38e47070ba79b1049b6d623db3377322d98c2217e8fa786bd48116fc7e3bfd9e","urls":["bzz-raw://90c88905fa6495e230e8099e2d7e5ad08bc95466a54d1f0eb0cedcdbbf5bdb63","dweb:/ipfs/QmQVY4xxCLZC825mAgLjyaHEeHP4gPr65pN2SJCgPURDDA"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/utils/Lib_Bytes32Utils.sol":{"keccak256":"0xf2d1a526f2529e51fc2fffccf093c1691e291cbbb6de8a3da7d7f80024a9a234","urls":["bzz-raw://f3e0ff635f68c17f1b1a9b094a9da670dd1170241e67d8e87b00be2157f28ad6","dweb:/ipfs/QmS9fK2TZ123NE2iXAbUxfaasSPGbui5EG6HP9uz6gveiN"],"license":"MIT"},"node_modules/@eth-optimism/contracts/libraries/utils/Lib_BytesUtils.sol":{"keccak256":"0xc39ee13f97e4ccfbc72a5aac571deb3c1aff882fca2dd18be794d43ac5de0a30","urls":["bzz-raw://5c5761b5cf7287ac94404f54481d88ee0122bc031f1c2e0b4b2cc4c384e1b018","dweb:/ipfs/QmbBTssPvH5ABa3e8MNRoHMkGGaoRXqneWhJzrDx7FsD1R"],"license":"MIT"},"src/base/SFFLRegistryBase.sol":{"keccak256":"0x7f36c3b4792292004cd625caf96eb003dc1be3b24e7ab2f449be13f1b150ec31","urls":["bzz-raw://5e2a259efbc6542ac0badd7b3969a564c7f563742874bccd1c3b4ca12056bbd9","dweb:/ipfs/QmRDavGQa82t6B9rjtYXvPcAMWALLA4Uzd5ZT9YpgBXYyV"],"license":"MIT"},"src/base/message/OperatorSetUpdate.sol":{"keccak256":"0x534462101877424c2c233d4032582dbc5a430205d9362e81d1343dd9e9822e5e","urls":["bzz-raw://a99f49eb89a0b1c4447386e0e5bb065b78695a594621b22fd0fa1271311fba83","dweb:/ipfs/QmRyrpJDeeYMzLQTCwFkCHndSdYsujfFDhXPhpJN19HPRw"],"license":"MIT"},"src/base/message/StateRootUpdate.sol":{"keccak256":"0x678b218208110cf1d50201459ed67fb2e110c7313251ffa240465ecfce89e6a7","urls":["bzz-raw://dbae4e861fec0cbcdf7b98603ffc42e2a71034576ff4db50534d73e83e17523b","dweb:/ipfs/QmPWNZXWKaxTA8MJzSNX5Qtmw31rM4SrYgVJtQ9UjM2kFu"],"license":"MIT"},"src/base/utils/RollupOperators.sol":{"keccak256":"0xbfc1ca2ec06fb58629caa7bdf00fce61daaca1a58a3d50e7b4f69ddf1b132784","urls":["bzz-raw://853941dc11c18731968065c60851971e41e41d35471337d67eb3f92a28aa8ff6","dweb:/ipfs/Qma9YMpvp8X9B1Fe5Win3vyKGd3LPavEJQCLNpFDFg1MLb"],"license":"MIT"},"src/rollup/SFFLRegistryRollup.sol":{"keccak256":"0xa2ffe12de53fd9b03ca7439b8ab2ae939c33859f080b3d05f996452ce5ccb7d8","urls":["bzz-raw://da7dae6faa0744c23d2578362acd6a35aad86ebc57d4e8377b631a697c3c50c3","dweb:/ipfs/QmeL1G2Cvn358X7q2W1H5DX9vxQaMVeETjrgDDw5Lm6wHa"],"license":"MIT"}},"version":1},"id":108} \ No newline at end of file diff --git a/examples/nffl-cli/typechain-types/SFFLRegistryRollup.ts b/examples/nffl-cli/typechain-types/SFFLRegistryRollup.ts index 208700bf..84f2512b 100644 --- a/examples/nffl-cli/typechain-types/SFFLRegistryRollup.ts +++ b/examples/nffl-cli/typechain-types/SFFLRegistryRollup.ts @@ -159,6 +159,7 @@ export interface SFFLRegistryRollupInterface extends Interface { | "paused()" | "pauserRegistry" | "renounceOwnership" + | "setAggregator" | "setInitialOperatorSet" | "setPauserRegistry" | "setQuorumThreshold" @@ -244,6 +245,10 @@ export interface SFFLRegistryRollupInterface extends Interface { functionFragment: "renounceOwnership", values?: undefined ): string; + encodeFunctionData( + functionFragment: "setAggregator", + values: [AddressLike] + ): string; encodeFunctionData( functionFragment: "setInitialOperatorSet", values: [RollupOperators.OperatorStruct[], BigNumberish] @@ -343,6 +348,10 @@ export interface SFFLRegistryRollupInterface extends Interface { functionFragment: "renounceOwnership", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "setAggregator", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "setInitialOperatorSet", data: BytesLike @@ -588,6 +597,12 @@ export interface SFFLRegistryRollup extends BaseContract { renounceOwnership: TypedContractMethod<[], [void], "nonpayable">; + setAggregator: TypedContractMethod< + [_aggregator: AddressLike], + [void], + "nonpayable" + >; + setInitialOperatorSet: TypedContractMethod< [ operators: RollupOperators.OperatorStruct[], @@ -737,6 +752,9 @@ export interface SFFLRegistryRollup extends BaseContract { getFunction( nameOrSignature: "renounceOwnership" ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "setAggregator" + ): TypedContractMethod<[_aggregator: AddressLike], [void], "nonpayable">; getFunction( nameOrSignature: "setInitialOperatorSet" ): TypedContractMethod< diff --git a/examples/nffl-cli/typechain-types/factories/SFFLRegistryRollup__factory.ts b/examples/nffl-cli/typechain-types/factories/SFFLRegistryRollup__factory.ts index fcac4f21..99acc90a 100644 --- a/examples/nffl-cli/typechain-types/factories/SFFLRegistryRollup__factory.ts +++ b/examples/nffl-cli/typechain-types/factories/SFFLRegistryRollup__factory.ts @@ -424,6 +424,19 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "function", + name: "setAggregator", + inputs: [ + { + name: "_aggregator", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "setInitialOperatorSet", @@ -933,7 +946,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6143c280620000f46000396000f3fe608060405234801561001057600080fd5b50600436106101845760003560e01c8063715018a6116100d9578063d5d4bb5a11610087578063d5d4bb5a1461036c578063dd64766e1461037f578063e0f5d9f014610392578063ef024458146103bd578063f2fde38b146103c4578063f4db0571146103d7578063fabc1cbc146103df57600080fd5b8063715018a6146102f457806382616b7b146102fc578063886f11951461030f5780638da5cb5b1461032257806390540c3714610333578063b128aeee14610346578063b3a9e53b1461035957600080fd5b80632db52ea5116101365780632db52ea5146102425780632f65284e146102555780634afa71b914610276578063595c6a671461028e5780635ac86ab7146102965780635c975abb146102c95780636f5b9918146102d157600080fd5b80630510c1911461018957806306aba0e1146101a857806310d67a2f146101cd578063136439dd146101e25780631df9e1d2146101f55780631fb4d41114610208578063245a7bfc1461021b575b600080fd5b610191600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b03909116815260200161019f565b6101e06101db366004613746565b6103f2565b005b6101e06101f0366004613763565b6104ae565b6101e0610203366004613794565b6105db565b6101e06102163660046137ec565b6106cc565b60ce5461023590600160401b90046001600160a01b031681565b60405161019f919061383a565b6101e0610250366004613865565b610755565b610268610263366004613892565b610768565b60405190815260200161019f565b60cd54600160801b90046001600160801b03166101b5565b6101e0610887565b6102b96102a4366004613935565b606654600160ff9092169190911b9081161490565b604051901515815260200161019f565b606654610268565b6102d9610941565b6040805182518152602092830151928101929092520161019f565b6101e0610964565b6101e061030a366004613958565b610978565b606554610235906001600160a01b031681565b6033546001600160a01b0316610235565b6101e06103413660046139b1565b610a9d565b6101e0610354366004613aff565b610bed565b610268610367366004613bd3565b610cd1565b61026861037a366004613c06565b610d02565b6101b561038d366004613763565b610e5b565b60ce546103a5906001600160401b031681565b6040516001600160401b03909116815260200161019f565b60646101b5565b6101e06103d2366004613746565b610e78565b610191600081565b6101e06103ed366004613763565b610eee565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104699190613c4a565b6001600160a01b0316336001600160a01b0316146104a25760405162461bcd60e51b815260040161049990613c67565b60405180910390fd5b6104ab81611045565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906104de90339060040161383a565b602060405180830381865afa1580156104fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f9190613cb1565b61053b5760405162461bcd60e51b815260040161049990613cd3565b606654818116146105af5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610499565b6066819055604051818152339060008051602061434d833981519152906020015b60405180910390a250565b6105e361113c565b60ce546001600160401b03166105fc6020830183613d1b565b6001600160401b0316146106225760405162461bcd60e51b815260040161049990613d36565b61062f6020820182613d1b565b61063a906001613d76565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104ab61066b6040830183613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b7576106a860608302860136819003810190613df0565b8152602001906001019061068b565b505050505060ca61119690919063ffffffff16565b606654600190600290811614156106f55760405162461bcd60e51b815260040161049990613e0c565b61070a6107018461139f565b60ca9084611420565b6107265760405162461bcd60e51b815260040161049990613e3f565b6107506107366020850185613e67565b6107466040860160208701613d1b565b8560a0013561180a565b505050565b61075d61113c565b6104ab60ca82611870565b60006060850135158015906107805750608085013515155b6107c75760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610499565b60006097816107d96020890189613e67565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906108089190613d1b565b6001600160401b0316815260208101919091526040016000205490508061087357826108685760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610499565b610873868585611929565b61087d8686610d02565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906108b790339060040161383a565b602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190613cb1565b6109145760405162461bcd60e51b815260040161049990613cd3565b6000196066819055604051908152339060008051602061434d8339815191529060200160405180910390a2565b61094961361d565b506040805180820190915260cb54815260cc54602082015290565b61096c61113c565b610976600061193a565b565b606654600090600190811614156109a15760405162461bcd60e51b815260040161049990613e0c565b60ce546001600160401b03166109ba6020850185613d1b565b6001600160401b0316146109e05760405162461bcd60e51b815260040161049990613d36565b6109ec6107018461198c565b610a085760405162461bcd60e51b815260040161049990613e3f565b610a156020840184613d1b565b610a20906001613d76565b60ce805467ffffffffffffffff19166001600160401b0392909216919091179055610750610a516040850185613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b757610a8e60608302860136819003810190613df0565b81526020019060010190610a71565b600054610100900460ff1615808015610abd5750600054600160ff909116105b80610ad75750303b158015610ad7575060005460ff166001145b610b3a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610499565b6000805460ff191660011790558015610b5d576000805461ff0019166101001790555b610b688260006119c0565b610b718461193a565b610b7c60ca86611870565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610be6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610c495760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b6044820152606401610499565b60cd546001600160801b031615610ca25760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a65646044820152606401610499565b610cad60ca83611196565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d156020870187613e67565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610d449190613d1b565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610db45760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610499565b610e53610dc46020850185613746565b602085013583610dd76040880188613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e19925050506060890189613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a9892505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610cfc565b610e8061113c565b6001600160a01b038116610ee55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610499565b6104ab8161193a565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f659190613c4a565b6001600160a01b0316336001600160a01b031614610f955760405162461bcd60e51b815260040161049990613c67565b60665419811960665419161461100e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610499565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016105d0565b6001600160a01b0381166110d35760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610499565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b61119e613637565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b8451811015611364578481815181106111e5576111e5613ec8565b6020026020010151935060006112108560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b03908116911681141561127c5760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b6044820152606401610499565b602086015161128b8286613ede565b6112959190613f06565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b0392831617905590945081166112e05785516112d9908690611bd3565b945061130c565b60208601516001600160801b031661130c576113096113028760000151611c6a565b8690611bd3565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a25050808061135c90613f28565b9150506111ca565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016113d39190613f43565b60405160208183030381529060405280519060200120604051602001611403929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820181905260038501549091906001600160801b0316806114945760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a65646044820152606401610499565b60006114a08580613fad565b90506001600160401b038111156114b9576114b9613a0b565b6040519080825280602002602001820160405280156114e2578160200160208202803683370190505b50905060005b6114f28680613fad565b90508110156116cb576115456115088780613fad565b8381811061151857611518613ec8565b90506040020180360381019061152e9190613ff6565b805160009081526020918201519091526040902090565b82828151811061155757611557613ec8565b602090810291909101015280156115ee5781611574600183614012565b8151811061158457611584613ec8565b602002602001015160001c8282815181106115a1576115a1613ec8565b602002602001015160001c116115ee5760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b6044820152606401610499565b600088600001600084848151811061160857611608613ec8565b6020908102919091018101518252810191909152604001600020546001600160801b03169050806116765760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b6044820152606401610499565b6116a96116838880613fad565b8481811061169357611693613ec8565b9050604002018036038101906113029190613ff6565b94506116b58185614012565b93505080806116c390613f28565b9150506114e8565b506116f96116d884611c6a565b6040805180820190915260018a0154815260028a0154602082015290611bd3565b925060008061172c8886611715368b90038b0160208c01614098565b611727368c90038c0160a08d01613ff6565b611cf9565b915091508161177d5760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c656400006044820152606401610499565b806117c15760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b6044820152606401610499565b60038901546064906117e5906001600160801b03600160801b8204811691166140d7565b6117ef919061411c565b6001600160801b0316841015955050505050505b9392505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b03821611156118dc5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b6064820152608401610499565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b8161193484826106cc565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f826040516020016113d39190614142565b6065546001600160a01b03161580156119e157506001600160a01b03821615155b611a635760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610499565b6066819055604051818152339060008051602061434d8339815191529060200160405180910390a2611a9482611045565b5050565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611ad8906034016040516020818303038152906040528688611e58565b9150915081611b225760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610499565b6000611b2d82611e81565b9050600080611b628a604051602001611b4891815260200190565b604051602081830303815290604052888560400151611e58565b9150915081611bb35760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610499565b611bc4611bbf82611f45565b611f58565b9b9a5050505050505050505050565b611bdb61361d565b611be3613657565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611c2257611c24565bfe5b5080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610499565b505092915050565b611c7261361d565b8151158015611c8357506020820151155b15611ca1575050604080518082019091526000808252602082015290565b60405180604001604052808360000151815260200160008051602061436d8339815191528460200151611cd4919061421a565b611cec9060008051602061436d833981519152614012565b905292915050565b919050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611d4157611d41613ec8565b60200201518951600160200201518a60200151600060028110611d6657611d66613ec8565b60200201518b60200151600160028110611d8257611d82613ec8565b602090810291909101518c518d830151604051611ddf9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611e02919061421a565b9050611e4a611e146113028884611f87565b611e1c612003565b611e40611e3185611e2b6120c3565b90611f87565b611e3a8c6120e4565b90611bd3565b886201d4c0612168565b909890975095505050505050565b600060606000611e678661238c565b9050611e748186866123be565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611eae83612499565b90506040518060800160405280611ede83600081518110611ed157611ed1613ec8565b60200260200101516124ac565b8152602001611ef983600181518110611ed157611ed1613ec8565b8152602001611f2183600281518110611f1457611f14613ec8565b60200260200101516124b3565b8152602001611f3c83600381518110611f1457611f14613ec8565b90529392505050565b6060610cfc611f5383612555565b612582565b6000806000602084511115611f6e576020611f71565b83515b60209485015194036008029390931c9392505050565b611f8f61361d565b611f97613675565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611c22575080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610499565b61200b613693565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6120cb61361d565b5060408051808201909152600181526002602082015290565b6120ec61361d565b6000808061210860008051602061436d8339815191528661421a565b90505b6121148161260d565b909350915060008051602061436d83398151915282830983141561214e576040805180820190915290815260208101919091529392505050565b60008051602061436d83398151915260018208905061210b565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061219a6136b8565b60005b600281101561235f5760006121b382600661422e565b90508482600281106121c7576121c7613ec8565b602002015151836121d983600061424d565b600c81106121e9576121e9613ec8565b602002015284826002811061220057612200613ec8565b60200201516020015183826001612217919061424d565b600c811061222757612227613ec8565b602002015283826002811061223e5761223e613ec8565b602002015151518361225183600261424d565b600c811061226157612261613ec8565b602002015283826002811061227857612278613ec8565b602002015151600160200201518361229183600361424d565b600c81106122a1576122a1613ec8565b60200201528382600281106122b8576122b8613ec8565b6020020151602001516000600281106122d3576122d3613ec8565b6020020151836122e483600461424d565b600c81106122f4576122f4613ec8565b602002015283826002811061230b5761230b613ec8565b60200201516020015160016002811061232657612326613ec8565b60200201518361233783600561424d565b600c811061234757612347613ec8565b6020020152508061235781613f28565b91505061219d565b506123686136d7565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606081805190602001206040516020016123a891815260200190565b6040516020818303038152906040529050919050565b6000606060006123cd8561268f565b905060008060006123df848a89612789565b815192955090935091501580806123f35750815b61243f5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610499565b60008161245b5760405180602001604052806000815250612487565b6124878661246a600188614012565b8151811061247a5761247a613ec8565b6020026020010151612bad565b919b919a509098505050505050505050565b6060610cfc6124a783612555565b612bd7565b6000610cfc825b60006021826000015111156124da5760405162461bcd60e51b815260040161049990614265565b60008060006124e885612dbd565b9194509250905060008160018111156125035761250361429c565b146125205760405162461bcd60e51b815260040161049990614265565b6000838660200151612532919061424d565b8051909150602084101561087d5760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060600080600061259285612dbd565b9194509250905060008160018111156125ad576125ad61429c565b146125f55760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610499565b612604856020015184846130f3565b95945050505050565b6000808060008051602061436d833981519152600360008051602061436d8339815191528660008051602061436d833981519152888909090890506000612683827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5260008051602061436d8339815191526131d1565b91959194509092505050565b6060600061269c83612499565b9050600081516001600160401b038111156126b9576126b9613a0b565b6040519080825280602002602001820160405280156126fe57816020015b60408051808201909152606080825260208201528152602001906001900390816126d75790505b50905060005b825181101561278157600061273184838151811061272457612724613ec8565b6020026020010151612582565b9050604051806040016040528082815260200161274d83612499565b81525083838151811061276257612762613ec8565b602002602001018190525050808061277990613f28565b915050612704565b509392505050565b6000606081808061279987613279565b905060008690506000806127c0604051806040016040528060608152602001606081525090565b60005b8c51811015612b85578c81815181106127de576127de613ec8565b6020026020010151915082846127f4919061424d565b935061280160018861424d565b965083612859578151805160209091012085146128545760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610499565b612916565b8151516020116128bb578151805160209091012085146128545760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610499565b846128c983600001516133b3565b146129165760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610499565b6129226010600161424d565b826020015151141561299b57855184141561293c57612b85565b600086858151811061295057612950613ec8565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061297b5761297b613ec8565b6020026020010151905061298e816133db565b9650600194505050612b73565b60028260200151511415612b2b5760006129b483613411565b90506000816000815181106129cb576129cb613ec8565b016020015160f81c905060006129e26002836142b2565b6129ed9060026142d4565b905060006129fe848360ff16613435565b90506000612a0c8b8a613435565b90506000612a1a838361346b565b905060ff851660021480612a31575060ff85166003145b15612a6b57808351148015612a465750808251145b15612a5857612a55818b61424d565b99505b50600160ff1b9950612b85945050505050565b60ff85161580612a7e575060ff85166001145b15612ad45782518114612a9e5750600160ff1b9950612b85945050505050565b612ac58860200151600181518110612ab857612ab8613ec8565b60200260200101516133db565b9a509750612b73945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610499565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610499565b80612b7d81613f28565b9150506127c3565b50600160ff1b841486612b988786613435565b909e909d50909b509950505050505050505050565b60208101518051606091610cfc91612bc790600190614012565b8151811061272457612724613ec8565b6060600080612be584612dbd565b91935090915060019050816001811115612c0157612c0161429c565b14612c485760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610499565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612c615790505090506000835b8651811015612db25760208210612cfa5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610499565b600080612d376040518060400160405280858c60000151612d1b9190614012565b8152602001858c60200151612d30919061424d565b9052612dbd565b509150915060405180604001604052808383612d53919061424d565b8152602001848b60200151612d68919061424d565b815250858581518110612d7d57612d7d613ec8565b6020908102919091010152612d9360018561424d565b9350612d9f818361424d565b612da9908461424d565b92505050612c8e565b508152949350505050565b600080600080846000015111612e105760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610499565b6020840151805160001a607f8111612e355760006001600094509450945050506130ec565b60b78111612ead576000612e4a608083614012565b905080876000015111612e9b5760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610499565b600195509350600092506130ec915050565b60bf8111612f97576000612ec260b783614012565b905080876000015111612f175760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610499565b600183015160208290036101000a9004612f31818361424d565b885111612f7b5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610499565b612f8682600161424d565b96509450600093506130ec92505050565b60f7811161300c576000612fac60c083614012565b905080876000015111612ffb5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610499565b6001955093508492506130ec915050565b600061301960f783614012565b90508087600001511161306e5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610499565b600183015160208290036101000a9004613088818361424d565b8851116130d05760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610499565b6130db82600161424d565b96509450600193506130ec92505050565b9193909250565b60606000826001600160401b0381111561310f5761310f613a0b565b6040519080825280601f01601f191660200182016040528015613139576020820181803683370190505b50905080516000141561314d579050611803565b6000613159858761424d565b90506020820160005b61316d6020876142f7565b8110156131a4578251825261318360208461424d565b925061319060208361424d565b91508061319c81613f28565b915050613162565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6000806131dc6136d7565b6131e46136f5565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611c2257508261326e5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610499565b505195945050505050565b606060008251600261328b919061422e565b6001600160401b038111156132a2576132a2613a0b565b6040519080825280601f01601f1916602001820160405280156132cc576020820181803683370190505b50905060005b83518110156133ac5760048482815181106132ef576132ef613ec8565b01602001516001600160f81b031916901c8261330c83600261422e565b8151811061331c5761331c613ec8565b60200101906001600160f81b031916908160001a905350601084828151811061334757613347613ec8565b0160200151613359919060f81c6142b2565b60f81b8261336883600261422e565b61337390600161424d565b8151811061338357613383613ec8565b60200101906001600160f81b031916908160001a905350806133a481613f28565b9150506132d2565b5092915050565b60006020825110156133c757506020015190565b81806020019051810190610cfc919061430b565b600060606020836000015110156133fc576133f5836134e7565b9050613408565b61340583612582565b90505b611803816133b3565b6060610cfc613430836020015160008151811061272457612724613ec8565b613279565b6060825182106134545750604080516020810190915260008152610cfc565b61180383838486516134669190614012565b6134f2565b6000805b80845111801561347f5750808351115b80156134d0575082818151811061349857613498613ec8565b602001015160f81c60f81b6001600160f81b0319168482815181106134bf576134bf613ec8565b01602001516001600160f81b031916145b1561180357806134df81613f28565b91505061346f565b6060610cfc82613607565b60608161350081601f61424d565b101561351e5760405162461bcd60e51b815260040161049990614324565b82613529838261424d565b10156135475760405162461bcd60e51b815260040161049990614324565b613551828461424d565b845110156135955760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610499565b6060821580156135b457604051915060008252602082016040526135fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156135ed5780518352602092830192016135d5565b5050858452601f01601f1916604052505b50949350505050565b6060610cfc8260200151600084600001516130f3565b604051806040016040528060008152602001600081525090565b604051806040016040528061364a61361d565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806136a6613713565b81526020016136b3613713565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104ab57600080fd5b60006020828403121561375857600080fd5b813561180381613731565b60006020828403121561377557600080fd5b5035919050565b60006060828403121561378e57600080fd5b50919050565b6000602082840312156137a657600080fd5b81356001600160401b038111156137bc57600080fd5b610e538482850161377c565b600060c0828403121561378e57600080fd5b600060e0828403121561378e57600080fd5b60008060e083850312156137ff57600080fd5b61380984846137c8565b915060c08301356001600160401b0381111561382457600080fd5b613830858286016137da565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611cf457600080fd5b60006020828403121561387757600080fd5b6118038261384e565b60006080828403121561378e57600080fd5b60008060008061010085870312156138a957600080fd5b6138b386866137c8565b935060c08501356001600160401b03808211156138cf57600080fd5b6138db88838901613880565b945060e08701359150808211156138f157600080fd5b818701915087601f83011261390557600080fd5b81358181111561391457600080fd5b88602082850101111561392657600080fd5b95989497505060200194505050565b60006020828403121561394757600080fd5b813560ff8116811461180357600080fd5b6000806040838503121561396b57600080fd5b82356001600160401b038082111561398257600080fd5b61398e8683870161377c565b935060208501359150808211156139a457600080fd5b50613830858286016137da565b600080600080608085870312156139c757600080fd5b6139d08561384e565b935060208501356139e081613731565b925060408501356139f081613731565b91506060850135613a0081613731565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a4357613a43613a0b565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613a7157613a71613a0b565b604052919050565b600060408284031215613a8b57600080fd5b613a93613a21565b9050813581526020820135602082015292915050565b600060608284031215613abb57600080fd5b613ac3613a21565b9050613acf8383613a79565b8152613add6040830161384e565b602082015292915050565b80356001600160401b0381168114611cf457600080fd5b60008060408385031215613b1257600080fd5b82356001600160401b0380821115613b2957600080fd5b818501915085601f830112613b3d57600080fd5b8135602082821115613b5157613b51613a0b565b613b5f818360051b01613a49565b82815281810193506060928302850182019289841115613b7e57600080fd5b948201945b83861015613ba457613b958a87613aa9565b85529485019493820193613b83565b509550613bb2878201613ae8565b9450505050509250929050565b803563ffffffff81168114611cf457600080fd5b60008060408385031215613be657600080fd5b613bef83613bbf565b9150613bfd60208401613ae8565b90509250929050565b60008060e08385031215613c1957600080fd5b613c2384846137c8565b915060c08301356001600160401b03811115613c3e57600080fd5b61383085828601613880565b600060208284031215613c5c57600080fd5b815161180381613731565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613cc357600080fd5b8151801515811461180357600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613d2d57600080fd5b61180382613ae8565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613d9857613d98613d60565b01949350505050565b6000808335601e19843603018112613db857600080fd5b8301803591506001600160401b03821115613dd257600080fd5b6020019150606081023603821315613de957600080fd5b9250929050565b600060608284031215613e0257600080fd5b6118038383613aa9565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613e7957600080fd5b61180382613bbf565b6000808335601e19843603018112613e9957600080fd5b8301803591506001600160401b03821115613eb357600080fd5b602001915036819003821315613de957600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613efe57613efe613d60565b039392505050565b60006001600160801b03828116848216808303821115613d9857613d98613d60565b6000600019821415613f3c57613f3c613d60565b5060010190565b60c0810163ffffffff613f5584613bbf565b168252613f6460208401613ae8565b6001600160401b03808216602085015280613f8160408701613ae8565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e19843603018112613fc457600080fd5b8301803591506001600160401b03821115613fde57600080fd5b6020019150600681901b3603821315613de957600080fd5b60006040828403121561400857600080fd5b6118038383613a79565b60008282101561402457614024613d60565b500390565b600082601f83011261403a57600080fd5b604051604081018181106001600160401b038211171561405c5761405c613a0b565b806040525080604084018581111561407357600080fd5b845b8181101561408d578035835260209283019201614075565b509195945050505050565b6000608082840312156140aa57600080fd5b6140b2613a21565b6140bc8484614029565b81526140cb8460408501614029565b60208201529392505050565b60006001600160801b03828116848216811515828404821116156140fd576140fd613d60565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061413657614136614106565b92169190910492915050565b60006020808352608083016001600160401b038061415f87613ae8565b168386015261416f838701613ae8565b604082821681880152808801359150601e1988360301821261419057600080fd5b908701908135838111156141a357600080fd5b6060935083810236038913156141b857600080fd5b87840184905293849052908401926000919060a088015b8184101561420d578535815286860135878201526001600160801b036141f684880161384e565b1681840152948401946001939093019284016141cf565b9998505050505050505050565b60008261422957614229614106565b500690565b600081600019048311821515161561424857614248613d60565b500290565b6000821982111561426057614260613d60565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff8316806142c5576142c5614106565b8060ff84160691505092915050565b600060ff821660ff8416808210156142ee576142ee613d60565b90039392505050565b60008261430657614306614106565b500490565b60006020828403121561431d57600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212208d5a00bdfaa5c82d49e9710d06eeebb3a877dc10568c3e210691372ed37183ab64736f6c634300080c0033"; + "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61441480620000f46000396000f3fe608060405234801561001057600080fd5b506004361061018f5760003560e01c8063715018a6116100e4578063d5d4bb5a11610092578063d5d4bb5a14610377578063dd64766e1461038a578063e0f5d9f01461039d578063ef024458146103c8578063f2fde38b146103cf578063f4db0571146103e2578063f9120af6146103ea578063fabc1cbc146103fd57600080fd5b8063715018a6146102ff57806382616b7b14610307578063886f11951461031a5780638da5cb5b1461032d57806390540c371461033e578063b128aeee14610351578063b3a9e53b1461036457600080fd5b80632db52ea5116101415780632db52ea51461024d5780632f65284e146102605780634afa71b914610281578063595c6a67146102995780635ac86ab7146102a15780635c975abb146102d45780636f5b9918146102dc57600080fd5b80630510c1911461019457806306aba0e1146101b357806310d67a2f146101d8578063136439dd146101ed5780631df9e1d2146102005780631fb4d41114610213578063245a7bfc14610226575b600080fd5b61019c600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b0390911681526020016101aa565b6101eb6101e6366004613798565b610410565b005b6101eb6101fb3660046137b5565b6104cc565b6101eb61020e3660046137e6565b6105f9565b6101eb61022136600461383e565b6106ea565b60ce5461024090600160401b90046001600160a01b031681565b6040516101aa919061388c565b6101eb61025b3660046138b7565b610773565b61027361026e3660046138e4565b610786565b6040519081526020016101aa565b60cd54600160801b90046001600160801b03166101c0565b6101eb6108a5565b6102c46102af366004613987565b606654600160ff9092169190911b9081161490565b60405190151581526020016101aa565b606654610273565b6102e461095f565b604080518251815260209283015192810192909252016101aa565b6101eb610982565b6101eb6103153660046139aa565b610996565b606554610240906001600160a01b031681565b6033546001600160a01b0316610240565b6101eb61034c366004613a03565b610abb565b6101eb61035f366004613b51565b610c0b565b610273610372366004613c25565b610cef565b610273610385366004613c58565b610d20565b6101c06103983660046137b5565b610e79565b60ce546103b0906001600160401b031681565b6040516001600160401b0390911681526020016101aa565b60646101c0565b6101eb6103dd366004613798565b610e96565b61019c600081565b6101eb6103f8366004613798565b610f0c565b6101eb61040b3660046137b5565b610f40565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104879190613c9c565b6001600160a01b0316336001600160a01b0316146104c05760405162461bcd60e51b81526004016104b790613cb9565b60405180910390fd5b6104c981611097565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906104fc90339060040161388c565b602060405180830381865afa158015610519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053d9190613d03565b6105595760405162461bcd60e51b81526004016104b790613d25565b606654818116146105cd5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b60648201526084016104b7565b6066819055604051818152339060008051602061439f833981519152906020015b60405180910390a250565b61060161118e565b60ce546001600160401b031661061a6020830183613d6d565b6001600160401b0316146106405760405162461bcd60e51b81526004016104b790613d88565b61064d6020820182613d6d565b610658906001613dc8565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104c96106896040830183613df3565b808060200260200160405190810160405280939291908181526020016000905b828210156106d5576106c660608302860136819003810190613e42565b815260200190600101906106a9565b505050505060ca6111e890919063ffffffff16565b606654600190600290811614156107135760405162461bcd60e51b81526004016104b790613e5e565b61072861071f846113f1565b60ca9084611472565b6107445760405162461bcd60e51b81526004016104b790613e91565b61076e6107546020850185613eb9565b6107646040860160208701613d6d565b8560a0013561185c565b505050565b61077b61118e565b6104c960ca826118c2565b600060608501351580159061079e5750608085013515155b6107e55760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b60448201526064016104b7565b60006097816107f76020890189613eb9565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906108269190613d6d565b6001600160401b0316815260208101919091526040016000205490508061089157826108865760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b60448201526064016104b7565b61089186858561197b565b61089b8686610d20565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906108d590339060040161388c565b602060405180830381865afa1580156108f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109169190613d03565b6109325760405162461bcd60e51b81526004016104b790613d25565b6000196066819055604051908152339060008051602061439f8339815191529060200160405180910390a2565b61096761366f565b506040805180820190915260cb54815260cc54602082015290565b61098a61118e565b610994600061198c565b565b606654600090600190811614156109bf5760405162461bcd60e51b81526004016104b790613e5e565b60ce546001600160401b03166109d86020850185613d6d565b6001600160401b0316146109fe5760405162461bcd60e51b81526004016104b790613d88565b610a0a61071f846119de565b610a265760405162461bcd60e51b81526004016104b790613e91565b610a336020840184613d6d565b610a3e906001613dc8565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905561076e610a6f6040850185613df3565b808060200260200160405190810160405280939291908181526020016000905b828210156106d557610aac60608302860136819003810190613e42565b81526020019060010190610a8f565b600054610100900460ff1615808015610adb5750600054600160ff909116105b80610af55750303b158015610af5575060005460ff166001145b610b585760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104b7565b6000805460ff191660011790558015610b7b576000805461ff0019166101001790555b610b86826000611a12565b610b8f8461198c565b610b9a60ca866118c2565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610c04576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610c675760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b60448201526064016104b7565b60cd546001600160801b031615610cc05760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a656460448201526064016104b7565b610ccb60ca836111e8565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d336020870187613eb9565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610d629190613d6d565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610dd25760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b60448201526064016104b7565b610e71610de26020850185613798565b602085013583610df56040880188613ed4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e37925050506060890189613ed4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aea92505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610d1a565b610e9e61118e565b6001600160a01b038116610f035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b7565b6104c98161198c565b610f1461118e565b60ce80546001600160a01b03909216600160401b02600160401b600160e01b0319909216919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb79190613c9c565b6001600160a01b0316336001600160a01b031614610fe75760405162461bcd60e51b81526004016104b790613cb9565b6066541981196066541916146110605760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b60648201526084016104b7565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016105ee565b6001600160a01b0381166111255760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016104b7565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b7565b6111f0613689565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b84518110156113b65784818151811061123757611237613f1a565b6020026020010151935060006112628560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b0390811691168114156112ce5760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b60448201526064016104b7565b60208601516112dd8286613f30565b6112e79190613f58565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b03928316179055909450811661133257855161132b908690611c25565b945061135e565b60208601516001600160801b031661135e5761135b6113548760000151611cbc565b8690611c25565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a2505080806113ae90613f7a565b91505061121c565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016114259190613f95565b60405160208183030381529060405280519060200120604051602001611455929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820181905260038501549091906001600160801b0316806114e65760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a656460448201526064016104b7565b60006114f28580613fff565b90506001600160401b0381111561150b5761150b613a5d565b604051908082528060200260200182016040528015611534578160200160208202803683370190505b50905060005b6115448680613fff565b905081101561171d5761159761155a8780613fff565b8381811061156a5761156a613f1a565b9050604002018036038101906115809190614048565b805160009081526020918201519091526040902090565b8282815181106115a9576115a9613f1a565b6020908102919091010152801561164057816115c6600183614064565b815181106115d6576115d6613f1a565b602002602001015160001c8282815181106115f3576115f3613f1a565b602002602001015160001c116116405760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b60448201526064016104b7565b600088600001600084848151811061165a5761165a613f1a565b6020908102919091018101518252810191909152604001600020546001600160801b03169050806116c85760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b60448201526064016104b7565b6116fb6116d58880613fff565b848181106116e5576116e5613f1a565b9050604002018036038101906113549190614048565b94506117078185614064565b935050808061171590613f7a565b91505061153a565b5061174b61172a84611cbc565b6040805180820190915260018a0154815260028a0154602082015290611c25565b925060008061177e8886611767368b90038b0160208c016140ea565b611779368c90038c0160a08d01614048565b611d4b565b91509150816117cf5760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c6564000060448201526064016104b7565b806118135760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b60448201526064016104b7565b6003890154606490611837906001600160801b03600160801b820481169116614129565b611841919061416e565b6001600160801b0316841015955050505050505b9392505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b038216111561192e5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b60648201526084016104b7565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b8161198684826106ea565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f826040516020016114259190614194565b6065546001600160a01b0316158015611a3357506001600160a01b03821615155b611ab55760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016104b7565b6066819055604051818152339060008051602061439f8339815191529060200160405180910390a2611ae682611097565b5050565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611b2a906034016040516020818303038152906040528688611eaa565b9150915081611b745760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016104b7565b6000611b7f82611ed3565b9050600080611bb48a604051602001611b9a91815260200190565b604051602081830303815290604052888560400151611eaa565b9150915081611c055760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f742065786973740000000060448201526064016104b7565b611c16611c1182611f97565b611faa565b9b9a5050505050505050505050565b611c2d61366f565b611c356136a9565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611c7457611c76565bfe5b5080611cb45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104b7565b505092915050565b611cc461366f565b8151158015611cd557506020820151155b15611cf3575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206143bf8339815191528460200151611d26919061426c565b611d3e906000805160206143bf833981519152614064565b905292915050565b919050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611d9357611d93613f1a565b60200201518951600160200201518a60200151600060028110611db857611db8613f1a565b60200201518b60200151600160028110611dd457611dd4613f1a565b602090810291909101518c518d830151604051611e319a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611e54919061426c565b9050611e9c611e666113548884611fd9565b611e6e612055565b611e92611e8385611e7d612115565b90611fd9565b611e8c8c612136565b90611c25565b886201d4c06121ba565b909890975095505050505050565b600060606000611eb9866123de565b9050611ec6818686612410565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611f00836124eb565b90506040518060800160405280611f3083600081518110611f2357611f23613f1a565b60200260200101516124fe565b8152602001611f4b83600181518110611f2357611f23613f1a565b8152602001611f7383600281518110611f6657611f66613f1a565b6020026020010151612505565b8152602001611f8e83600381518110611f6657611f66613f1a565b90529392505050565b6060610d1a611fa5836125a7565b6125d4565b6000806000602084511115611fc0576020611fc3565b83515b60209485015194036008029390931c9392505050565b611fe161366f565b611fe96136c7565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611c74575080611cb45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104b7565b61205d6136e5565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b61211d61366f565b5060408051808201909152600181526002602082015290565b61213e61366f565b6000808061215a6000805160206143bf8339815191528661426c565b90505b6121668161265f565b90935091506000805160206143bf8339815191528283098314156121a0576040805180820190915290815260208101919091529392505050565b6000805160206143bf83398151915260018208905061215d565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906121ec61370a565b60005b60028110156123b1576000612205826006614280565b905084826002811061221957612219613f1a565b6020020151518361222b83600061429f565b600c811061223b5761223b613f1a565b602002015284826002811061225257612252613f1a565b60200201516020015183826001612269919061429f565b600c811061227957612279613f1a565b602002015283826002811061229057612290613f1a565b60200201515151836122a383600261429f565b600c81106122b3576122b3613f1a565b60200201528382600281106122ca576122ca613f1a565b60200201515160016020020151836122e383600361429f565b600c81106122f3576122f3613f1a565b602002015283826002811061230a5761230a613f1a565b60200201516020015160006002811061232557612325613f1a565b60200201518361233683600461429f565b600c811061234657612346613f1a565b602002015283826002811061235d5761235d613f1a565b60200201516020015160016002811061237857612378613f1a565b60200201518361238983600561429f565b600c811061239957612399613f1a565b602002015250806123a981613f7a565b9150506121ef565b506123ba613729565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606081805190602001206040516020016123fa91815260200190565b6040516020818303038152906040529050919050565b60006060600061241f856126e1565b90506000806000612431848a896127db565b815192955090935091501580806124455750815b6124915760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e00000000000060448201526064016104b7565b6000816124ad57604051806020016040528060008152506124d9565b6124d9866124bc600188614064565b815181106124cc576124cc613f1a565b6020026020010151612bff565b919b919a509098505050505050505050565b6060610d1a6124f9836125a7565b612c29565b6000610d1a825b600060218260000151111561252c5760405162461bcd60e51b81526004016104b7906142b7565b600080600061253a85612e0f565b919450925090506000816001811115612555576125556142ee565b146125725760405162461bcd60e51b81526004016104b7906142b7565b6000838660200151612584919061429f565b8051909150602084101561089b5760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b606060008060006125e485612e0f565b9194509250905060008160018111156125ff576125ff6142ee565b146126475760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b60448201526064016104b7565b61265685602001518484613145565b95945050505050565b600080806000805160206143bf83398151915260036000805160206143bf833981519152866000805160206143bf8339815191528889090908905060006126d5827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f526000805160206143bf833981519152613223565b91959194509092505050565b606060006126ee836124eb565b9050600081516001600160401b0381111561270b5761270b613a5d565b60405190808252806020026020018201604052801561275057816020015b60408051808201909152606080825260208201528152602001906001900390816127295790505b50905060005b82518110156127d357600061278384838151811061277657612776613f1a565b60200260200101516125d4565b9050604051806040016040528082815260200161279f836124eb565b8152508383815181106127b4576127b4613f1a565b60200260200101819052505080806127cb90613f7a565b915050612756565b509392505050565b600060608180806127eb876132cb565b90506000869050600080612812604051806040016040528060608152602001606081525090565b60005b8c51811015612bd7578c818151811061283057612830613f1a565b602002602001015191508284612846919061429f565b935061285360018861429f565b9650836128ab578151805160209091012085146128a65760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b60448201526064016104b7565b612968565b81515160201161290d578151805160209091012085146128a65760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c2068617368000000000060448201526064016104b7565b8461291b8360000151613405565b146129685760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f6465206861736800000000000060448201526064016104b7565b6129746010600161429f565b82602001515114156129ed57855184141561298e57612bd7565b60008685815181106129a2576129a2613f1a565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106129cd576129cd613f1a565b602002602001015190506129e08161342d565b9650600194505050612bc5565b60028260200151511415612b7d576000612a0683613463565b9050600081600081518110612a1d57612a1d613f1a565b016020015160f81c90506000612a34600283614304565b612a3f906002614326565b90506000612a50848360ff16613487565b90506000612a5e8b8a613487565b90506000612a6c83836134bd565b905060ff851660021480612a83575060ff85166003145b15612abd57808351148015612a985750808251145b15612aaa57612aa7818b61429f565b99505b50600160ff1b9950612bd7945050505050565b60ff85161580612ad0575060ff85166001145b15612b265782518114612af05750600160ff1b9950612bd7945050505050565b612b178860200151600181518110612b0a57612b0a613f1a565b602002602001015161342d565b9a509750612bc5945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b60648201526084016104b7565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e00000060448201526064016104b7565b80612bcf81613f7a565b915050612815565b50600160ff1b841486612bea8786613487565b909e909d50909b509950505050505050505050565b60208101518051606091610d1a91612c1990600190614064565b8151811061277657612776613f1a565b6060600080612c3784612e0f565b91935090915060019050816001811115612c5357612c536142ee565b14612c9a5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b60448201526064016104b7565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612cb35790505090506000835b8651811015612e045760208210612d4c5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b60648201526084016104b7565b600080612d896040518060400160405280858c60000151612d6d9190614064565b8152602001858c60200151612d82919061429f565b9052612e0f565b509150915060405180604001604052808383612da5919061429f565b8152602001848b60200151612dba919061429f565b815250858581518110612dcf57612dcf613f1a565b6020908102919091010152612de560018561429f565b9350612df1818361429f565b612dfb908461429f565b92505050612ce0565b508152949350505050565b600080600080846000015111612e625760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b60448201526064016104b7565b6020840151805160001a607f8111612e8757600060016000945094509450505061313e565b60b78111612eff576000612e9c608083614064565b905080876000015111612eed5760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b60448201526064016104b7565b6001955093506000925061313e915050565b60bf8111612fe9576000612f1460b783614064565b905080876000015111612f695760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e0060448201526064016104b7565b600183015160208290036101000a9004612f83818361429f565b885111612fcd5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b60448201526064016104b7565b612fd882600161429f565b965094506000935061313e92505050565b60f7811161305e576000612ffe60c083614064565b90508087600001511161304d5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b60448201526064016104b7565b60019550935084925061313e915050565b600061306b60f783614064565b9050808760000151116130c05760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e00000060448201526064016104b7565b600183015160208290036101000a90046130da818361429f565b8851116131225760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b60448201526064016104b7565b61312d82600161429f565b965094506001935061313e92505050565b9193909250565b60606000826001600160401b0381111561316157613161613a5d565b6040519080825280601f01601f19166020018201604052801561318b576020820181803683370190505b50905080516000141561319f579050611855565b60006131ab858761429f565b90506020820160005b6131bf602087614349565b8110156131f657825182526131d560208461429f565b92506131e260208361429f565b9150806131ee81613f7a565b9150506131b4565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60008061322e613729565b613236613747565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611c745750826132c05760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016104b7565b505195945050505050565b60606000825160026132dd9190614280565b6001600160401b038111156132f4576132f4613a5d565b6040519080825280601f01601f19166020018201604052801561331e576020820181803683370190505b50905060005b83518110156133fe57600484828151811061334157613341613f1a565b01602001516001600160f81b031916901c8261335e836002614280565b8151811061336e5761336e613f1a565b60200101906001600160f81b031916908160001a905350601084828151811061339957613399613f1a565b01602001516133ab919060f81c614304565b60f81b826133ba836002614280565b6133c590600161429f565b815181106133d5576133d5613f1a565b60200101906001600160f81b031916908160001a905350806133f681613f7a565b915050613324565b5092915050565b600060208251101561341957506020015190565b81806020019051810190610d1a919061435d565b6000606060208360000151101561344e5761344783613539565b905061345a565b613457836125d4565b90505b61185581613405565b6060610d1a613482836020015160008151811061277657612776613f1a565b6132cb565b6060825182106134a65750604080516020810190915260008152610d1a565b61185583838486516134b89190614064565b613544565b6000805b8084511180156134d15750808351115b801561352257508281815181106134ea576134ea613f1a565b602001015160f81c60f81b6001600160f81b03191684828151811061351157613511613f1a565b01602001516001600160f81b031916145b15611855578061353181613f7a565b9150506134c1565b6060610d1a82613659565b60608161355281601f61429f565b10156135705760405162461bcd60e51b81526004016104b790614376565b8261357b838261429f565b10156135995760405162461bcd60e51b81526004016104b790614376565b6135a3828461429f565b845110156135e75760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016104b7565b6060821580156136065760405191506000825260208201604052613650565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561363f578051835260209283019201613627565b5050858452601f01601f1916604052505b50949350505050565b6060610d1a826020015160008460000151613145565b604051806040016040528060008152602001600081525090565b604051806040016040528061369c61366f565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806136f8613765565b8152602001613705613765565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104c957600080fd5b6000602082840312156137aa57600080fd5b813561185581613783565b6000602082840312156137c757600080fd5b5035919050565b6000606082840312156137e057600080fd5b50919050565b6000602082840312156137f857600080fd5b81356001600160401b0381111561380e57600080fd5b610e71848285016137ce565b600060c082840312156137e057600080fd5b600060e082840312156137e057600080fd5b60008060e0838503121561385157600080fd5b61385b848461381a565b915060c08301356001600160401b0381111561387657600080fd5b6138828582860161382c565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611d4657600080fd5b6000602082840312156138c957600080fd5b611855826138a0565b6000608082840312156137e057600080fd5b60008060008061010085870312156138fb57600080fd5b613905868661381a565b935060c08501356001600160401b038082111561392157600080fd5b61392d888389016138d2565b945060e087013591508082111561394357600080fd5b818701915087601f83011261395757600080fd5b81358181111561396657600080fd5b88602082850101111561397857600080fd5b95989497505060200194505050565b60006020828403121561399957600080fd5b813560ff8116811461185557600080fd5b600080604083850312156139bd57600080fd5b82356001600160401b03808211156139d457600080fd5b6139e0868387016137ce565b935060208501359150808211156139f657600080fd5b506138828582860161382c565b60008060008060808587031215613a1957600080fd5b613a22856138a0565b93506020850135613a3281613783565b92506040850135613a4281613783565b91506060850135613a5281613783565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a9557613a95613a5d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613ac357613ac3613a5d565b604052919050565b600060408284031215613add57600080fd5b613ae5613a73565b9050813581526020820135602082015292915050565b600060608284031215613b0d57600080fd5b613b15613a73565b9050613b218383613acb565b8152613b2f604083016138a0565b602082015292915050565b80356001600160401b0381168114611d4657600080fd5b60008060408385031215613b6457600080fd5b82356001600160401b0380821115613b7b57600080fd5b818501915085601f830112613b8f57600080fd5b8135602082821115613ba357613ba3613a5d565b613bb1818360051b01613a9b565b82815281810193506060928302850182019289841115613bd057600080fd5b948201945b83861015613bf657613be78a87613afb565b85529485019493820193613bd5565b509550613c04878201613b3a565b9450505050509250929050565b803563ffffffff81168114611d4657600080fd5b60008060408385031215613c3857600080fd5b613c4183613c11565b9150613c4f60208401613b3a565b90509250929050565b60008060e08385031215613c6b57600080fd5b613c75848461381a565b915060c08301356001600160401b03811115613c9057600080fd5b613882858286016138d2565b600060208284031215613cae57600080fd5b815161185581613783565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613d1557600080fd5b8151801515811461185557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613d7f57600080fd5b61185582613b3a565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613dea57613dea613db2565b01949350505050565b6000808335601e19843603018112613e0a57600080fd5b8301803591506001600160401b03821115613e2457600080fd5b6020019150606081023603821315613e3b57600080fd5b9250929050565b600060608284031215613e5457600080fd5b6118558383613afb565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613ecb57600080fd5b61185582613c11565b6000808335601e19843603018112613eeb57600080fd5b8301803591506001600160401b03821115613f0557600080fd5b602001915036819003821315613e3b57600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613f5057613f50613db2565b039392505050565b60006001600160801b03828116848216808303821115613dea57613dea613db2565b6000600019821415613f8e57613f8e613db2565b5060010190565b60c0810163ffffffff613fa784613c11565b168252613fb660208401613b3a565b6001600160401b03808216602085015280613fd360408701613b3a565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e1984360301811261401657600080fd5b8301803591506001600160401b0382111561403057600080fd5b6020019150600681901b3603821315613e3b57600080fd5b60006040828403121561405a57600080fd5b6118558383613acb565b60008282101561407657614076613db2565b500390565b600082601f83011261408c57600080fd5b604051604081018181106001600160401b03821117156140ae576140ae613a5d565b80604052508060408401858111156140c557600080fd5b845b818110156140df5780358352602092830192016140c7565b509195945050505050565b6000608082840312156140fc57600080fd5b614104613a73565b61410e848461407b565b815261411d846040850161407b565b60208201529392505050565b60006001600160801b038281168482168115158284048211161561414f5761414f613db2565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061418857614188614158565b92169190910492915050565b60006020808352608083016001600160401b03806141b187613b3a565b16838601526141c1838701613b3a565b604082821681880152808801359150601e198836030182126141e257600080fd5b908701908135838111156141f557600080fd5b60609350838102360389131561420a57600080fd5b87840184905293849052908401926000919060a088015b8184101561425f578535815286860135878201526001600160801b036142488488016138a0565b168184015294840194600193909301928401614221565b9998505050505050505050565b60008261427b5761427b614158565b500690565b600081600019048311821515161561429a5761429a613db2565b500290565b600082198211156142b2576142b2613db2565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff83168061431757614317614158565b8060ff84160691505092915050565b600060ff821660ff84168082101561434057614340613db2565b90039392505050565b60008261435857614358614158565b500490565b60006020828403121561436f57600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220fdfa99bdec7bb54cf2840cc043d0340ddf6031f4ac0ec2cdb06fff0ff26140c564736f6c634300080c0033"; type SFFLRegistryRollupConstructorParams = | [signer?: Signer]