From 3a021dad44a257aab15aaec69fedfb41f4fb0c98 Mon Sep 17 00:00:00 2001 From: Salman Pathan Date: Tue, 7 May 2024 15:05:22 +0530 Subject: [PATCH] Remove phase1Job details from signing rules contract (#628) * remove phase1jobdetails requirement * update tests and artifacts * clippy fix --- .../artifacts/VotableSigningRules.json | 2 +- .../contracts/examples/submit_proposal.rs | 20 +-- forge/src/SigningRules.sol | 131 +++++++++--------- forge/test/SigningRules.sol | 65 ++++----- node/src/command.rs | 1 + node/src/eth.rs | 1 + pallets/dkg/src/lib.rs | 2 +- pallets/dkg/src/weights.rs | 10 -- pallets/jobs/src/mock.rs | 4 +- pallets/jobs/src/tests.rs | 14 +- pallets/zksaas/src/lib.rs | 2 +- pallets/zksaas/src/weights.rs | 10 -- precompiles/vesting/src/mock.rs | 10 -- 13 files changed, 105 insertions(+), 167 deletions(-) diff --git a/examples/contracts/artifacts/VotableSigningRules.json b/examples/contracts/artifacts/VotableSigningRules.json index aa09815c4..576258364 100644 --- a/examples/contracts/artifacts/VotableSigningRules.json +++ b/examples/contracts/artifacts/VotableSigningRules.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"MAX_VOTERS","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"_proposals","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"_status","type":"uint8","internalType":"enum ProposalStatus"},{"name":"_yesVotes","type":"uint256","internalType":"uint256"},{"name":"_yesVotesTotal","type":"uint8","internalType":"uint8"},{"name":"_proposedBlock","type":"uint40","internalType":"uint40"}],"stateMutability":"view"},{"type":"function","name":"adminSetForwarder","inputs":[{"name":"proposalId","type":"bytes32","internalType":"bytes32"},{"name":"forwarder","type":"address","internalType":"address"},{"name":"valid","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"admins","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"calculatePhase1ProposalId","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"phase1JobDetails","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"calculatePhase2JobHash","inputs":[{"name":"proposalId","type":"bytes32","internalType":"bytes32"},{"name":"phase2JobDetails","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"expiry","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getProposalState","inputs":[{"name":"phase2JobHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"enum ProposalStatus"}],"stateMutability":"view"},{"type":"function","name":"getProposalYesVotes","inputs":[{"name":"phase2JobHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getProposalYesVotesTotal","inputs":[{"name":"phase2JobHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"phase1JobDetails","type":"bytes","internalType":"bytes"},{"name":"_threshold","type":"uint8","internalType":"uint8"},{"name":"_useDemocracy","type":"bool","internalType":"bool"},{"name":"_voters","type":"address[]","internalType":"address[]"},{"name":"_expiry","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialized","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isValidForwarder","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"refreshVoters","inputs":[{"name":"phase1ProposalId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitGovernanceProposal","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"phase1JobDetails","type":"bytes","internalType":"bytes"},{"name":"phase2JobDetails","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"threshold","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"useDemocracy","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"useValidators","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"voteProposal","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"phase1JobDetails","type":"bytes","internalType":"bytes"},{"name":"phase2JobDetails","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"voters","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"FailedHandlerExecution","inputs":[{"name":"lowLevelData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ProposalEvent","inputs":[{"name":"status","type":"uint8","indexed":false,"internalType":"enum ProposalStatus"},{"name":"proposalId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"phase2JobHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ProposalVote","inputs":[{"name":"status","type":"uint8","indexed":false,"internalType":"enum ProposalStatus"},{"name":"proposalId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"phase2JobHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false}],"bytecode":{"object":"0x6080604052348015600f57600080fd5b506116738061001f6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80639e344fc0116100ad578063cf108ab911610071578063cf108ab9146102f1578063d079661b14610314578063d2ec5fca14610355578063ef67b8ed14610396578063f2e2af94146103a957600080fd5b80639e344fc014610272578063a0a0c51614610285578063a72cd03014610298578063a9b62d8d146102ab578063bc20f44e146102ce57600080fd5b806322b87b97116100f457806322b87b97146101f557806325605b6d1461022057806328d7fb2b146102435780633ceed692146102565780636717a3601461025f57600080fd5b80630a704f48146101315780631001d8301461016a578063158ef93e1461018b5780631b35b0cc146101a85780631cba5b04146101e0575b600080fd5b61015461013f36600461102c565b60009081526007602052604090205460ff1690565b604051610161919061107d565b60405180910390f35b61017d61017836600461115c565b6103fb565b604051908152602001610161565b6008546101989060ff1681565b6040519015158152602001610161565b6101ce6101b636600461102c565b60009081526007602052604090206002015460ff1690565b60405160ff9091168152602001610161565b6101f36101ee36600461102c565b61042f565b005b6101986102033660046111c0565b600060208181529281526040808220909352908152205460ff1681565b6101ce61022e36600461102c565b60036020526000908152604090205460ff1681565b6101f36102513660046111fc565b610474565b61017d61010081565b6101f361026d36600461131b565b6105f7565b6101f361028036600461131b565b610736565b61017d61029336600461138e565b61079d565b6101f36102a63660046113be565b6107b2565b61017d6102b936600461102c565b60009081526007602052604090206001015490565b6101986102dc36600461102c565b60066020526000908152604090205460ff1681565b6101986102ff36600461102c565b60056020526000908152604090205460ff1681565b61033d61032236600461102c565b6001602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610161565b61037e61036336600461102c565b6004602052600090815260409020546001600160401b031681565b6040516001600160401b039091168152602001610161565b61033d6103a43660046113fa565b61081e565b6103eb6103b736600461102c565b60076020526000908152604090208054600182015460029092015460ff9182169291811690610100900464ffffffffff1684565b604051610161949392919061141c565b60008282604051602001610410929190611473565b6040516020818303038152906040528051906020012090505b92915050565b60008181526001602052604090205481906001600160a01b031633146104705760405162461bcd60e51b8152600401610467906114a8565b60405180910390fd5b5050565b610100825111156104b95760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e7920766f7465727360881b6044820152606401610467565b60085460ff16156105025760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610467565b6008805460ff191660011790556040516000906105259088908890602001611473565b60408051808303601f190181529181528151602092830120600081815260038452828120805460ff1990811660ff8c161790915560058552838220805490911689151517905560048452828120805467ffffffffffffffff19166001600160401b038816179055600190935291208054336001600160a01b03199091161790558351909150156105d457600081815260026020908152604090912084516105ce92860190610fb2565b506105ee565b6000818152600660205260409020805460ff191660011790555b50505050505050565b6000838360405160200161060c929190611473565b604051602081830303815290604052805190602001209050600081836040516020016106399291906114e9565b60408051601f1981840301815291905280516020909101209050600360008281526007602052604090205460ff16600481111561067857610678611045565b036106c55760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206d7573742068617665206265656e2065786563757465646044820152606401610467565b60008281526005602052604090205460ff1661072f5760405162461bcd60e51b8152602060048201526024808201527f50726f706f73616c206d75737420616c6c6f77207573696e6720676f7665726e604482015263616e636560e01b6064820152608401610467565b5050505050565b610741838383610856565b61078d5760405162461bcd60e51b815260206004820152601860248201527f50726f706f73616c206d75737420626520766f7461626c6500000000000000006044820152606401610467565b610798838383610904565b505050565b600082826040516020016104109291906114e9565b60008381526001602052604090205483906001600160a01b031633146107ea5760405162461bcd60e51b8152600401610467906114a8565b506000928352602083815260408085206001600160a01b039490941685529290529120805460ff1916911515919091179055565b6002602052816000526040600020818154811061083a57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600082516000036108a95760405162461bcd60e51b815260206004820152601d60248201527f4a6f622064657461696c73206d757374206265206e6f6e2d656d7074790000006044820152606401610467565b81516000036108fa5760405162461bcd60e51b815260206004820152601d60248201527f4a6f622064657461696c73206d757374206265206e6f6e2d656d7074790000006044820152606401610467565b5060019392505050565b60008383604051602001610919929190611473565b604051602081830303815290604052805190602001209050600081836040516020016109469291906114e9565b60408051601f1981840301815291815281516020928301206000818152600790935291209091506002815460ff16600481111561098557610985611045565b0361099e5761099683878487610d7b565b505050505050565b60006109a984610e97565b825490915060019060ff1660048111156109c5576109c5611045565b1115610a1f5760405162461bcd60e51b815260206004820152602360248201527f70726f706f73616c20616c72656164792065786563757465642f63616e63656c6044820152621b195960ea1b6064820152608401610467565b610a2a848483610edf565b15610a6f5760405162461bcd60e51b81526020600482015260156024820152741c995b185e595c88185b1c9958591e481d9bdd1959605a1b6044820152606401610467565b6000825460ff166004811115610a8757610a87611045565b03610b5d576040805160808101909152806001815260006020808301829052604080840183905264ffffffffff4316606090940193909352868252600790522081518154829060ff19166001836004811115610ae557610ae5611045565b021790555060208201516001808301919091556040808401516002909301805460609095015164ffffffffff166101000265ffffffffffff1990951660ff9094169390931793909317909155905160008051602061161e83398151915291610b50918790879061150f565b60405180910390a1610bd6565b60008481526004602052604090205460028301546001600160401b0390911690610b9390610100900464ffffffffff1643611544565b64ffffffffff161115610bd657815460ff19166004908117835560405160008051602061161e83398151915291610bcd918790879061150f565b60405180910390a15b6004825460ff166004811115610bee57610bee611045565b14610cd957610bfd8482610f09565b60018301805491909117905560028201805460ff16906000610c1e83611557565b91906101000a81548160ff021916908360ff160217905550507f961015e6a4653a891033ea3ea3ce41566aad79e0097ece8cb102ae7cd135ab868260000160009054906101000a900460ff168585604051610c7b9392919061150f565b60405180910390a1600084815260036020526040902054600283015460ff918216911610610cd957815460ff19166002908117835560405160008051602061161e83398151915291610cd0918790879061150f565b60405180910390a15b60008481526007602052604090208254815484929160ff1690829060ff19166001836004811115610d0c57610d0c611045565b02179055506001828101549082015560029182018054918301805460ff19811660ff9094169384178255915464ffffffffff61010091829004160265ffffffffffff19909216909217179055825460ff166004811115610d6e57610d6e611045565b036105ee576105ee848885885b60008481526007602052604090206002815460ff166004811115610da157610da1611045565b14610dee5760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206d757374206861766520506173736564207374617475736044820152606401610467565b60408051602081018252600081529051631075334160e01b815261081491631075334191610e29916103e89182918a918991906004016115a2565b600060405180830381600087803b158015610e4357600080fd5b505af1158015610e57573d6000803e3d6000fd5b5050825460ff19166003908117845560405160008051602061161e8339815191529350610e8892508890879061150f565b60405180910390a15050505050565b60003360143610801590610ecb57506000838152602081815260408083206001600160a01b038516845290915290205460ff165b156104295750505036601319013560601c90565b600082815260076020526040812060018101548290610efe8786610f09565b161195945050505050565b60006001610f178484610f2c565b610f219190611544565b6001901b9392505050565b6000805b600084815260026020526040902054811015610fa757600084815260026020526040902080546001600160a01b038516919083908110610f7257610f726115f4565b6000918252602090912001546001600160a01b031603610f9f57610f9781600161160a565b915050610429565b600101610f30565b506101009392505050565b828054828255906000526020600020908101928215611007579160200282015b8281111561100757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610fd2565b50611013929150611017565b5090565b5b808211156110135760008155600101611018565b60006020828403121561103e57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6005811061107957634e487b7160e01b600052602160045260246000fd5b9052565b60208101610429828461105b565b80356001600160401b03811681146110a257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156110e5576110e56110a7565b604052919050565b600082601f8301126110fe57600080fd5b81356001600160401b03811115611117576111176110a7565b61112a601f8201601f19166020016110bd565b81815284602083860101111561113f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561116f57600080fd5b6111788361108b565b915060208301356001600160401b0381111561119357600080fd5b61119f858286016110ed565b9150509250929050565b80356001600160a01b03811681146110a257600080fd5b600080604083850312156111d357600080fd5b823591506111e3602084016111a9565b90509250929050565b803580151581146110a257600080fd5b60008060008060008060c0878903121561121557600080fd5b61121e8761108b565b95506020808801356001600160401b038082111561123b57600080fd5b6112478b838c016110ed565b975060408a0135915060ff8216821461125f57600080fd5b81965061126e60608b016111ec565b955060808a013591508082111561128457600080fd5b818a0191508a601f83011261129857600080fd5b8135818111156112aa576112aa6110a7565b8060051b91506112bb8483016110bd565b818152918301840191848101908d8411156112d557600080fd5b938501935b838510156112fa576112eb856111a9565b825293850193908501906112da565b80975050505050505061130f60a0880161108b565b90509295509295509295565b60008060006060848603121561133057600080fd5b6113398461108b565b925060208401356001600160401b038082111561135557600080fd5b611361878388016110ed565b9350604086013591508082111561137757600080fd5b50611384868287016110ed565b9150509250925092565b600080604083850312156113a157600080fd5b8235915060208301356001600160401b0381111561119357600080fd5b6000806000606084860312156113d357600080fd5b833592506113e3602085016111a9565b91506113f1604085016111ec565b90509250925092565b6000806040838503121561140d57600080fd5b50508035926020909101359150565b6080810161142a828761105b565b84602083015260ff8416604083015264ffffffffff8316606083015295945050505050565b60005b8381101561146a578181015183820152602001611452565b50506000910152565b6001600160401b0360c01b8360c01b1681526000825161149a81600885016020870161144f565b919091016008019392505050565b60208082526021908201527f4f6e6c792061646d696e2063616e2063616c6c20746869732066756e6374696f6040820152603760f91b606082015260800190565b8281526000825161150181602085016020870161144f565b919091016020019392505050565b6060810161151d828661105b565b602082019390935260400152919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156104295761042961152e565b600060ff821660ff810361156d5761156d61152e565b60010192915050565b6000815180845261158e81602086016020860161144f565b601f01601f19169290920160200192915050565b60006001600160401b038088168352808716602084015280861660408401525060a060608301526115d660a0830185611576565b82810360808401526115e88185611576565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b808201808211156104295761042961152e56feab737635c90eb54fdb0ea02155a55603ff65ef45c987f7486d99561ff24609efa2646970667358221220aadc99cbbee3c06c1771b331f2cd8248475657995496008069070843cbc76c1664736f6c63430008190033","sourceMap":"230:655:25:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80639e344fc0116100ad578063cf108ab911610071578063cf108ab9146102f1578063d079661b14610314578063d2ec5fca14610355578063ef67b8ed14610396578063f2e2af94146103a957600080fd5b80639e344fc014610272578063a0a0c51614610285578063a72cd03014610298578063a9b62d8d146102ab578063bc20f44e146102ce57600080fd5b806322b87b97116100f457806322b87b97146101f557806325605b6d1461022057806328d7fb2b146102435780633ceed692146102565780636717a3601461025f57600080fd5b80630a704f48146101315780631001d8301461016a578063158ef93e1461018b5780631b35b0cc146101a85780631cba5b04146101e0575b600080fd5b61015461013f36600461102c565b60009081526007602052604090205460ff1690565b604051610161919061107d565b60405180910390f35b61017d61017836600461115c565b6103fb565b604051908152602001610161565b6008546101989060ff1681565b6040519015158152602001610161565b6101ce6101b636600461102c565b60009081526007602052604090206002015460ff1690565b60405160ff9091168152602001610161565b6101f36101ee36600461102c565b61042f565b005b6101986102033660046111c0565b600060208181529281526040808220909352908152205460ff1681565b6101ce61022e36600461102c565b60036020526000908152604090205460ff1681565b6101f36102513660046111fc565b610474565b61017d61010081565b6101f361026d36600461131b565b6105f7565b6101f361028036600461131b565b610736565b61017d61029336600461138e565b61079d565b6101f36102a63660046113be565b6107b2565b61017d6102b936600461102c565b60009081526007602052604090206001015490565b6101986102dc36600461102c565b60066020526000908152604090205460ff1681565b6101986102ff36600461102c565b60056020526000908152604090205460ff1681565b61033d61032236600461102c565b6001602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610161565b61037e61036336600461102c565b6004602052600090815260409020546001600160401b031681565b6040516001600160401b039091168152602001610161565b61033d6103a43660046113fa565b61081e565b6103eb6103b736600461102c565b60076020526000908152604090208054600182015460029092015460ff9182169291811690610100900464ffffffffff1684565b604051610161949392919061141c565b60008282604051602001610410929190611473565b6040516020818303038152906040528051906020012090505b92915050565b60008181526001602052604090205481906001600160a01b031633146104705760405162461bcd60e51b8152600401610467906114a8565b60405180910390fd5b5050565b610100825111156104b95760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e7920766f7465727360881b6044820152606401610467565b60085460ff16156105025760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610467565b6008805460ff191660011790556040516000906105259088908890602001611473565b60408051808303601f190181529181528151602092830120600081815260038452828120805460ff1990811660ff8c161790915560058552838220805490911689151517905560048452828120805467ffffffffffffffff19166001600160401b038816179055600190935291208054336001600160a01b03199091161790558351909150156105d457600081815260026020908152604090912084516105ce92860190610fb2565b506105ee565b6000818152600660205260409020805460ff191660011790555b50505050505050565b6000838360405160200161060c929190611473565b604051602081830303815290604052805190602001209050600081836040516020016106399291906114e9565b60408051601f1981840301815291905280516020909101209050600360008281526007602052604090205460ff16600481111561067857610678611045565b036106c55760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206d7573742068617665206265656e2065786563757465646044820152606401610467565b60008281526005602052604090205460ff1661072f5760405162461bcd60e51b8152602060048201526024808201527f50726f706f73616c206d75737420616c6c6f77207573696e6720676f7665726e604482015263616e636560e01b6064820152608401610467565b5050505050565b610741838383610856565b61078d5760405162461bcd60e51b815260206004820152601860248201527f50726f706f73616c206d75737420626520766f7461626c6500000000000000006044820152606401610467565b610798838383610904565b505050565b600082826040516020016104109291906114e9565b60008381526001602052604090205483906001600160a01b031633146107ea5760405162461bcd60e51b8152600401610467906114a8565b506000928352602083815260408085206001600160a01b039490941685529290529120805460ff1916911515919091179055565b6002602052816000526040600020818154811061083a57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600082516000036108a95760405162461bcd60e51b815260206004820152601d60248201527f4a6f622064657461696c73206d757374206265206e6f6e2d656d7074790000006044820152606401610467565b81516000036108fa5760405162461bcd60e51b815260206004820152601d60248201527f4a6f622064657461696c73206d757374206265206e6f6e2d656d7074790000006044820152606401610467565b5060019392505050565b60008383604051602001610919929190611473565b604051602081830303815290604052805190602001209050600081836040516020016109469291906114e9565b60408051601f1981840301815291815281516020928301206000818152600790935291209091506002815460ff16600481111561098557610985611045565b0361099e5761099683878487610d7b565b505050505050565b60006109a984610e97565b825490915060019060ff1660048111156109c5576109c5611045565b1115610a1f5760405162461bcd60e51b815260206004820152602360248201527f70726f706f73616c20616c72656164792065786563757465642f63616e63656c6044820152621b195960ea1b6064820152608401610467565b610a2a848483610edf565b15610a6f5760405162461bcd60e51b81526020600482015260156024820152741c995b185e595c88185b1c9958591e481d9bdd1959605a1b6044820152606401610467565b6000825460ff166004811115610a8757610a87611045565b03610b5d576040805160808101909152806001815260006020808301829052604080840183905264ffffffffff4316606090940193909352868252600790522081518154829060ff19166001836004811115610ae557610ae5611045565b021790555060208201516001808301919091556040808401516002909301805460609095015164ffffffffff166101000265ffffffffffff1990951660ff9094169390931793909317909155905160008051602061161e83398151915291610b50918790879061150f565b60405180910390a1610bd6565b60008481526004602052604090205460028301546001600160401b0390911690610b9390610100900464ffffffffff1643611544565b64ffffffffff161115610bd657815460ff19166004908117835560405160008051602061161e83398151915291610bcd918790879061150f565b60405180910390a15b6004825460ff166004811115610bee57610bee611045565b14610cd957610bfd8482610f09565b60018301805491909117905560028201805460ff16906000610c1e83611557565b91906101000a81548160ff021916908360ff160217905550507f961015e6a4653a891033ea3ea3ce41566aad79e0097ece8cb102ae7cd135ab868260000160009054906101000a900460ff168585604051610c7b9392919061150f565b60405180910390a1600084815260036020526040902054600283015460ff918216911610610cd957815460ff19166002908117835560405160008051602061161e83398151915291610cd0918790879061150f565b60405180910390a15b60008481526007602052604090208254815484929160ff1690829060ff19166001836004811115610d0c57610d0c611045565b02179055506001828101549082015560029182018054918301805460ff19811660ff9094169384178255915464ffffffffff61010091829004160265ffffffffffff19909216909217179055825460ff166004811115610d6e57610d6e611045565b036105ee576105ee848885885b60008481526007602052604090206002815460ff166004811115610da157610da1611045565b14610dee5760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206d757374206861766520506173736564207374617475736044820152606401610467565b60408051602081018252600081529051631075334160e01b815261081491631075334191610e29916103e89182918a918991906004016115a2565b600060405180830381600087803b158015610e4357600080fd5b505af1158015610e57573d6000803e3d6000fd5b5050825460ff19166003908117845560405160008051602061161e8339815191529350610e8892508890879061150f565b60405180910390a15050505050565b60003360143610801590610ecb57506000838152602081815260408083206001600160a01b038516845290915290205460ff165b156104295750505036601319013560601c90565b600082815260076020526040812060018101548290610efe8786610f09565b161195945050505050565b60006001610f178484610f2c565b610f219190611544565b6001901b9392505050565b6000805b600084815260026020526040902054811015610fa757600084815260026020526040902080546001600160a01b038516919083908110610f7257610f726115f4565b6000918252602090912001546001600160a01b031603610f9f57610f9781600161160a565b915050610429565b600101610f30565b506101009392505050565b828054828255906000526020600020908101928215611007579160200282015b8281111561100757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610fd2565b50611013929150611017565b5090565b5b808211156110135760008155600101611018565b60006020828403121561103e57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6005811061107957634e487b7160e01b600052602160045260246000fd5b9052565b60208101610429828461105b565b80356001600160401b03811681146110a257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156110e5576110e56110a7565b604052919050565b600082601f8301126110fe57600080fd5b81356001600160401b03811115611117576111176110a7565b61112a601f8201601f19166020016110bd565b81815284602083860101111561113f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561116f57600080fd5b6111788361108b565b915060208301356001600160401b0381111561119357600080fd5b61119f858286016110ed565b9150509250929050565b80356001600160a01b03811681146110a257600080fd5b600080604083850312156111d357600080fd5b823591506111e3602084016111a9565b90509250929050565b803580151581146110a257600080fd5b60008060008060008060c0878903121561121557600080fd5b61121e8761108b565b95506020808801356001600160401b038082111561123b57600080fd5b6112478b838c016110ed565b975060408a0135915060ff8216821461125f57600080fd5b81965061126e60608b016111ec565b955060808a013591508082111561128457600080fd5b818a0191508a601f83011261129857600080fd5b8135818111156112aa576112aa6110a7565b8060051b91506112bb8483016110bd565b818152918301840191848101908d8411156112d557600080fd5b938501935b838510156112fa576112eb856111a9565b825293850193908501906112da565b80975050505050505061130f60a0880161108b565b90509295509295509295565b60008060006060848603121561133057600080fd5b6113398461108b565b925060208401356001600160401b038082111561135557600080fd5b611361878388016110ed565b9350604086013591508082111561137757600080fd5b50611384868287016110ed565b9150509250925092565b600080604083850312156113a157600080fd5b8235915060208301356001600160401b0381111561119357600080fd5b6000806000606084860312156113d357600080fd5b833592506113e3602085016111a9565b91506113f1604085016111ec565b90509250925092565b6000806040838503121561140d57600080fd5b50508035926020909101359150565b6080810161142a828761105b565b84602083015260ff8416604083015264ffffffffff8316606083015295945050505050565b60005b8381101561146a578181015183820152602001611452565b50506000910152565b6001600160401b0360c01b8360c01b1681526000825161149a81600885016020870161144f565b919091016008019392505050565b60208082526021908201527f4f6e6c792061646d696e2063616e2063616c6c20746869732066756e6374696f6040820152603760f91b606082015260800190565b8281526000825161150181602085016020870161144f565b919091016020019392505050565b6060810161151d828661105b565b602082019390935260400152919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156104295761042961152e565b600060ff821660ff810361156d5761156d61152e565b60010192915050565b6000815180845261158e81602086016020860161144f565b601f01601f19169290920160200192915050565b60006001600160401b038088168352808716602084015280861660408401525060a060608301526115d660a0830185611576565b82810360808401526115e88185611576565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b808201808211156104295761042961152e56feab737635c90eb54fdb0ea02155a55603ff65ef45c987f7486d99561ff24609efa2646970667358221220aadc99cbbee3c06c1771b331f2cd8248475657995496008069070843cbc76c1664736f6c63430008190033","sourceMap":"230:655:25:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10982:143:24;;;;;;:::i;:::-;11052:14;11085:25;;;:10;:25;;;;;:33;;;;10982:143;;;;;;;;:::i;:::-;;;;;;;;1539:198;;;;;;:::i;:::-;;:::i;:::-;;;2468:25:26;;;2456:2;2441:18;1539:198:24;2322:177:26;948:23:24;;;;;;;;;;;;2669:14:26;;2662:22;2644:41;;2632:2;2617:18;948:23:24;2504:187:26;11282:149:24;;;;;;:::i;:::-;11360:5;11384:25;;;:10;:25;;;;;:40;;;;;;11282:149;;;;2868:4:26;2856:17;;;2838:36;;2826:2;2811:18;11282:149:24;2696:184:26;3166:133:24;;;;;;:::i;:::-;;:::i;:::-;;465:70;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;639:43;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1943:1071;;;;;;:::i;:::-;;:::i;1047:40::-;;1084:3;1047:40;;3718:672;;;;;;:::i;:::-;;:::i;4393:502::-;;;;;;:::i;:::-;;:::i;1743:194::-;;;;;;:::i;:::-;;:::i;3542:173::-;;;;;;:::i;:::-;;:::i;11131:141::-;;;;;;:::i;:::-;11204:7;11230:25;;;:10;:25;;;;;:35;;;;11131:141;786:46;;;;;;:::i;:::-;;;;;;;;;;;;;;;;735:45;;;;;;:::i;:::-;;;;;;;;;;;;;;;;541:42;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;541:42:24;;;;;;-1:-1:-1;;;;;6696:32:26;;;6678:51;;6666:2;6651:18;541:42:24;6532:203:26;688:41:24;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;688:41:24;;;;;;-1:-1:-1;;;;;6902:31:26;;;6884:50;;6872:2;6857:18;688:41:24;6740:200:26;589:44:24;;;;;;:::i;:::-;;:::i;895:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1539:198::-;1646:7;1699:11;1712:16;1682:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1672:58;;;;;;1665:65;;1539:198;;;;;:::o;3166:133::-;1453:10;;;;:6;:10;;;;;;3232:16;;-1:-1:-1;;;;;1453:10:24;1467;1453:24;1445:70;;;;-1:-1:-1;;;1445:70:24;;;;;;;:::i;:::-;;;;;;;;;3166:133;;:::o;1943:1071::-;1084:3;2175:7;:14;:28;;2167:56;;;;-1:-1:-1;;;2167:56:24;;8926:2:26;2167:56:24;;;8908:21:26;8965:2;8945:18;;;8938:30;-1:-1:-1;;;8984:18:26;;;8977:45;9039:18;;2167:56:24;8724:339:26;2167:56:24;2241:11;;;;:20;2233:52;;;;-1:-1:-1;;;2233:52:24;;9270:2:26;2233:52:24;;;9252:21:26;9309:2;9289:18;;;9282:30;-1:-1:-1;;;9328:18:26;;;9321:49;9387:18;;2233:52:24;9068:343:26;2233:52:24;2295:11;:18;;-1:-1:-1;;2295:18:24;2309:4;2295:18;;;2419:47;;2295:11;;2419:47;;2436:11;;2449:16;;2419:47;;;:::i;:::-;;;;;;;-1:-1:-1;;2419:47:24;;;;;;2409:58;;2419:47;2409:58;;;;2477:27;;;;:9;:27;;;;;:40;;-1:-1:-1;;2477:40:24;;;;;;;;;;2527:12;:30;;;;;:46;;;;;;;;;;;2583:6;:24;;;;;:34;;-1:-1:-1;;2583:34:24;-1:-1:-1;;;;;2583:34:24;;;;;-1:-1:-1;2627:24:24;;;;;:37;;2654:10;-1:-1:-1;;;;;;2627:37:24;;;;;;2731:14;;2409:58;;-1:-1:-1;2731:18:24;2727:281;;2765:24;;;;:6;:24;;;;;;;;:34;;;;;;;;:::i;:::-;;2727:281;;;2913:31;;;;:13;:31;;;;;:38;;-1:-1:-1;;2913:38:24;2947:4;2913:38;;;2965:32;2157:857;1943:1071;;;;;;:::o;3718:672::-;3889:18;3937:11;3950:16;3920:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3910:58;;;;;;3889:79;;3978:21;4029:10;4041:16;4012:46;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;4012:46:24;;;;;;;;;4002:57;;4012:46;4002:57;;;;;-1:-1:-1;4114:23:24;4077:25;;;;:10;:25;;;;;:33;;;:60;;;;;;;;:::i;:::-;;4069:105;;;;-1:-1:-1;;;4069:105:24;;9982:2:26;4069:105:24;;;9964:21:26;;;10001:18;;;9994:30;10060:34;10040:18;;;10033:62;10112:18;;4069:105:24;9780:356:26;4069:105:24;4192:24;;;;:12;:24;;;;;;;;4184:73;;;;-1:-1:-1;;;4184:73:24;;10343:2:26;4184:73:24;;;10325:21:26;10382:2;10362:18;;;10355:30;10421:34;10401:18;;;10394:62;-1:-1:-1;;;10472:18:26;;;10465:34;10516:19;;4184:73:24;10141:400:26;4184:73:24;3841:549;;3718:672;;;:::o;4393:502::-;4554:67;4573:11;4586:16;4604;4554:18;:67::i;:::-;4546:104;;;;-1:-1:-1;;;4546:104:24;;10748:2:26;4546:104:24;;;10730:21:26;10787:2;10767:18;;;10760:30;10826:26;10806:18;;;10799:54;10870:18;;4546:104:24;10546:348:26;4546:104:24;4828:63;4842:11;4855:16;4873;4828:13;:63::i;:::-;4393:502;;;:::o;1743:194::-;1847:7;1900:10;1912:16;1883:46;;;;;;;;;:::i;3542:173::-;1453:10;;;;:6;:10;;;;;;3639;;-1:-1:-1;;;;;1453:10:24;1467;1453:24;1445:70;;;;-1:-1:-1;;;1445:70:24;;;;;;;:::i;:::-;-1:-1:-1;3661:16:24::1;:28:::0;;;::::1;::::0;;;;;;;-1:-1:-1;;;;;3661:39:24;;;::::1;::::0;;;;;;;:47;;-1:-1:-1;;3661:47:24::1;::::0;::::1;;::::0;;;::::1;::::0;;3542:173::o;589:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;589:44:24;;-1:-1:-1;589:44:24;;-1:-1:-1;589:44:24:o;281:336:25:-;423:4;447:16;:23;474:1;447:28;439:70;;;;-1:-1:-1;;;439:70:25;;11101:2:26;439:70:25;;;11083:21:26;11140:2;11120:18;;;11113:30;11179:31;11159:18;;;11152:59;11228:18;;439:70:25;10899:353:26;439:70:25;527:16;:23;554:1;527:28;519:70;;;;-1:-1:-1;;;519:70:25;;11101:2:26;519:70:25;;;11083:21:26;11140:2;11120:18;;;11113:30;11179:31;11159:18;;;11152:59;11228:18;;519:70:25;10899:353:26;519:70:25;-1:-1:-1;606:4:25;281:336;;;;;:::o;5569:2476:24:-;5693:24;5747:11;5760:16;5730:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5720:58;;;;;;5693:85;;5788:21;5839:16;5857;5822:52;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5822:52:24;;;;;;;;;5812:63;;5822:52;5812:63;;;;5885:25;5913;;;:10;:25;;;;;5812:63;;-1:-1:-1;5972:21:24;5952:16;;;;:41;;;;;;;;:::i;:::-;;5948:173;;6009:81;6026:16;6044:11;6057:13;6072:16;6009;:81::i;:::-;6104:7;;;5569:2476;;;:::o;5948:173::-;6139:14;6156:28;6167:16;6156:10;:28::i;:::-;6216:16;;6139:45;;-1:-1:-1;6237:1:24;;6216:16;;6211:22;;;;;;;;:::i;:::-;:27;;6203:75;;;;-1:-1:-1;;;6203:75:24;;11459:2:26;6203:75:24;;;11441:21:26;11498:2;11478:18;;;11471:30;11537:34;11517:18;;;11510:62;-1:-1:-1;;;11588:18:26;;;11581:33;11631:19;;6203:75:24;11257:399:26;6203:75:24;6297:50;6307:16;6325:13;6340:6;6297:9;:50::i;:::-;6296:51;6288:85;;;;-1:-1:-1;;;6288:85:24;;11863:2:26;6288:85:24;;;11845:21:26;11902:2;11882:18;;;11875:30;-1:-1:-1;;;11921:18:26;;;11914:51;11982:18;;6288:85:24;11661:345:26;6288:85:24;6408:23;6388:16;;;;:43;;;;;;;;:::i;:::-;;6384:813;;6475:219;;;;;;;;;;6512:21;6475:219;;6563:1;6475:219;;;;;;;;;;;;;;;6642:12;6475:219;;;;;;;;;6447:25;;;:10;:25;;;:247;;;;:25;;-1:-1:-1;;6447:247:24;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;6447:247:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6447:247:24;;;;;;;;;;;;;;;;;;6714:69;;-1:-1:-1;;;;;;;;;;;6714:69:24;;;6751:16;;6769:13;;6714:69;:::i;:::-;;;;;;;;6384:813;;;6853:24;;;;:6;:24;;;;;;6826:23;;;;-1:-1:-1;;;;;6853:24:24;;;;6811:38;;6853:24;6826:23;;;;6811:12;:38;:::i;:::-;6804:73;;;6800:397;;;7051:43;;-1:-1:-1;;7051:43:24;7070:24;7051:43;;;;;7114:72;;-1:-1:-1;;;;;;;;;;;7114:72:24;;;7154:16;;7172:13;;7114:72;:::i;:::-;;;;;;;;6800:397;7231:24;7211:16;;;;:44;;;;;;;;:::i;:::-;;7207:620;;7314:35;7324:16;7342:6;7314:9;:35::i;:::-;7293:18;;;;;:56;;;;7271:79;;7364:23;;;:25;;;;;-1:-1:-1;7364:25:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;7452:63;7465:8;:16;;;;;;;;;;;;7483;7501:13;7452:63;;;;;;;;:::i;:::-;;;;;;;;7623:27;;;;:9;:27;;;;;;7596:23;;;;7623:27;;;;7596:23;;:54;7592:225;;7670:40;;-1:-1:-1;;7670:40:24;7689:21;7670:40;;;;;7733:69;;-1:-1:-1;;;;;;;;;;;7733:69:24;;;7770:16;;7788:13;;7733:69;:::i;:::-;;;;;;;;7592:225;7836:28;;;;:10;:28;;;;;:39;;;;7867:8;;7836:28;:39;;;:28;;-1:-1:-1;;7836:39:24;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;7836:39:24;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7836:39:24;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7836:39:24;;;;;;;;;7890:16;;;;:41;;;;;;;;:::i;:::-;;7886:153;;7947:81;7964:16;7982:11;7995:13;8010:16;8338:590;8483:25;8511:28;;;:10;:28;;;;;8577:21;8557:16;;;;:41;;;;;;;;:::i;:::-;;8549:86;;;;-1:-1:-1;;;8549:86:24;;13024:2:26;8549:86:24;;;13006:21:26;;;13043:18;;;13036:30;13102:34;13082:18;;;13075:62;13154:18;;8549:86:24;12822:356:26;8549:86:24;8748:9;;;;;;;;-1:-1:-1;8748:9:24;;8654:104;;-1:-1:-1;;;8654:104:24;;137:42:23;;8654:34:24;;:104;;8696:4;;;;8717:11;;8730:16;;8748:9;8654:104;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8777:42:24;;-1:-1:-1;;8777:42:24;8796:23;8777:42;;;;;8850:71;;-1:-1:-1;;;;;;;;;;;8850:71:24;-1:-1:-1;8850:71:24;;-1:-1:-1;8889:16:24;;8907:13;;8850:71;:::i;:::-;;;;;;;;8473:455;8338:590;;;;:::o;9686:336::-;9749:7;9785:10;9828:2;9809:8;:21;;;;:61;;-1:-1:-1;9834:16:24;:28;;;;;;;;;;;-1:-1:-1;;;;;9834:36:24;;;;;;;;;;;;9809:61;9805:188;;;-1:-1:-1;;;9948:14:24;-1:-1:-1;;9944:23:24;9931:37;9927:2;9923:46;;9686:336::o;9415:265::-;9520:4;9564:25;;;:10;:25;;;;;9649:18;;;;9520:4;;9607:34;9617:16;9635:5;9607:9;:34::i;:::-;:61;9606:67;;9415:265;-1:-1:-1;;;;;9415:265:24:o;9244:165::-;9326:4;9400:1;9361:36;9373:16;9391:5;9361:11;:36::i;:::-;:40;;;;:::i;:::-;9354:1;9349:53;;;9244:165;-1:-1:-1;;;9244:165:24:o;8934:304::-;9019:4;;9035:170;9056:24;;;;:6;:24;;;;;:31;9052:35;;9035:170;;;9112:24;;;;:6;:24;;;;;:27;;-1:-1:-1;;;;;9112:36:24;;;:24;9137:1;;9112:27;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;9112:27:24;:36;9108:87;;9175:5;:1;9179;9175:5;:::i;:::-;9168:12;;;;;9108:87;9089:3;;9035:170;;;-1:-1:-1;1084:3:24;;8934:304;-1:-1:-1;;;8934:304:24:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:180:26;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:26;;14:180;-1:-1:-1;14:180:26:o;199:127::-;260:10;255:3;251:20;248:1;241:31;291:4;288:1;281:15;315:4;312:1;305:15;331:242;417:1;410:5;407:12;397:143;;462:10;457:3;453:20;450:1;443:31;497:4;494:1;487:15;525:4;522:1;515:15;397:143;549:18;;331:242::o;578:219::-;730:2;715:18;;742:49;719:9;773:6;742:49;:::i;802:171::-;869:20;;-1:-1:-1;;;;;918:30:26;;908:41;;898:69;;963:1;960;953:12;898:69;802:171;;;:::o;978:127::-;1039:10;1034:3;1030:20;1027:1;1020:31;1070:4;1067:1;1060:15;1094:4;1091:1;1084:15;1110:275;1181:2;1175:9;1246:2;1227:13;;-1:-1:-1;;1223:27:26;1211:40;;-1:-1:-1;;;;;1266:34:26;;1302:22;;;1263:62;1260:88;;;1328:18;;:::i;:::-;1364:2;1357:22;1110:275;;-1:-1:-1;1110:275:26:o;1390:530::-;1432:5;1485:3;1478:4;1470:6;1466:17;1462:27;1452:55;;1503:1;1500;1493:12;1452:55;1539:6;1526:20;-1:-1:-1;;;;;1561:2:26;1558:26;1555:52;;;1587:18;;:::i;:::-;1631:55;1674:2;1655:13;;-1:-1:-1;;1651:27:26;1680:4;1647:38;1631:55;:::i;:::-;1711:2;1702:7;1695:19;1757:3;1750:4;1745:2;1737:6;1733:15;1729:26;1726:35;1723:55;;;1774:1;1771;1764:12;1723:55;1839:2;1832:4;1824:6;1820:17;1813:4;1804:7;1800:18;1787:55;1887:1;1862:16;;;1880:4;1858:27;1851:38;;;;1866:7;1390:530;-1:-1:-1;;;1390:530:26:o;1925:392::-;2001:6;2009;2062:2;2050:9;2041:7;2037:23;2033:32;2030:52;;;2078:1;2075;2068:12;2030:52;2101:28;2119:9;2101:28;:::i;:::-;2091:38;;2180:2;2169:9;2165:18;2152:32;-1:-1:-1;;;;;2199:6:26;2196:30;2193:50;;;2239:1;2236;2229:12;2193:50;2262:49;2303:7;2294:6;2283:9;2279:22;2262:49;:::i;:::-;2252:59;;;1925:392;;;;;:::o;2885:173::-;2953:20;;-1:-1:-1;;;;;3002:31:26;;2992:42;;2982:70;;3048:1;3045;3038:12;3063:254;3131:6;3139;3192:2;3180:9;3171:7;3167:23;3163:32;3160:52;;;3208:1;3205;3198:12;3160:52;3244:9;3231:23;3221:33;;3273:38;3307:2;3296:9;3292:18;3273:38;:::i;:::-;3263:48;;3063:254;;;;;:::o;3322:160::-;3387:20;;3443:13;;3436:21;3426:32;;3416:60;;3472:1;3469;3462:12;3487:1522;3618:6;3626;3634;3642;3650;3658;3711:3;3699:9;3690:7;3686:23;3682:33;3679:53;;;3728:1;3725;3718:12;3679:53;3751:28;3769:9;3751:28;:::i;:::-;3741:38;;3798:2;3851;3840:9;3836:18;3823:32;-1:-1:-1;;;;;3915:2:26;3907:6;3904:14;3901:34;;;3931:1;3928;3921:12;3901:34;3954:49;3995:7;3986:6;3975:9;3971:22;3954:49;:::i;:::-;3944:59;;4053:2;4042:9;4038:18;4025:32;4012:45;;4097:4;4090:5;4086:16;4079:5;4076:27;4066:55;;4117:1;4114;4107:12;4066:55;4140:5;4130:15;;4164:35;4195:2;4184:9;4180:18;4164:35;:::i;:::-;4154:45;;4252:3;4241:9;4237:19;4224:33;4208:49;;4282:2;4272:8;4269:16;4266:36;;;4298:1;4295;4288:12;4266:36;4336:8;4325:9;4321:24;4311:34;;4383:7;4376:4;4372:2;4368:13;4364:27;4354:55;;4405:1;4402;4395:12;4354:55;4441:2;4428:16;4463:2;4459;4456:10;4453:36;;;4469:18;;:::i;:::-;4515:2;4512:1;4508:10;4498:20;;4538:28;4562:2;4558;4554:11;4538:28;:::i;:::-;4600:15;;;4670:11;;;4666:20;;;4631:12;;;;4698:19;;;4695:39;;;4730:1;4727;4720:12;4695:39;4754:11;;;;4774:148;4790:6;4785:3;4782:15;4774:148;;;4856:23;4875:3;4856:23;:::i;:::-;4844:36;;4807:12;;;;4900;;;;4774:148;;;4941:5;4931:15;;;;;;;;4965:38;4998:3;4987:9;4983:19;4965:38;:::i;:::-;4955:48;;3487:1522;;;;;;;;:::o;5196:611::-;5290:6;5298;5306;5359:2;5347:9;5338:7;5334:23;5330:32;5327:52;;;5375:1;5372;5365:12;5327:52;5398:28;5416:9;5398:28;:::i;:::-;5388:38;;5477:2;5466:9;5462:18;5449:32;-1:-1:-1;;;;;5541:2:26;5533:6;5530:14;5527:34;;;5557:1;5554;5547:12;5527:34;5580:49;5621:7;5612:6;5601:9;5597:22;5580:49;:::i;:::-;5570:59;;5682:2;5671:9;5667:18;5654:32;5638:48;;5711:2;5701:8;5698:16;5695:36;;;5727:1;5724;5717:12;5695:36;;5750:51;5793:7;5782:8;5771:9;5767:24;5750:51;:::i;:::-;5740:61;;;5196:611;;;;;:::o;5812:388::-;5889:6;5897;5950:2;5938:9;5929:7;5925:23;5921:32;5918:52;;;5966:1;5963;5956:12;5918:52;6002:9;5989:23;5979:33;;6063:2;6052:9;6048:18;6035:32;-1:-1:-1;;;;;6082:6:26;6079:30;6076:50;;;6122:1;6119;6112:12;6205:322;6279:6;6287;6295;6348:2;6336:9;6327:7;6323:23;6319:32;6316:52;;;6364:1;6361;6354:12;6316:52;6400:9;6387:23;6377:33;;6429:38;6463:2;6452:9;6448:18;6429:38;:::i;:::-;6419:48;;6486:35;6517:2;6506:9;6502:18;6486:35;:::i;:::-;6476:45;;6205:322;;;;;:::o;6945:248::-;7013:6;7021;7074:2;7062:9;7053:7;7049:23;7045:32;7042:52;;;7090:1;7087;7080:12;7042:52;-1:-1:-1;;7113:23:26;;;7183:2;7168:18;;;7155:32;;-1:-1:-1;6945:248:26:o;7198:457::-;7428:3;7413:19;;7441:49;7417:9;7472:6;7441:49;:::i;:::-;7526:6;7521:2;7510:9;7506:18;7499:34;7581:4;7573:6;7569:17;7564:2;7553:9;7549:18;7542:45;7635:12;7627:6;7623:25;7618:2;7607:9;7603:18;7596:53;7198:457;;;;;;;:::o;7660:250::-;7745:1;7755:113;7769:6;7766:1;7763:13;7755:113;;;7845:11;;;7839:18;7826:11;;;7819:39;7791:2;7784:10;7755:113;;;-1:-1:-1;;7902:1:26;7884:16;;7877:27;7660:250::o;7915:402::-;-1:-1:-1;;;;;8126:3:26;8122:28;8113:6;8108:3;8104:16;8100:51;8095:3;8088:64;8070:3;8181:6;8175:13;8197:74;8264:6;8260:1;8255:3;8251:11;8244:4;8236:6;8232:17;8197:74;:::i;:::-;8291:16;;;;8309:1;8287:24;;7915:402;-1:-1:-1;;;7915:402:26:o;8322:397::-;8524:2;8506:21;;;8563:2;8543:18;;;8536:30;8602:34;8597:2;8582:18;;8575:62;-1:-1:-1;;;8668:2:26;8653:18;;8646:31;8709:3;8694:19;;8322:397::o;9416:359::-;9603:6;9598:3;9591:19;9573:3;9639:6;9633:13;9655:73;9721:6;9716:2;9711:3;9707:12;9702:2;9694:6;9690:15;9655:73;:::i;:::-;9748:16;;;;9766:2;9744:25;;9416:359;-1:-1:-1;;;9416:359:26:o;12011:361::-;12219:2;12204:18;;12231:49;12208:9;12262:6;12231:49;:::i;:::-;12311:2;12296:18;;12289:34;;;;12354:2;12339:18;12332:34;12011:361;;-1:-1:-1;12011:361:26:o;12377:127::-;12438:10;12433:3;12429:20;12426:1;12419:31;12469:4;12466:1;12459:15;12493:4;12490:1;12483:15;12509:128;12576:9;;;12597:11;;;12594:37;;;12611:18;;:::i;12642:175::-;12679:3;12723:4;12716:5;12712:16;12752:4;12743:7;12740:17;12737:43;;12760:18;;:::i;:::-;12809:1;12796:15;;12642:175;-1:-1:-1;;12642:175:26:o;13183:270::-;13224:3;13262:5;13256:12;13289:6;13284:3;13277:19;13305:76;13374:6;13367:4;13362:3;13358:14;13351:4;13344:5;13340:16;13305:76;:::i;:::-;13435:2;13414:15;-1:-1:-1;;13410:29:26;13401:39;;;;13442:4;13397:50;;13183:270;-1:-1:-1;;13183:270:26:o;13458:651::-;13692:4;-1:-1:-1;;;;;13778:2:26;13770:6;13766:15;13755:9;13748:34;13830:2;13822:6;13818:15;13813:2;13802:9;13798:18;13791:43;13882:2;13874:6;13870:15;13865:2;13854:9;13850:18;13843:43;;13922:3;13917:2;13906:9;13902:18;13895:31;13949:45;13989:3;13978:9;13974:19;13966:6;13949:45;:::i;:::-;14043:9;14035:6;14031:22;14025:3;14014:9;14010:19;14003:51;14071:32;14096:6;14088;14071:32;:::i;:::-;14063:40;13458:651;-1:-1:-1;;;;;;;;13458:651:26:o;14114:127::-;14175:10;14170:3;14166:20;14163:1;14156:31;14206:4;14203:1;14196:15;14230:4;14227:1;14220:15;14246:125;14311:9;;;14332:10;;;14329:36;;;14345:18;;:::i","linkReferences":{}},"methodIdentifiers":{"MAX_VOTERS()":"3ceed692","_proposals(bytes32)":"f2e2af94","adminSetForwarder(bytes32,address,bool)":"a72cd030","admins(bytes32)":"d079661b","calculatePhase1ProposalId(uint64,bytes)":"1001d830","calculatePhase2JobHash(bytes32,bytes)":"a0a0c516","expiry(bytes32)":"d2ec5fca","getProposalState(bytes32)":"0a704f48","getProposalYesVotes(bytes32)":"a9b62d8d","getProposalYesVotesTotal(bytes32)":"1b35b0cc","initialize(uint64,bytes,uint8,bool,address[],uint64)":"28d7fb2b","initialized()":"158ef93e","isValidForwarder(bytes32,address)":"22b87b97","refreshVoters(bytes32)":"1cba5b04","submitGovernanceProposal(uint64,bytes,bytes)":"6717a360","threshold(bytes32)":"25605b6d","useDemocracy(bytes32)":"cf108ab9","useValidators(bytes32)":"bc20f44e","voteProposal(uint64,bytes,bytes)":"9e344fc0","voters(bytes32,uint256)":"ef67b8ed"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"lowLevelData\",\"type\":\"bytes\"}],\"name\":\"FailedHandlerExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum ProposalStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"proposalId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"ProposalEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum ProposalStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"proposalId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"ProposalVote\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_VOTERS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_proposals\",\"outputs\":[{\"internalType\":\"enum ProposalStatus\",\"name\":\"_status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_yesVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_yesVotesTotal\",\"type\":\"uint8\"},{\"internalType\":\"uint40\",\"name\":\"_proposedBlock\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proposalId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"adminSetForwarder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"admins\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"phase1JobDetails\",\"type\":\"bytes\"}],\"name\":\"calculatePhase1ProposalId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proposalId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"phase2JobDetails\",\"type\":\"bytes\"}],\"name\":\"calculatePhase2JobHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"expiry\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"getProposalState\",\"outputs\":[{\"internalType\":\"enum ProposalStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"getProposalYesVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"getProposalYesVotesTotal\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"phase1JobDetails\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"_threshold\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"_useDemocracy\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"_voters\",\"type\":\"address[]\"},{\"internalType\":\"uint64\",\"name\":\"_expiry\",\"type\":\"uint64\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"phase1ProposalId\",\"type\":\"bytes32\"}],\"name\":\"refreshVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"phase1JobDetails\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"phase2JobDetails\",\"type\":\"bytes\"}],\"name\":\"submitGovernanceProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"threshold\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"useDemocracy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"useValidators\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"phase1JobDetails\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"phase2JobDetails\",\"type\":\"bytes\"}],\"name\":\"voteProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"voters\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"adminSetForwarder(bytes32,address,bool)\":{\"params\":{\"forwarder\":\"Forwarder address to be added.\",\"valid\":\"Decision for the specific forwarder.\"}},\"refreshVoters(bytes32)\":{\"params\":{\"phase1ProposalId\":\"ID of the proposal to refresh voters for.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"adminSetForwarder(bytes32,address,bool)\":{\"notice\":\"Set a forwarder to be used.Only callable by an address that currently has the admin role.\"},\"getProposalState(bytes32)\":{\"notice\":\"--------------------------------------------------------------------------------------- /// -------------------------------------- Helpers ---------------------------------------- /// --------------------------------------------------------------------------------------- ///\"},\"refreshVoters(bytes32)\":{\"notice\":\"Refresh the list of voters for a proposal w/ validators\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/SigningRules.sol\":\"VotableSigningRules\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0xf513292ab066e6017db48ca749c1e63a44dfc5cba0326fc65c718f96e029d361\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://02d715ae2898f1fabd08133f80e6a7a3b87a2796ca5d23d1cb3fed9f4367f34c\",\"dweb:/ipfs/QmfESqa4j3PQAvvdfrnDQ1xUH1TnVCfvZYHsAEDK8z4X4k\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0x9cc29c28f49d0b7f7b2f1aa32d8273f8a087bf62eb3fb22d893df824052c25ef\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://42dcb36cb10b878a0d5b20ce3a4a3ba4f51f44d7731a66ac1133c699bc80b31b\",\"dweb:/ipfs/QmY6q7SaHQMLBb3rS6xZdArPaXoskWeqF6oJwUeZ3gKLZj\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d\",\"dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0x62bed173cb126f6d5006706cf249bac8a2d51bfa18f773f314784ff18adc622d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5acc33dddbf2492e37dc32e89cd56ce917272d303a6874805f3a5768a6bfbf54\",\"dweb:/ipfs/QmTsgFhcpUf16gAVazUXU3WspgX8nHke2hzVCvoqS25WEp\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0x651d84d948832f0ef45686417aa68ffb871378fa788a4123dbf37844903c66f3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ff20f5ac9de3dc3ba86b1bf1f2723174e82ce3499ad67cb0ccfa7d28baeee678\",\"dweb:/ipfs/QmRZkUFKz7AmF7yk6o317sk822HHhGVPXZQgX8G4LfYfft\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0xc8a57915ace96f5b6a85b57e57690fc038cad9034a3dc368c11828a3707c61ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa880a1a6e5d94005dcf4811b4c0df8d9c06407017ae111bd351483e2b76a72d\",\"dweb:/ipfs/QmcxkEE58gE1vDcZofTr8QpvdjXjgR72yYg7o4vTPSLCsy\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61\",\"dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3b4bb409a156dee9ce261458117fe9f81080ca844a8a26c07c857c46d155effe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5792c69fe24bdc063a14e08fe68275007fdb1e5e7e343840a77938cb7e95a64e\",\"dweb:/ipfs/QmcAMhaurUwzhytJFYix4vRNeZeV8g27b8LnV3t7dvYtiK\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0x30d73c4fea34a791ad7334dd701df60fbb565c643556aadd6621e49e48895d1f\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://be9cf80e55eff0f49ad0ab3c44214e56a3e53b5ecafe311a521f5472fa4bbf59\",\"dweb:/ipfs/QmQHrZZoscvkfKSD2m6jhktrh8ieSLV2fg9DHGDHJiBkjT\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"lib/forge-std/src/interfaces/IERC165.sol\":{\"keccak256\":\"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc\",\"dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT\"]},\"lib/forge-std/src/interfaces/IERC20.sol\":{\"keccak256\":\"0x4cab887298790f908c27de107e4e2907ca5413aee482ef776f8d2f353c5ef947\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb715e0c4a2bdbe432bb624501506041f06e878e0b72675aebba30ad2c2b72e7\",\"dweb:/ipfs/QmWhhLSvkxS2NrukJJHqFY8gDVE5r9rD4PfHvR24pwdKv9\"]},\"lib/forge-std/src/interfaces/IERC721.sol\":{\"keccak256\":\"0xf069262a264fdb69f8f37a10d2df7374649e9ba73f8414c9c8a3b51184625f15\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://924a41ca82a68ffbd503a5faf2f76d13e9938f10501a71094716f12bb64b4b7f\",\"dweb:/ipfs/QmdWnqfKc5ZGhmxNPTde4zrFchnv9Yk9MpCMb2rdhXE5gm\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/mocks/MockERC20.sol\":{\"keccak256\":\"0xadbdfc6639edec00ba94bb1133a0fd8de31ccafe45c2ef5df9b3ca61b60b559b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc766f01bccf669abac8cc7b2096cc1352a66471ca3772ae61b1801dedc4ed4f\",\"dweb:/ipfs/QmNigaPj1LYkP7Z5xr4ijkUxr2K66fDGeoifG3WoM9ruyw\"]},\"lib/forge-std/src/mocks/MockERC721.sol\":{\"keccak256\":\"0x3293dcbb7acd28df553c954e4e39e288bf10aab7ecda8d50ef21b4f4a91a28d9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9eb374daf6df34f4392f8926f1fddbce9f22c423066aeaefdfbe77395f77967b\",\"dweb:/ipfs/QmWR81zBJRX2uyRjveGzikYPj6ZwKppWsU49YEQXTLWUsN\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]},\"src/JobsPrecompileInterface.sol\":{\"keccak256\":\"0x3c8c4de2daa16ed74bd516ca4d2386041f400d2e0f8b9b48043af942b6f35f57\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://d24466b1816336ad3bc0233a08229fc858b6bb4647c2915e1445b0c6f8566665\",\"dweb:/ipfs/QmduZq8bLaQxJNqGSd6vVVtpSXWbgHz425XgcrxJD26mXn\"]},\"src/SigningRules.sol\":{\"keccak256\":\"0x716471a57954ec8de51db9f230a9d67a3dbcc813c9d3bf4d98818a0fe4fae6b7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://2addc929e6810a60080bc4e45d376d3cf06d9249afe6792f8aafe1a2419f3d84\",\"dweb:/ipfs/QmZcUXCYYSpKpKMZB36ha67qhDj23Xa2YNC5ry1rxMhWKM\"]},\"test/SigningRules.sol\":{\"keccak256\":\"0x6c12a54b117661065dc8d0764be0192e7ad6dfcfa01f090da2d77e54013ab758\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://2ea0c6a041801528c46920f572d0c064143756a1a29acab904e624beb098f9f8\",\"dweb:/ipfs/QmX19fGAw9hzBAYehFsAM4VtkhKjNbG8ZWSLANQXigbmgA\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes","name":"lowLevelData","type":"bytes","indexed":false}],"type":"event","name":"FailedHandlerExecution","anonymous":false},{"inputs":[{"internalType":"enum ProposalStatus","name":"status","type":"uint8","indexed":false},{"internalType":"bytes32","name":"proposalId","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32","indexed":false}],"type":"event","name":"ProposalEvent","anonymous":false},{"inputs":[{"internalType":"enum ProposalStatus","name":"status","type":"uint8","indexed":false},{"internalType":"bytes32","name":"proposalId","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32","indexed":false}],"type":"event","name":"ProposalVote","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_VOTERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"_proposals","outputs":[{"internalType":"enum ProposalStatus","name":"_status","type":"uint8"},{"internalType":"uint256","name":"_yesVotes","type":"uint256"},{"internalType":"uint8","name":"_yesVotesTotal","type":"uint8"},{"internalType":"uint40","name":"_proposedBlock","type":"uint40"}]},{"inputs":[{"internalType":"bytes32","name":"proposalId","type":"bytes32"},{"internalType":"address","name":"forwarder","type":"address"},{"internalType":"bool","name":"valid","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"adminSetForwarder"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"admins","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"bytes","name":"phase1JobDetails","type":"bytes"}],"stateMutability":"pure","type":"function","name":"calculatePhase1ProposalId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"proposalId","type":"bytes32"},{"internalType":"bytes","name":"phase2JobDetails","type":"bytes"}],"stateMutability":"pure","type":"function","name":"calculatePhase2JobHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"expiry","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getProposalState","outputs":[{"internalType":"enum ProposalStatus","name":"","type":"uint8"}]},{"inputs":[{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getProposalYesVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getProposalYesVotesTotal","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"bytes","name":"phase1JobDetails","type":"bytes"},{"internalType":"uint8","name":"_threshold","type":"uint8"},{"internalType":"bool","name":"_useDemocracy","type":"bool"},{"internalType":"address[]","name":"_voters","type":"address[]"},{"internalType":"uint64","name":"_expiry","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"isValidForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"phase1ProposalId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"refreshVoters"},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"bytes","name":"phase1JobDetails","type":"bytes"},{"internalType":"bytes","name":"phase2JobDetails","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"submitGovernanceProposal"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"threshold","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"useDemocracy","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"useValidators","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"bytes","name":"phase1JobDetails","type":"bytes"},{"internalType":"bytes","name":"phase2JobDetails","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"voteProposal"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"voters","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"adminSetForwarder(bytes32,address,bool)":{"params":{"forwarder":"Forwarder address to be added.","valid":"Decision for the specific forwarder."}},"refreshVoters(bytes32)":{"params":{"phase1ProposalId":"ID of the proposal to refresh voters for."}}},"version":1},"userdoc":{"kind":"user","methods":{"adminSetForwarder(bytes32,address,bool)":{"notice":"Set a forwarder to be used.Only callable by an address that currently has the admin role."},"getProposalState(bytes32)":{"notice":"--------------------------------------------------------------------------------------- /// -------------------------------------- Helpers ---------------------------------------- /// --------------------------------------------------------------------------------------- ///"},"refreshVoters(bytes32)":{"notice":"Refresh the list of voters for a proposal w/ validators"}},"version":1}},"settings":{"remappings":["forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/SigningRules.sol":"VotableSigningRules"},"evmVersion":"paris","libraries":{}},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c","urls":["bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224","dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0xf513292ab066e6017db48ca749c1e63a44dfc5cba0326fc65c718f96e029d361","urls":["bzz-raw://02d715ae2898f1fabd08133f80e6a7a3b87a2796ca5d23d1cb3fed9f4367f34c","dweb:/ipfs/QmfESqa4j3PQAvvdfrnDQ1xUH1TnVCfvZYHsAEDK8z4X4k"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0x9cc29c28f49d0b7f7b2f1aa32d8273f8a087bf62eb3fb22d893df824052c25ef","urls":["bzz-raw://42dcb36cb10b878a0d5b20ce3a4a3ba4f51f44d7731a66ac1133c699bc80b31b","dweb:/ipfs/QmY6q7SaHQMLBb3rS6xZdArPaXoskWeqF6oJwUeZ3gKLZj"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7","urls":["bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2","dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6","urls":["bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d","dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0x62bed173cb126f6d5006706cf249bac8a2d51bfa18f773f314784ff18adc622d","urls":["bzz-raw://5acc33dddbf2492e37dc32e89cd56ce917272d303a6874805f3a5768a6bfbf54","dweb:/ipfs/QmTsgFhcpUf16gAVazUXU3WspgX8nHke2hzVCvoqS25WEp"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0x651d84d948832f0ef45686417aa68ffb871378fa788a4123dbf37844903c66f3","urls":["bzz-raw://ff20f5ac9de3dc3ba86b1bf1f2723174e82ce3499ad67cb0ccfa7d28baeee678","dweb:/ipfs/QmRZkUFKz7AmF7yk6o317sk822HHhGVPXZQgX8G4LfYfft"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0xc8a57915ace96f5b6a85b57e57690fc038cad9034a3dc368c11828a3707c61ab","urls":["bzz-raw://fa880a1a6e5d94005dcf4811b4c0df8d9c06407017ae111bd351483e2b76a72d","dweb:/ipfs/QmcxkEE58gE1vDcZofTr8QpvdjXjgR72yYg7o4vTPSLCsy"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0","urls":["bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61","dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3b4bb409a156dee9ce261458117fe9f81080ca844a8a26c07c857c46d155effe","urls":["bzz-raw://5792c69fe24bdc063a14e08fe68275007fdb1e5e7e343840a77938cb7e95a64e","dweb:/ipfs/QmcAMhaurUwzhytJFYix4vRNeZeV8g27b8LnV3t7dvYtiK"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0x30d73c4fea34a791ad7334dd701df60fbb565c643556aadd6621e49e48895d1f","urls":["bzz-raw://be9cf80e55eff0f49ad0ab3c44214e56a3e53b5ecafe311a521f5472fa4bbf59","dweb:/ipfs/QmQHrZZoscvkfKSD2m6jhktrh8ieSLV2fg9DHGDHJiBkjT"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba","urls":["bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70","dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea","urls":["bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973","dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF"],"license":"MIT"},"lib/forge-std/src/interfaces/IERC165.sol":{"keccak256":"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600","urls":["bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc","dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT"],"license":"MIT"},"lib/forge-std/src/interfaces/IERC20.sol":{"keccak256":"0x4cab887298790f908c27de107e4e2907ca5413aee482ef776f8d2f353c5ef947","urls":["bzz-raw://bb715e0c4a2bdbe432bb624501506041f06e878e0b72675aebba30ad2c2b72e7","dweb:/ipfs/QmWhhLSvkxS2NrukJJHqFY8gDVE5r9rD4PfHvR24pwdKv9"],"license":"MIT"},"lib/forge-std/src/interfaces/IERC721.sol":{"keccak256":"0xf069262a264fdb69f8f37a10d2df7374649e9ba73f8414c9c8a3b51184625f15","urls":["bzz-raw://924a41ca82a68ffbd503a5faf2f76d13e9938f10501a71094716f12bb64b4b7f","dweb:/ipfs/QmdWnqfKc5ZGhmxNPTde4zrFchnv9Yk9MpCMb2rdhXE5gm"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/mocks/MockERC20.sol":{"keccak256":"0xadbdfc6639edec00ba94bb1133a0fd8de31ccafe45c2ef5df9b3ca61b60b559b","urls":["bzz-raw://bc766f01bccf669abac8cc7b2096cc1352a66471ca3772ae61b1801dedc4ed4f","dweb:/ipfs/QmNigaPj1LYkP7Z5xr4ijkUxr2K66fDGeoifG3WoM9ruyw"],"license":"MIT"},"lib/forge-std/src/mocks/MockERC721.sol":{"keccak256":"0x3293dcbb7acd28df553c954e4e39e288bf10aab7ecda8d50ef21b4f4a91a28d9","urls":["bzz-raw://9eb374daf6df34f4392f8926f1fddbce9f22c423066aeaefdfbe77395f77967b","dweb:/ipfs/QmWR81zBJRX2uyRjveGzikYPj6ZwKppWsU49YEQXTLWUsN"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381","urls":["bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae","dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq"],"license":"MIT"},"src/JobsPrecompileInterface.sol":{"keccak256":"0x3c8c4de2daa16ed74bd516ca4d2386041f400d2e0f8b9b48043af942b6f35f57","urls":["bzz-raw://d24466b1816336ad3bc0233a08229fc858b6bb4647c2915e1445b0c6f8566665","dweb:/ipfs/QmduZq8bLaQxJNqGSd6vVVtpSXWbgHz425XgcrxJD26mXn"],"license":"GPL-3.0-only"},"src/SigningRules.sol":{"keccak256":"0x716471a57954ec8de51db9f230a9d67a3dbcc813c9d3bf4d98818a0fe4fae6b7","urls":["bzz-raw://2addc929e6810a60080bc4e45d376d3cf06d9249afe6792f8aafe1a2419f3d84","dweb:/ipfs/QmZcUXCYYSpKpKMZB36ha67qhDj23Xa2YNC5ry1rxMhWKM"],"license":"UNLICENSED"},"test/SigningRules.sol":{"keccak256":"0x6c12a54b117661065dc8d0764be0192e7ad6dfcfa01f090da2d77e54013ab758","urls":["bzz-raw://2ea0c6a041801528c46920f572d0c064143756a1a29acab904e624beb098f9f8","dweb:/ipfs/QmX19fGAw9hzBAYehFsAM4VtkhKjNbG8ZWSLANQXigbmgA"],"license":"UNLICENSED"}},"version":1},"id":25} \ No newline at end of file +{"abi":[{"type":"function","name":"MAX_VOTERS","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"_proposals","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"_status","type":"uint8","internalType":"enum ProposalStatus"},{"name":"_yesVotes","type":"uint256","internalType":"uint256"},{"name":"_yesVotesTotal","type":"uint8","internalType":"uint8"},{"name":"_proposedBlock","type":"uint40","internalType":"uint40"}],"stateMutability":"view"},{"type":"function","name":"adminSetForwarder","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"forwarder","type":"address","internalType":"address"},{"name":"valid","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"admins","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"calculatePhase2JobHash","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"phase2JobDetails","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"expiry","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getProposalState","inputs":[{"name":"phase2JobHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"enum ProposalStatus"}],"stateMutability":"view"},{"type":"function","name":"getProposalYesVotes","inputs":[{"name":"phase2JobHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getProposalYesVotesTotal","inputs":[{"name":"phase2JobHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"_threshold","type":"uint8","internalType":"uint8"},{"name":"_useDemocracy","type":"bool","internalType":"bool"},{"name":"_voters","type":"address[]","internalType":"address[]"},{"name":"_expiry","type":"uint64","internalType":"uint64"},{"name":"_ttl","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialized","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isValidForwarder","inputs":[{"name":"","type":"uint64","internalType":"uint64"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"refreshVoters","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitGovernanceProposal","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"phase2JobDetails","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"threshold","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"ttl","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"useDemocracy","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"useValidators","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"voteProposal","inputs":[{"name":"phase1JobId","type":"uint64","internalType":"uint64"},{"name":"phase2JobDetails","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"voters","inputs":[{"name":"","type":"uint64","internalType":"uint64"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"FailedHandlerExecution","inputs":[{"name":"lowLevelData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ProposalEvent","inputs":[{"name":"status","type":"uint8","indexed":false,"internalType":"enum ProposalStatus"},{"name":"phase1JobId","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"phase2JobHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ProposalVote","inputs":[{"name":"status","type":"uint8","indexed":false,"internalType":"enum ProposalStatus"},{"name":"phase1JobId","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"phase2JobHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false}],"bytecode":{"object":"0x6080604052348015600f57600080fd5b506115808061001f6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80635b9a5eb7116100ad578063db56b93411610071578063db56b93414610359578063eea22ba21461036c578063f2e2af941461037f578063f768b74d146103d1578063f8d4858d146103fa57600080fd5b80635b9a5eb7146102ac57806368217337146102cf5780636a30ed1c146102e25780638a9a20931461030b578063a9b62d8d1461033657600080fd5b80631b35b0cc116100f45780631b35b0cc146101f0578063217d75ab146102165780633718acf8146102575780633ceed69214610282578063426c58631461029957600080fd5b806307ff4197146101315780630a704f481461016957806311f8dec614610199578063158ef93e146101ce57806319bddc61146101db575b600080fd5b61015461013f36600461100b565b60076020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61018c61017736600461102d565b60009081526008602052604090205460ff1690565b604051610160919061107e565b6101bc6101a736600461100b565b60036020526000908152604090205460ff1681565b60405160ff9091168152602001610160565b6009546101549060ff1681565b6101ee6101e936600461100b565b61040d565b005b6101bc6101fe36600461102d565b60009081526008602052604090206002015460ff1690565b61023f61022436600461100b565b6004602052600090815260409020546001600160401b031681565b6040516001600160401b039091168152602001610160565b6101546102653660046110a3565b600060208181529281526040808220909352908152205460ff1681565b61028b61010081565b604051908152602001610160565b6101ee6102a736600461111c565b61045c565b6101546102ba36600461100b565b60066020526000908152604090205460ff1681565b6101ee6102dd3660046111d1565b6104bc565b61023f6102f036600461100b565b6005602052600090815260409020546001600160401b031681565b61031e6103193660046112d9565b610641565b6040516001600160a01b039091168152602001610160565b61028b61034436600461102d565b60009081526008602052604090206001015490565b6101ee610367366004611303565b610679565b61028b61037a36600461111c565b6106fa565b6103c161038d36600461102d565b60086020526000908152604090208054600182015460029092015460ff9182169291811690610100900464ffffffffff1684565b6040516101609493929190611346565b61031e6103df36600461100b565b6001602052600090815260409020546001600160a01b031681565b6101ee61040836600461111c565b61072e565b6001600160401b03811660009081526001602052604090205481906001600160a01b031633146104585760405162461bcd60e51b815260040161044f90611379565b60405180910390fd5b5050565b6104668282610848565b6104b25760405162461bcd60e51b815260206004820152601860248201527f50726f706f73616c206d75737420626520766f7461626c650000000000000000604482015260640161044f565b61045882826108a4565b610100835111156105015760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e7920766f7465727360881b604482015260640161044f565b60095460ff161561054a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161044f565b60098054600160ff1991821681179092556001600160401b0388811660009081526003602090815260408083208054861660ff8d161790556006825280832080549095168a15151790945560048152838220805467ffffffffffffffff19908116898616179091556005825284832080549091169387169390931790925592905290208054336001600160a01b0319909116179055825115610615576001600160401b0386166000908152600260209081526040909120845161060f92860190610f75565b50610639565b6001600160401b0386166000908152600760205260409020805460ff191660011790555b505050505050565b6002602052816000526040600020818154811061065d57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6001600160401b03831660009081526001602052604090205483906001600160a01b031633146106bb5760405162461bcd60e51b815260040161044f90611379565b506001600160401b039092166000908152602081815260408083206001600160a01b03909416835292905220805491151560ff19909216919091179055565b6000828260405160200161070f9291906113de565b6040516020818303038152906040528051906020012090505b92915050565b600082826040516020016107439291906113de565b60408051601f1981840301815291905280516020909101209050600360008281526008602052604090205460ff16600481111561078257610782611046565b036107cf5760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206d7573742068617665206265656e206578656375746564604482015260640161044f565b6001600160401b03831660009081526006602052604090205460ff166108435760405162461bcd60e51b8152602060048201526024808201527f50726f706f73616c206d75737420616c6c6f77207573696e6720676f7665726e604482015263616e636560e01b606482015260840161044f565b505050565b6000815160000361089b5760405162461bcd60e51b815260206004820152601d60248201527f4a6f622064657461696c73206d757374206265206e6f6e2d656d707479000000604482015260640161044f565b50600192915050565b600082826040516020016108b99291906113de565b60408051601f1981840301815291815281516020928301206000818152600890935291209091506002815460ff1660048111156108f8576108f8611046565b0361090e57610908848385610d01565b50505050565b600061091985610e3c565b825490915060019060ff16600481111561093557610935611046565b111561098f5760405162461bcd60e51b815260206004820152602360248201527f70726f706f73616c20616c72656164792065786563757465642f63616e63656c6044820152621b195960ea1b606482015260840161044f565b61099a858483610e8e565b156109df5760405162461bcd60e51b81526020600482015260156024820152741c995b185e595c88185b1c9958591e481d9bdd1959605a1b604482015260640161044f565b6000825460ff1660048111156109f7576109f7611046565b03610acd576040805160808101909152806001815260006020808301829052604080840183905264ffffffffff4316606090940193909352868252600890522081518154829060ff19166001836004811115610a5557610a55611046565b021790555060208201516001808301919091556040808401516002909301805460609095015164ffffffffff166101000265ffffffffffff1990951660ff9094169390931793909317909155905160008051602061152b83398151915291610ac09188908790611413565b60405180910390a1610b48565b6001600160401b038581166000908152600460205260409020546002840154911690610b0590610100900464ffffffffff1643611451565b64ffffffffff161115610b4857815460ff19166004908117835560405160008051602061152b83398151915291610b3f9188908790611413565b60405180910390a15b6004825460ff166004811115610b6057610b60611046565b14610c5557610b6f8582610eb8565b60018301805491909117905560028201805460ff16906000610b9083611464565b91906101000a81548160ff021916908360ff160217905550507f20ff4a81542c924d8f65d7ab8727f9e352b64f288a402ace0a5e7edb68c247db8260000160009054906101000a900460ff168685604051610bed93929190611413565b60405180910390a16001600160401b038516600090815260036020526040902054600283015460ff918216911610610c5557815460ff19166002908117835560405160008051602061152b83398151915291610c4c9188908790611413565b60405180910390a15b60008381526008602052604090208254815484929160ff1690829060ff19166001836004811115610c8857610c88611046565b02179055506001828101549082015560029182018054918301805460ff19811660ff9094169384178255915464ffffffffff61010091829004160265ffffffffffff19909216909217179055825460ff166004811115610cea57610cea611046565b03610cfa57610cfa858486610d01565b5050505050565b60008281526008602052604090206002815460ff166004811115610d2757610d27611046565b14610d745760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206d75737420686176652050617373656420737461747573604482015260640161044f565b6001600160401b038085166000908152600460208181526040808420546005835281852054825193840183529483529051631075334160e01b815261081495631075334195610dcf95938216949116928b928a9291016114af565b600060405180830381600087803b158015610de957600080fd5b505af1158015610dfd573d6000803e3d6000fd5b5050825460ff19166003908117845560405160008051602061152b8339815191529350610e2e925087908790611413565b60405180910390a150505050565b60003360143610801590610e7a57506001600160401b0383166000908152602081815260408083206001600160a01b038516845290915290205460ff165b156107285750505036601319013560601c90565b600082815260086020526040812060018101548290610ead8786610eb8565b161195945050505050565b60006001610ec68484610edb565b610ed09190611451565b6001901b9392505050565b6000805b6001600160401b038416600090815260026020526040902054811015610f6a576001600160401b038416600090815260026020526040902080546001600160a01b038516919083908110610f3557610f35611501565b6000918252602090912001546001600160a01b031603610f6257610f5a816001611517565b915050610728565b600101610edf565b506101009392505050565b828054828255906000526020600020908101928215610fca579160200282015b82811115610fca57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610f95565b50610fd6929150610fda565b5090565b5b80821115610fd65760008155600101610fdb565b80356001600160401b038116811461100657600080fd5b919050565b60006020828403121561101d57600080fd5b61102682610fef565b9392505050565b60006020828403121561103f57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6005811061107a57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610728828461105c565b80356001600160a01b038116811461100657600080fd5b600080604083850312156110b657600080fd5b6110bf83610fef565b91506110cd6020840161108c565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611114576111146110d6565b604052919050565b6000806040838503121561112f57600080fd5b61113883610fef565b91506020808401356001600160401b038082111561115557600080fd5b818601915086601f83011261116957600080fd5b81358181111561117b5761117b6110d6565b61118d601f8201601f191685016110ec565b915080825287848285010111156111a357600080fd5b80848401858401376000848284010152508093505050509250929050565b8035801515811461100657600080fd5b60008060008060008060c087890312156111ea57600080fd5b6111f387610fef565b955060208088013560ff8116811461120a57600080fd5b9550611218604089016111c1565b945060608801356001600160401b038082111561123457600080fd5b818a0191508a601f83011261124857600080fd5b81358181111561125a5761125a6110d6565b8060051b915061126b8483016110ec565b818152918301840191848101908d84111561128557600080fd5b938501935b838510156112aa5761129b8561108c565b8252938501939085019061128a565b8098505050505050506112bf60808801610fef565b91506112cd60a08801610fef565b90509295509295509295565b600080604083850312156112ec57600080fd5b6112f583610fef565b946020939093013593505050565b60008060006060848603121561131857600080fd5b61132184610fef565b925061132f6020850161108c565b915061133d604085016111c1565b90509250925092565b60808101611354828761105c565b84602083015260ff8416604083015264ffffffffff8316606083015295945050505050565b60208082526021908201527f4f6e6c792061646d696e2063616e2063616c6c20746869732066756e6374696f6040820152603760f91b606082015260800190565b60005b838110156113d55781810151838201526020016113bd565b50506000910152565b6001600160401b0360c01b8360c01b168152600082516114058160088501602087016113ba565b919091016008019392505050565b60608101611421828661105c565b6001600160401b0393909316602082015260400152919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107285761072861143b565b600060ff821660ff810361147a5761147a61143b565b60010192915050565b6000815180845261149b8160208601602086016113ba565b601f01601f19169290920160200192915050565b60006001600160401b038088168352808716602084015280861660408401525060a060608301526114e360a0830185611483565b82810360808401526114f58185611483565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b808201808211156107285761072861143b56fe1da747736e36d4b28919e58cfcb847754a7604d8afb51c6123b35214eee0b48ba26469706673582212205513ab92e5f3e7b9830a1c5dc0b06ceb3ed61b23ee9454b5437b8396b09ad52c64736f6c63430008190033","sourceMap":"230:513:25:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80635b9a5eb7116100ad578063db56b93411610071578063db56b93414610359578063eea22ba21461036c578063f2e2af941461037f578063f768b74d146103d1578063f8d4858d146103fa57600080fd5b80635b9a5eb7146102ac57806368217337146102cf5780636a30ed1c146102e25780638a9a20931461030b578063a9b62d8d1461033657600080fd5b80631b35b0cc116100f45780631b35b0cc146101f0578063217d75ab146102165780633718acf8146102575780633ceed69214610282578063426c58631461029957600080fd5b806307ff4197146101315780630a704f481461016957806311f8dec614610199578063158ef93e146101ce57806319bddc61146101db575b600080fd5b61015461013f36600461100b565b60076020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61018c61017736600461102d565b60009081526008602052604090205460ff1690565b604051610160919061107e565b6101bc6101a736600461100b565b60036020526000908152604090205460ff1681565b60405160ff9091168152602001610160565b6009546101549060ff1681565b6101ee6101e936600461100b565b61040d565b005b6101bc6101fe36600461102d565b60009081526008602052604090206002015460ff1690565b61023f61022436600461100b565b6004602052600090815260409020546001600160401b031681565b6040516001600160401b039091168152602001610160565b6101546102653660046110a3565b600060208181529281526040808220909352908152205460ff1681565b61028b61010081565b604051908152602001610160565b6101ee6102a736600461111c565b61045c565b6101546102ba36600461100b565b60066020526000908152604090205460ff1681565b6101ee6102dd3660046111d1565b6104bc565b61023f6102f036600461100b565b6005602052600090815260409020546001600160401b031681565b61031e6103193660046112d9565b610641565b6040516001600160a01b039091168152602001610160565b61028b61034436600461102d565b60009081526008602052604090206001015490565b6101ee610367366004611303565b610679565b61028b61037a36600461111c565b6106fa565b6103c161038d36600461102d565b60086020526000908152604090208054600182015460029092015460ff9182169291811690610100900464ffffffffff1684565b6040516101609493929190611346565b61031e6103df36600461100b565b6001602052600090815260409020546001600160a01b031681565b6101ee61040836600461111c565b61072e565b6001600160401b03811660009081526001602052604090205481906001600160a01b031633146104585760405162461bcd60e51b815260040161044f90611379565b60405180910390fd5b5050565b6104668282610848565b6104b25760405162461bcd60e51b815260206004820152601860248201527f50726f706f73616c206d75737420626520766f7461626c650000000000000000604482015260640161044f565b61045882826108a4565b610100835111156105015760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e7920766f7465727360881b604482015260640161044f565b60095460ff161561054a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161044f565b60098054600160ff1991821681179092556001600160401b0388811660009081526003602090815260408083208054861660ff8d161790556006825280832080549095168a15151790945560048152838220805467ffffffffffffffff19908116898616179091556005825284832080549091169387169390931790925592905290208054336001600160a01b0319909116179055825115610615576001600160401b0386166000908152600260209081526040909120845161060f92860190610f75565b50610639565b6001600160401b0386166000908152600760205260409020805460ff191660011790555b505050505050565b6002602052816000526040600020818154811061065d57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6001600160401b03831660009081526001602052604090205483906001600160a01b031633146106bb5760405162461bcd60e51b815260040161044f90611379565b506001600160401b039092166000908152602081815260408083206001600160a01b03909416835292905220805491151560ff19909216919091179055565b6000828260405160200161070f9291906113de565b6040516020818303038152906040528051906020012090505b92915050565b600082826040516020016107439291906113de565b60408051601f1981840301815291905280516020909101209050600360008281526008602052604090205460ff16600481111561078257610782611046565b036107cf5760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206d7573742068617665206265656e206578656375746564604482015260640161044f565b6001600160401b03831660009081526006602052604090205460ff166108435760405162461bcd60e51b8152602060048201526024808201527f50726f706f73616c206d75737420616c6c6f77207573696e6720676f7665726e604482015263616e636560e01b606482015260840161044f565b505050565b6000815160000361089b5760405162461bcd60e51b815260206004820152601d60248201527f4a6f622064657461696c73206d757374206265206e6f6e2d656d707479000000604482015260640161044f565b50600192915050565b600082826040516020016108b99291906113de565b60408051601f1981840301815291815281516020928301206000818152600890935291209091506002815460ff1660048111156108f8576108f8611046565b0361090e57610908848385610d01565b50505050565b600061091985610e3c565b825490915060019060ff16600481111561093557610935611046565b111561098f5760405162461bcd60e51b815260206004820152602360248201527f70726f706f73616c20616c72656164792065786563757465642f63616e63656c6044820152621b195960ea1b606482015260840161044f565b61099a858483610e8e565b156109df5760405162461bcd60e51b81526020600482015260156024820152741c995b185e595c88185b1c9958591e481d9bdd1959605a1b604482015260640161044f565b6000825460ff1660048111156109f7576109f7611046565b03610acd576040805160808101909152806001815260006020808301829052604080840183905264ffffffffff4316606090940193909352868252600890522081518154829060ff19166001836004811115610a5557610a55611046565b021790555060208201516001808301919091556040808401516002909301805460609095015164ffffffffff166101000265ffffffffffff1990951660ff9094169390931793909317909155905160008051602061152b83398151915291610ac09188908790611413565b60405180910390a1610b48565b6001600160401b038581166000908152600460205260409020546002840154911690610b0590610100900464ffffffffff1643611451565b64ffffffffff161115610b4857815460ff19166004908117835560405160008051602061152b83398151915291610b3f9188908790611413565b60405180910390a15b6004825460ff166004811115610b6057610b60611046565b14610c5557610b6f8582610eb8565b60018301805491909117905560028201805460ff16906000610b9083611464565b91906101000a81548160ff021916908360ff160217905550507f20ff4a81542c924d8f65d7ab8727f9e352b64f288a402ace0a5e7edb68c247db8260000160009054906101000a900460ff168685604051610bed93929190611413565b60405180910390a16001600160401b038516600090815260036020526040902054600283015460ff918216911610610c5557815460ff19166002908117835560405160008051602061152b83398151915291610c4c9188908790611413565b60405180910390a15b60008381526008602052604090208254815484929160ff1690829060ff19166001836004811115610c8857610c88611046565b02179055506001828101549082015560029182018054918301805460ff19811660ff9094169384178255915464ffffffffff61010091829004160265ffffffffffff19909216909217179055825460ff166004811115610cea57610cea611046565b03610cfa57610cfa858486610d01565b5050505050565b60008281526008602052604090206002815460ff166004811115610d2757610d27611046565b14610d745760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206d75737420686176652050617373656420737461747573604482015260640161044f565b6001600160401b038085166000908152600460208181526040808420546005835281852054825193840183529483529051631075334160e01b815261081495631075334195610dcf95938216949116928b928a9291016114af565b600060405180830381600087803b158015610de957600080fd5b505af1158015610dfd573d6000803e3d6000fd5b5050825460ff19166003908117845560405160008051602061152b8339815191529350610e2e925087908790611413565b60405180910390a150505050565b60003360143610801590610e7a57506001600160401b0383166000908152602081815260408083206001600160a01b038516845290915290205460ff165b156107285750505036601319013560601c90565b600082815260086020526040812060018101548290610ead8786610eb8565b161195945050505050565b60006001610ec68484610edb565b610ed09190611451565b6001901b9392505050565b6000805b6001600160401b038416600090815260026020526040902054811015610f6a576001600160401b038416600090815260026020526040902080546001600160a01b038516919083908110610f3557610f35611501565b6000918252602090912001546001600160a01b031603610f6257610f5a816001611517565b915050610728565b600101610edf565b506101009392505050565b828054828255906000526020600020908101928215610fca579160200282015b82811115610fca57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610f95565b50610fd6929150610fda565b5090565b5b80821115610fd65760008155600101610fdb565b80356001600160401b038116811461100657600080fd5b919050565b60006020828403121561101d57600080fd5b61102682610fef565b9392505050565b60006020828403121561103f57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6005811061107a57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610728828461105c565b80356001600160a01b038116811461100657600080fd5b600080604083850312156110b657600080fd5b6110bf83610fef565b91506110cd6020840161108c565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611114576111146110d6565b604052919050565b6000806040838503121561112f57600080fd5b61113883610fef565b91506020808401356001600160401b038082111561115557600080fd5b818601915086601f83011261116957600080fd5b81358181111561117b5761117b6110d6565b61118d601f8201601f191685016110ec565b915080825287848285010111156111a357600080fd5b80848401858401376000848284010152508093505050509250929050565b8035801515811461100657600080fd5b60008060008060008060c087890312156111ea57600080fd5b6111f387610fef565b955060208088013560ff8116811461120a57600080fd5b9550611218604089016111c1565b945060608801356001600160401b038082111561123457600080fd5b818a0191508a601f83011261124857600080fd5b81358181111561125a5761125a6110d6565b8060051b915061126b8483016110ec565b818152918301840191848101908d84111561128557600080fd5b938501935b838510156112aa5761129b8561108c565b8252938501939085019061128a565b8098505050505050506112bf60808801610fef565b91506112cd60a08801610fef565b90509295509295509295565b600080604083850312156112ec57600080fd5b6112f583610fef565b946020939093013593505050565b60008060006060848603121561131857600080fd5b61132184610fef565b925061132f6020850161108c565b915061133d604085016111c1565b90509250925092565b60808101611354828761105c565b84602083015260ff8416604083015264ffffffffff8316606083015295945050505050565b60208082526021908201527f4f6e6c792061646d696e2063616e2063616c6c20746869732066756e6374696f6040820152603760f91b606082015260800190565b60005b838110156113d55781810151838201526020016113bd565b50506000910152565b6001600160401b0360c01b8360c01b168152600082516114058160088501602087016113ba565b919091016008019392505050565b60608101611421828661105c565b6001600160401b0393909316602082015260400152919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107285761072861143b565b600060ff821660ff810361147a5761147a61143b565b60010192915050565b6000815180845261149b8160208601602086016113ba565b601f01601f19169290920160200192915050565b60006001600160401b038088168352808716602084015280861660408401525060a060608301526114e360a0830185611483565b82810360808401526114f58185611483565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b808201808211156107285761072861143b56fe1da747736e36d4b28919e58cfcb847754a7604d8afb51c6123b35214eee0b48ba26469706673582212205513ab92e5f3e7b9830a1c5dc0b06ceb3ed61b23ee9454b5437b8396b09ad52c64736f6c63430008190033","sourceMap":"230:513:25:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;799:45:24;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;544:14:26;;537:22;519:41;;507:2;492:18;799:45:24;;;;;;;;10118:143;;;;;;:::i;:::-;10188:14;10221:25;;;:10;:25;;;;;:33;;;;10118:143;;;;;;;;:::i;612:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1531:4:26;1519:17;;;1501:36;;1489:2;1474:18;612:42:24;1359:184:26;960:23:24;;;;;;;;;2855:117;;;;;;:::i;:::-;;:::i;:::-;;10418:149;;;;;;:::i;:::-;10496:5;10520:25;;;:10;:25;;;;;:40;;;;;;10418:149;660:40;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;660:40:24;;;;;;-1:-1:-1;;;;;1710:31:26;;;1692:50;;1680:2;1665:18;660:40:24;1548:200:26;441:69:24;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1059:40;;1096:3;1059:40;;;;;2340:25:26;;;2328:2;2313:18;1059:40:24;2194:177:26;3932:435:24;;;;;;:::i;:::-;;:::i;749:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1752:956;;;;;;:::i;:::-;;:::i;706:37::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;706:37:24;;;563:43;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5615:32:26;;;5597:51;;5585:2;5570:18;563:43:24;5451:203:26;10267:141:24;;;;;;:::i;:::-;10340:7;10366:25;;;:10;:25;;;;;:35;;;;10267:141;3215:175;;;;;;:::i;:::-;;:::i;1551:195::-;;;;;;:::i;:::-;;:::i;907:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;516:41::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;516:41:24;;;3393:536;;;;;;:::i;:::-;;:::i;2855:117::-;-1:-1:-1;;;;;1464:10:24;;;;;;:6;:10;;;;;;2915:11;;-1:-1:-1;;;;;1464:10:24;1478;1464:24;1456:70;;;;-1:-1:-1;;;1456:70:24;;;;;;;:::i;:::-;;;;;;;;;2855:117;;:::o;3932:435::-;4062:49;4081:11;4094:16;4062:18;:49::i;:::-;4054:86;;;;-1:-1:-1;;;4054:86:24;;7238:2:26;4054:86:24;;;7220:21:26;7277:2;7257:18;;;7250:30;7316:26;7296:18;;;7289:54;7360:18;;4054:86:24;7036:348:26;4054:86:24;4318:45;4332:11;4345:16;4318:13;:45::i;1752:956::-;1096:3;1966:7;:14;:28;;1958:56;;;;-1:-1:-1;;;1958:56:24;;7591:2:26;1958:56:24;;;7573:21:26;7630:2;7610:18;;;7603:30;-1:-1:-1;;;7649:18:26;;;7642:45;7704:18;;1958:56:24;7389:339:26;1958:56:24;2032:11;;;;:20;2024:52;;;;-1:-1:-1;;;2024:52:24;;7935:2:26;2024:52:24;;;7917:21:26;7974:2;7954:18;;;7947:30;-1:-1:-1;;;7993:18:26;;;7986:49;8052:18;;2024:52:24;7733:343:26;2024:52:24;2086:11;:18;;2100:4;-1:-1:-1;;2086:18:24;;;;;;;;-1:-1:-1;;;;;2173:22:24;;;-1:-1:-1;2173:22:24;;;:9;:22;;;;;;;;:35;;;;2086:18;2173:35;;;;;2218:12;:25;;;;;:41;;;;;;;;;;;;2269:6;:19;;;;;:29;;-1:-1:-1;;2269:29:24;;;;;;;;;;2308:3;:16;;;;;:23;;;;;;;;;;;;;;;2341:19;;;;;:32;;2363:10;-1:-1:-1;;;;;;2341:32:24;;;;;;2440:14;;:18;2436:266;;-1:-1:-1;;;;;2474:19:24;;;;;;:6;:19;;;;;;;;:29;;;;;;;;:::i;:::-;;2436:266;;;-1:-1:-1;;;;;2617:26:24;;;;;;:13;:26;;;;;:33;;-1:-1:-1;;2617:33:24;2646:4;2617:33;;;2664:27;1752:956;;;;;;:::o;563:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;563:43:24;;-1:-1:-1;563:43:24;;-1:-1:-1;563:43:24:o;3215:175::-;-1:-1:-1;;;;;1464:10:24;;;;;;:6;:10;;;;;;3312:11;;-1:-1:-1;;;;;1464:10:24;1478;1464:24;1456:70;;;;-1:-1:-1;;;1456:70:24;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3335:29:24;;::::1;:16;:29:::0;;;::::1;::::0;;;;;;;-1:-1:-1;;;;;3335:40:24;;::::1;::::0;;;;;;:48;;;::::1;;-1:-1:-1::0;;3335:48:24;;::::1;::::0;;;::::1;::::0;;3215:175::o;1551:195::-;1655:7;1708:11;1721:16;1691:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1681:58;;;;;;1674:65;;1551:195;;;;;:::o;3393:536::-;3533:21;3584:11;3597:16;3567:47;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3567:47:24;;;;;;;;;3557:58;;3567:47;3557:58;;;;;-1:-1:-1;3670:23:24;3633:25;;;;:10;:25;;;;;:33;;;:60;;;;;;;;:::i;:::-;;3625:105;;;;-1:-1:-1;;;3625:105:24;;8945:2:26;3625:105:24;;;8927:21:26;;;8964:18;;;8957:30;9023:34;9003:18;;;8996:62;9075:18;;3625:105:24;8743:356:26;3625:105:24;-1:-1:-1;;;;;3748:25:24;;;;;;:12;:25;;;;;;;;3740:74;;;;-1:-1:-1;;;3740:74:24;;9306:2:26;3740:74:24;;;9288:21:26;9345:2;9325:18;;;9318:30;9384:34;9364:18;;;9357:62;-1:-1:-1;;;9435:18:26;;;9428:34;9479:19;;3740:74:24;9104:400:26;3740:74:24;3485:444;3393:536;;:::o;281:225:25:-;392:4;416:16;:23;443:1;416:28;408:70;;;;-1:-1:-1;;;408:70:25;;9711:2:26;408:70:25;;;9693:21:26;9750:2;9730:18;;;9723:30;9789:31;9769:18;;;9762:59;9838:18;;408:70:25;9509:353:26;408:70:25;-1:-1:-1;495:4:25;281:225;;;;:::o;5041:2262:24:-;5134:21;5185:11;5198:16;5168:47;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5168:47:24;;;;;;;;;5158:58;;5168:47;5158:58;;;;5226:25;5254;;;:10;:25;;;;;5158:58;;-1:-1:-1;5313:21:24;5293:16;;;;:41;;;;;;;;:::i;:::-;;5289:156;;5350:64;5368:11;5381:13;5396:16;5350;:64::i;:::-;5428:7;;5041:2262;;:::o;5289:156::-;5463:14;5480:23;5491:11;5480:10;:23::i;:::-;5535:16;;5463:40;;-1:-1:-1;5556:1:24;;5535:16;;5530:22;;;;;;;;:::i;:::-;:27;;5522:75;;;;-1:-1:-1;;;5522:75:24;;10069:2:26;5522:75:24;;;10051:21:26;10108:2;10088:18;;;10081:30;10147:34;10127:18;;;10120:62;-1:-1:-1;;;10198:18:26;;;10191:33;10241:19;;5522:75:24;9867:399:26;5522:75:24;5616:45;5626:11;5639:13;5654:6;5616:9;:45::i;:::-;5615:46;5607:80;;;;-1:-1:-1;;;5607:80:24;;10473:2:26;5607:80:24;;;10455:21:26;10512:2;10492:18;;;10485:30;-1:-1:-1;;;10531:18:26;;;10524:51;10592:18;;5607:80:24;10271:345:26;5607:80:24;5722:23;5702:16;;;;:43;;;;;;;;:::i;:::-;;5698:798;;5789:219;;;;;;;;;;5826:21;5789:219;;5877:1;5789:219;;;;;;;;;;;;;;;5956:12;5789:219;;;;;;;;;5761:25;;;:10;:25;;;:247;;;;:25;;-1:-1:-1;;5761:247:24;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;5761:247:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5761:247:24;;;;;;;;;;;;;;;;;;6028:64;;-1:-1:-1;;;;;;;;;;;6028:64:24;;;6065:11;;6078:13;;6028:64;:::i;:::-;;;;;;;;5698:798;;;-1:-1:-1;;;;;6162:19:24;;;;;;;:6;:19;;;;;;6135:23;;;;6162:19;;;6120:38;;6162:19;6135:23;;;;6120:12;:38;:::i;:::-;6113:68;;;6109:387;;;6355:43;;-1:-1:-1;;6355:43:24;6374:24;6355:43;;;;;6418:67;;-1:-1:-1;;;;;;;;;;;6418:67:24;;;6458:11;;6471:13;;6418:67;:::i;:::-;;;;;;;;6109:387;6530:24;6510:16;;;;:44;;;;;;;;:::i;:::-;;6506:600;;6613:30;6623:11;6636:6;6613:9;:30::i;:::-;6592:18;;;;;:51;;;;6570:74;;6658:23;;;:25;;;;;-1:-1:-1;6658:25:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;6746:58;6759:8;:16;;;;;;;;;;;;6777:11;6790:13;6746:58;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;6912:22:24;;;;;;:9;:22;;;;;;6885:23;;;;6912:22;;;;6885:23;;:49;6881:215;;6954:40;;-1:-1:-1;;6954:40:24;6973:21;6954:40;;;;;7017:64;;-1:-1:-1;;;;;;;;;;;7017:64:24;;;7054:11;;7067:13;;7017:64;:::i;:::-;;;;;;;;6881:215;7115:25;;;;:10;:25;;;;;:36;;;;7143:8;;7115:25;:36;;;:25;;-1:-1:-1;;7115:36:24;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;7115:36:24;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7115:36:24;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7115:36:24;;;;;;;;;7166:16;;;;:41;;;;;;;;:::i;:::-;;7162:135;;7223:63;7240:11;7253:13;7268:16;7223;:63::i;:::-;5124:2179;;;5041:2262;;:::o;7612:551::-;7731:25;7759;;;:10;:25;;;;;7822:21;7802:16;;;;:41;;;;;;;;:::i;:::-;;7794:86;;;;-1:-1:-1;;;7794:86:24;;11657:2:26;7794:86:24;;;11639:21:26;;;11676:18;;;11669:30;11735:34;11715:18;;;11708:62;11787:18;;7794:86:24;11455:356:26;7794:86:24;-1:-1:-1;;;;;7934:19:24;;;;;;;:6;:19;;;;;;;;;7955:3;:16;;;;;;8004:9;;;;;;;;;;7899:115;;-1:-1:-1;;;7899:115:24;;137:42:23;;7899:34:24;;:115;;7934:19;;;;7955:16;;;7941:11;;7986:16;;8004:9;7899:115;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8033:42:24;;-1:-1:-1;;8033:42:24;8052:23;8033:42;;;;;8090:66;;-1:-1:-1;;;;;;;;;;;8090:66:24;-1:-1:-1;8090:66:24;;-1:-1:-1;8129:11:24;;8142:13;;8090:66;:::i;:::-;;;;;;;;7721:442;7612:551;;;:::o;8883:337::-;8946:7;8982:10;9025:2;9006:8;:21;;;;:62;;-1:-1:-1;;;;;;9031:29:24;;:16;:29;;;;;;;;;;;-1:-1:-1;;;;;9031:37:24;;;;;;;;;;;;9006:62;9002:189;;;-1:-1:-1;;;9146:14:24;-1:-1:-1;;9142:23:24;9129:37;9125:2;9121:46;;8883:337::o;8623:254::-;8722:4;8766:25;;;:10;:25;;;;;8846:18;;;;8722:4;;8809:29;8819:11;8832:5;8809:9;:29::i;:::-;:56;8808:62;;8623:254;-1:-1:-1;;;;;8623:254:24:o;8463:154::-;8539:4;8608:1;8574:31;8586:11;8599:5;8574:11;:31::i;:::-;:35;;;;:::i;:::-;8567:1;8562:48;;;8463:154;-1:-1:-1;;;8463:154:24:o;8169:288::-;8248:4;;8264:160;-1:-1:-1;;;;;8285:19:24;;;;;;:6;:19;;;;;:26;8281:30;;8264:160;;;-1:-1:-1;;;;;8336:19:24;;;;;;:6;:19;;;;;:22;;-1:-1:-1;;;;;8336:31:24;;;:19;8356:1;;8336:22;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;8336:22:24;:31;8332:82;;8394:5;:1;8398;8394:5;:::i;:::-;8387:12;;;;;8332:82;8313:3;;8264:160;;;-1:-1:-1;1096:3:24;;8169:288;-1:-1:-1;;;8169:288:24:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:171:26;81:20;;-1:-1:-1;;;;;130:30:26;;120:41;;110:69;;175:1;172;165:12;110:69;14:171;;;:::o;190:184::-;248:6;301:2;289:9;280:7;276:23;272:32;269:52;;;317:1;314;307:12;269:52;340:28;358:9;340:28;:::i;:::-;330:38;190:184;-1:-1:-1;;;190:184:26:o;571:180::-;630:6;683:2;671:9;662:7;658:23;654:32;651:52;;;699:1;696;689:12;651:52;-1:-1:-1;722:23:26;;571:180;-1:-1:-1;571:180:26:o;756:127::-;817:10;812:3;808:20;805:1;798:31;848:4;845:1;838:15;872:4;869:1;862:15;888:242;974:1;967:5;964:12;954:143;;1019:10;1014:3;1010:20;1007:1;1000:31;1054:4;1051:1;1044:15;1082:4;1079:1;1072:15;954:143;1106:18;;888:242::o;1135:219::-;1287:2;1272:18;;1299:49;1276:9;1330:6;1299:49;:::i;1753:173::-;1821:20;;-1:-1:-1;;;;;1870:31:26;;1860:42;;1850:70;;1916:1;1913;1906:12;1931:258;1998:6;2006;2059:2;2047:9;2038:7;2034:23;2030:32;2027:52;;;2075:1;2072;2065:12;2027:52;2098:28;2116:9;2098:28;:::i;:::-;2088:38;;2145;2179:2;2168:9;2164:18;2145:38;:::i;:::-;2135:48;;1931:258;;;;;:::o;2376:127::-;2437:10;2432:3;2428:20;2425:1;2418:31;2468:4;2465:1;2458:15;2492:4;2489:1;2482:15;2508:275;2579:2;2573:9;2644:2;2625:13;;-1:-1:-1;;2621:27:26;2609:40;;-1:-1:-1;;;;;2664:34:26;;2700:22;;;2661:62;2658:88;;;2726:18;;:::i;:::-;2762:2;2755:22;2508:275;;-1:-1:-1;2508:275:26:o;2788:835::-;2864:6;2872;2925:2;2913:9;2904:7;2900:23;2896:32;2893:52;;;2941:1;2938;2931:12;2893:52;2964:28;2982:9;2964:28;:::i;:::-;2954:38;;3011:2;3064;3053:9;3049:18;3036:32;-1:-1:-1;;;;;3128:2:26;3120:6;3117:14;3114:34;;;3144:1;3141;3134:12;3114:34;3182:6;3171:9;3167:22;3157:32;;3227:7;3220:4;3216:2;3212:13;3208:27;3198:55;;3249:1;3246;3239:12;3198:55;3285:2;3272:16;3307:2;3303;3300:10;3297:36;;;3313:18;;:::i;:::-;3355:53;3398:2;3379:13;;-1:-1:-1;;3375:27:26;3371:36;;3355:53;:::i;:::-;3342:66;;3431:2;3424:5;3417:17;3471:7;3466:2;3461;3457;3453:11;3449:20;3446:33;3443:53;;;3492:1;3489;3482:12;3443:53;3547:2;3542;3538;3534:11;3529:2;3522:5;3518:14;3505:45;3591:1;3586:2;3581;3574:5;3570:14;3566:23;3559:34;;3612:5;3602:15;;;;;2788:835;;;;;:::o;3628:160::-;3693:20;;3749:13;;3742:21;3732:32;;3722:60;;3778:1;3775;3768:12;3793:1396;3914:6;3922;3930;3938;3946;3954;4007:3;3995:9;3986:7;3982:23;3978:33;3975:53;;;4024:1;4021;4014:12;3975:53;4047:28;4065:9;4047:28;:::i;:::-;4037:38;;4094:2;4146;4135:9;4131:18;4118:32;4190:4;4183:5;4179:16;4172:5;4169:27;4159:55;;4210:1;4207;4200:12;4159:55;4233:5;-1:-1:-1;4257:35:26;4288:2;4273:18;;4257:35;:::i;:::-;4247:45;;4343:2;4332:9;4328:18;4315:32;-1:-1:-1;;;;;4407:2:26;4399:6;4396:14;4393:34;;;4423:1;4420;4413:12;4393:34;4461:6;4450:9;4446:22;4436:32;;4506:7;4499:4;4495:2;4491:13;4487:27;4477:55;;4528:1;4525;4518:12;4477:55;4564:2;4551:16;4586:2;4582;4579:10;4576:36;;;4592:18;;:::i;:::-;4638:2;4635:1;4631:10;4621:20;;4661:28;4685:2;4681;4677:11;4661:28;:::i;:::-;4723:15;;;4793:11;;;4789:20;;;4754:12;;;;4821:19;;;4818:39;;;4853:1;4850;4843:12;4818:39;4877:11;;;;4897:148;4913:6;4908:3;4905:15;4897:148;;;4979:23;4998:3;4979:23;:::i;:::-;4967:36;;4930:12;;;;5023;;;;4897:148;;;5064:5;5054:15;;;;;;;;5088:38;5121:3;5110:9;5106:19;5088:38;:::i;:::-;5078:48;;5145:38;5178:3;5167:9;5163:19;5145:38;:::i;:::-;5135:48;;3793:1396;;;;;;;;:::o;5194:252::-;5261:6;5269;5322:2;5310:9;5301:7;5297:23;5293:32;5290:52;;;5338:1;5335;5328:12;5290:52;5361:28;5379:9;5361:28;:::i;:::-;5351:38;5436:2;5421:18;;;;5408:32;;-1:-1:-1;;;5194:252:26:o;5659:326::-;5732:6;5740;5748;5801:2;5789:9;5780:7;5776:23;5772:32;5769:52;;;5817:1;5814;5807:12;5769:52;5840:28;5858:9;5840:28;:::i;:::-;5830:38;;5887;5921:2;5910:9;5906:18;5887:38;:::i;:::-;5877:48;;5944:35;5975:2;5964:9;5960:18;5944:35;:::i;:::-;5934:45;;5659:326;;;;;:::o;6172:457::-;6402:3;6387:19;;6415:49;6391:9;6446:6;6415:49;:::i;:::-;6500:6;6495:2;6484:9;6480:18;6473:34;6555:4;6547:6;6543:17;6538:2;6527:9;6523:18;6516:45;6609:12;6601:6;6597:25;6592:2;6581:9;6577:18;6570:53;6172:457;;;;;;;:::o;6634:397::-;6836:2;6818:21;;;6875:2;6855:18;;;6848:30;6914:34;6909:2;6894:18;;6887:62;-1:-1:-1;;;6980:2:26;6965:18;;6958:31;7021:3;7006:19;;6634:397::o;8081:250::-;8166:1;8176:113;8190:6;8187:1;8184:13;8176:113;;;8266:11;;;8260:18;8247:11;;;8240:39;8212:2;8205:10;8176:113;;;-1:-1:-1;;8323:1:26;8305:16;;8298:27;8081:250::o;8336:402::-;-1:-1:-1;;;;;8547:3:26;8543:28;8534:6;8529:3;8525:16;8521:51;8516:3;8509:64;8491:3;8602:6;8596:13;8618:74;8685:6;8681:1;8676:3;8672:11;8665:4;8657:6;8653:17;8618:74;:::i;:::-;8712:16;;;;8730:1;8708:24;;8336:402;-1:-1:-1;;;8336:402:26:o;10621:384::-;10827:2;10812:18;;10839:49;10816:9;10870:6;10839:49;:::i;:::-;-1:-1:-1;;;;;10924:31:26;;;;10919:2;10904:18;;10897:59;10987:2;10972:18;10965:34;10621:384;;-1:-1:-1;10621:384:26:o;11010:127::-;11071:10;11066:3;11062:20;11059:1;11052:31;11102:4;11099:1;11092:15;11126:4;11123:1;11116:15;11142:128;11209:9;;;11230:11;;;11227:37;;;11244:18;;:::i;11275:175::-;11312:3;11356:4;11349:5;11345:16;11385:4;11376:7;11373:17;11370:43;;11393:18;;:::i;:::-;11442:1;11429:15;;11275:175;-1:-1:-1;;11275:175:26:o;11816:270::-;11857:3;11895:5;11889:12;11922:6;11917:3;11910:19;11938:76;12007:6;12000:4;11995:3;11991:14;11984:4;11977:5;11973:16;11938:76;:::i;:::-;12068:2;12047:15;-1:-1:-1;;12043:29:26;12034:39;;;;12075:4;12030:50;;11816:270;-1:-1:-1;;11816:270:26:o;12091:651::-;12325:4;-1:-1:-1;;;;;12411:2:26;12403:6;12399:15;12388:9;12381:34;12463:2;12455:6;12451:15;12446:2;12435:9;12431:18;12424:43;12515:2;12507:6;12503:15;12498:2;12487:9;12483:18;12476:43;;12555:3;12550:2;12539:9;12535:18;12528:31;12582:45;12622:3;12611:9;12607:19;12599:6;12582:45;:::i;:::-;12676:9;12668:6;12664:22;12658:3;12647:9;12643:19;12636:51;12704:32;12729:6;12721;12704:32;:::i;:::-;12696:40;12091:651;-1:-1:-1;;;;;;;;12091:651:26:o;12747:127::-;12808:10;12803:3;12799:20;12796:1;12789:31;12839:4;12836:1;12829:15;12863:4;12860:1;12853:15;12879:125;12944:9;;;12965:10;;;12962:36;;;12978:18;;:::i","linkReferences":{}},"methodIdentifiers":{"MAX_VOTERS()":"3ceed692","_proposals(bytes32)":"f2e2af94","adminSetForwarder(uint64,address,bool)":"db56b934","admins(uint64)":"f768b74d","calculatePhase2JobHash(uint64,bytes)":"eea22ba2","expiry(uint64)":"217d75ab","getProposalState(bytes32)":"0a704f48","getProposalYesVotes(bytes32)":"a9b62d8d","getProposalYesVotesTotal(bytes32)":"1b35b0cc","initialize(uint64,uint8,bool,address[],uint64,uint64)":"68217337","initialized()":"158ef93e","isValidForwarder(uint64,address)":"3718acf8","refreshVoters(uint64)":"19bddc61","submitGovernanceProposal(uint64,bytes)":"f8d4858d","threshold(uint64)":"11f8dec6","ttl(uint64)":"6a30ed1c","useDemocracy(uint64)":"5b9a5eb7","useValidators(uint64)":"07ff4197","voteProposal(uint64,bytes)":"426c5863","voters(uint64,uint256)":"8a9a2093"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"lowLevelData\",\"type\":\"bytes\"}],\"name\":\"FailedHandlerExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum ProposalStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"ProposalEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum ProposalStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"ProposalVote\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_VOTERS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_proposals\",\"outputs\":[{\"internalType\":\"enum ProposalStatus\",\"name\":\"_status\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_yesVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_yesVotesTotal\",\"type\":\"uint8\"},{\"internalType\":\"uint40\",\"name\":\"_proposedBlock\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"adminSetForwarder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"admins\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"phase2JobDetails\",\"type\":\"bytes\"}],\"name\":\"calculatePhase2JobHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"expiry\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"getProposalState\",\"outputs\":[{\"internalType\":\"enum ProposalStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"getProposalYesVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"phase2JobHash\",\"type\":\"bytes32\"}],\"name\":\"getProposalYesVotesTotal\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"_threshold\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"_useDemocracy\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"_voters\",\"type\":\"address[]\"},{\"internalType\":\"uint64\",\"name\":\"_expiry\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_ttl\",\"type\":\"uint64\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"}],\"name\":\"refreshVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"phase2JobDetails\",\"type\":\"bytes\"}],\"name\":\"submitGovernanceProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"threshold\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"ttl\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"useDemocracy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"useValidators\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"phase1JobId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"phase2JobDetails\",\"type\":\"bytes\"}],\"name\":\"voteProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"voters\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"adminSetForwarder(uint64,address,bool)\":{\"params\":{\"forwarder\":\"Forwarder address to be added.\",\"valid\":\"Decision for the specific forwarder.\"}},\"refreshVoters(uint64)\":{\"params\":{\"phase1JobId\":\"ID of the proposal to refresh voters for.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"adminSetForwarder(uint64,address,bool)\":{\"notice\":\"Set a forwarder to be used.Only callable by an address that currently has the admin role.\"},\"getProposalState(bytes32)\":{\"notice\":\"--------------------------------------------------------------------------------------- /// -------------------------------------- Helpers ---------------------------------------- /// --------------------------------------------------------------------------------------- ///\"},\"refreshVoters(uint64)\":{\"notice\":\"Refresh the list of voters for a proposal w/ validators\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/SigningRules.sol\":\"VotableSigningRules\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0xf513292ab066e6017db48ca749c1e63a44dfc5cba0326fc65c718f96e029d361\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://02d715ae2898f1fabd08133f80e6a7a3b87a2796ca5d23d1cb3fed9f4367f34c\",\"dweb:/ipfs/QmfESqa4j3PQAvvdfrnDQ1xUH1TnVCfvZYHsAEDK8z4X4k\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0x9cc29c28f49d0b7f7b2f1aa32d8273f8a087bf62eb3fb22d893df824052c25ef\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://42dcb36cb10b878a0d5b20ce3a4a3ba4f51f44d7731a66ac1133c699bc80b31b\",\"dweb:/ipfs/QmY6q7SaHQMLBb3rS6xZdArPaXoskWeqF6oJwUeZ3gKLZj\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d\",\"dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0x62bed173cb126f6d5006706cf249bac8a2d51bfa18f773f314784ff18adc622d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5acc33dddbf2492e37dc32e89cd56ce917272d303a6874805f3a5768a6bfbf54\",\"dweb:/ipfs/QmTsgFhcpUf16gAVazUXU3WspgX8nHke2hzVCvoqS25WEp\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0x651d84d948832f0ef45686417aa68ffb871378fa788a4123dbf37844903c66f3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ff20f5ac9de3dc3ba86b1bf1f2723174e82ce3499ad67cb0ccfa7d28baeee678\",\"dweb:/ipfs/QmRZkUFKz7AmF7yk6o317sk822HHhGVPXZQgX8G4LfYfft\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0xc8a57915ace96f5b6a85b57e57690fc038cad9034a3dc368c11828a3707c61ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa880a1a6e5d94005dcf4811b4c0df8d9c06407017ae111bd351483e2b76a72d\",\"dweb:/ipfs/QmcxkEE58gE1vDcZofTr8QpvdjXjgR72yYg7o4vTPSLCsy\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61\",\"dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3b4bb409a156dee9ce261458117fe9f81080ca844a8a26c07c857c46d155effe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5792c69fe24bdc063a14e08fe68275007fdb1e5e7e343840a77938cb7e95a64e\",\"dweb:/ipfs/QmcAMhaurUwzhytJFYix4vRNeZeV8g27b8LnV3t7dvYtiK\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0x30d73c4fea34a791ad7334dd701df60fbb565c643556aadd6621e49e48895d1f\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://be9cf80e55eff0f49ad0ab3c44214e56a3e53b5ecafe311a521f5472fa4bbf59\",\"dweb:/ipfs/QmQHrZZoscvkfKSD2m6jhktrh8ieSLV2fg9DHGDHJiBkjT\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"lib/forge-std/src/interfaces/IERC165.sol\":{\"keccak256\":\"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc\",\"dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT\"]},\"lib/forge-std/src/interfaces/IERC20.sol\":{\"keccak256\":\"0x4cab887298790f908c27de107e4e2907ca5413aee482ef776f8d2f353c5ef947\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb715e0c4a2bdbe432bb624501506041f06e878e0b72675aebba30ad2c2b72e7\",\"dweb:/ipfs/QmWhhLSvkxS2NrukJJHqFY8gDVE5r9rD4PfHvR24pwdKv9\"]},\"lib/forge-std/src/interfaces/IERC721.sol\":{\"keccak256\":\"0xf069262a264fdb69f8f37a10d2df7374649e9ba73f8414c9c8a3b51184625f15\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://924a41ca82a68ffbd503a5faf2f76d13e9938f10501a71094716f12bb64b4b7f\",\"dweb:/ipfs/QmdWnqfKc5ZGhmxNPTde4zrFchnv9Yk9MpCMb2rdhXE5gm\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/mocks/MockERC20.sol\":{\"keccak256\":\"0xadbdfc6639edec00ba94bb1133a0fd8de31ccafe45c2ef5df9b3ca61b60b559b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc766f01bccf669abac8cc7b2096cc1352a66471ca3772ae61b1801dedc4ed4f\",\"dweb:/ipfs/QmNigaPj1LYkP7Z5xr4ijkUxr2K66fDGeoifG3WoM9ruyw\"]},\"lib/forge-std/src/mocks/MockERC721.sol\":{\"keccak256\":\"0x3293dcbb7acd28df553c954e4e39e288bf10aab7ecda8d50ef21b4f4a91a28d9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9eb374daf6df34f4392f8926f1fddbce9f22c423066aeaefdfbe77395f77967b\",\"dweb:/ipfs/QmWR81zBJRX2uyRjveGzikYPj6ZwKppWsU49YEQXTLWUsN\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]},\"src/Jobs.sol\":{\"keccak256\":\"0x3c8c4de2daa16ed74bd516ca4d2386041f400d2e0f8b9b48043af942b6f35f57\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://d24466b1816336ad3bc0233a08229fc858b6bb4647c2915e1445b0c6f8566665\",\"dweb:/ipfs/QmduZq8bLaQxJNqGSd6vVVtpSXWbgHz425XgcrxJD26mXn\"]},\"src/SigningRules.sol\":{\"keccak256\":\"0xef3f157ac147e7adc91ad9bfdcb004b460c678ec26ad4a283e348931960c48cd\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://426077ece33956ad051028653d4c5c4fe060c53c89b3731517ccd1f0e4d65407\",\"dweb:/ipfs/QmVsFdMcQvUVFRio87GCXSbXTUAdfh9B86rgUZQqRU2RkA\"]},\"test/SigningRules.sol\":{\"keccak256\":\"0x4f425f70ea658855d134a6d867938f0ae6751d67dad4c36949899e65e851a6e1\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://25961b4a46f8f0aafd178fdff297fd7715bbd87967ff123082a9e8704c1cfdb2\",\"dweb:/ipfs/QmXs3cLtoJTqZhYnw2siEmH4D8EoJz3YxVZSECK4gK7dpY\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.25+commit.b61c2a91"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes","name":"lowLevelData","type":"bytes","indexed":false}],"type":"event","name":"FailedHandlerExecution","anonymous":false},{"inputs":[{"internalType":"enum ProposalStatus","name":"status","type":"uint8","indexed":false},{"internalType":"uint64","name":"phase1JobId","type":"uint64","indexed":false},{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32","indexed":false}],"type":"event","name":"ProposalEvent","anonymous":false},{"inputs":[{"internalType":"enum ProposalStatus","name":"status","type":"uint8","indexed":false},{"internalType":"uint64","name":"phase1JobId","type":"uint64","indexed":false},{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32","indexed":false}],"type":"event","name":"ProposalVote","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_VOTERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"_proposals","outputs":[{"internalType":"enum ProposalStatus","name":"_status","type":"uint8"},{"internalType":"uint256","name":"_yesVotes","type":"uint256"},{"internalType":"uint8","name":"_yesVotesTotal","type":"uint8"},{"internalType":"uint40","name":"_proposedBlock","type":"uint40"}]},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"address","name":"forwarder","type":"address"},{"internalType":"bool","name":"valid","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"adminSetForwarder"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"admins","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"bytes","name":"phase2JobDetails","type":"bytes"}],"stateMutability":"pure","type":"function","name":"calculatePhase2JobHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"expiry","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getProposalState","outputs":[{"internalType":"enum ProposalStatus","name":"","type":"uint8"}]},{"inputs":[{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getProposalYesVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"phase2JobHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getProposalYesVotesTotal","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"uint8","name":"_threshold","type":"uint8"},{"internalType":"bool","name":"_useDemocracy","type":"bool"},{"internalType":"address[]","name":"_voters","type":"address[]"},{"internalType":"uint64","name":"_expiry","type":"uint64"},{"internalType":"uint64","name":"_ttl","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"isValidForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"refreshVoters"},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"bytes","name":"phase2JobDetails","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"submitGovernanceProposal"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"threshold","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"ttl","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"useDemocracy","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"useValidators","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint64","name":"phase1JobId","type":"uint64"},{"internalType":"bytes","name":"phase2JobDetails","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"voteProposal"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"voters","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"adminSetForwarder(uint64,address,bool)":{"params":{"forwarder":"Forwarder address to be added.","valid":"Decision for the specific forwarder."}},"refreshVoters(uint64)":{"params":{"phase1JobId":"ID of the proposal to refresh voters for."}}},"version":1},"userdoc":{"kind":"user","methods":{"adminSetForwarder(uint64,address,bool)":{"notice":"Set a forwarder to be used.Only callable by an address that currently has the admin role."},"getProposalState(bytes32)":{"notice":"--------------------------------------------------------------------------------------- /// -------------------------------------- Helpers ---------------------------------------- /// --------------------------------------------------------------------------------------- ///"},"refreshVoters(uint64)":{"notice":"Refresh the list of voters for a proposal w/ validators"}},"version":1}},"settings":{"remappings":["forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/SigningRules.sol":"VotableSigningRules"},"evmVersion":"paris","libraries":{}},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c","urls":["bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224","dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0xf513292ab066e6017db48ca749c1e63a44dfc5cba0326fc65c718f96e029d361","urls":["bzz-raw://02d715ae2898f1fabd08133f80e6a7a3b87a2796ca5d23d1cb3fed9f4367f34c","dweb:/ipfs/QmfESqa4j3PQAvvdfrnDQ1xUH1TnVCfvZYHsAEDK8z4X4k"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0x9cc29c28f49d0b7f7b2f1aa32d8273f8a087bf62eb3fb22d893df824052c25ef","urls":["bzz-raw://42dcb36cb10b878a0d5b20ce3a4a3ba4f51f44d7731a66ac1133c699bc80b31b","dweb:/ipfs/QmY6q7SaHQMLBb3rS6xZdArPaXoskWeqF6oJwUeZ3gKLZj"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7","urls":["bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2","dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6","urls":["bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d","dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0x62bed173cb126f6d5006706cf249bac8a2d51bfa18f773f314784ff18adc622d","urls":["bzz-raw://5acc33dddbf2492e37dc32e89cd56ce917272d303a6874805f3a5768a6bfbf54","dweb:/ipfs/QmTsgFhcpUf16gAVazUXU3WspgX8nHke2hzVCvoqS25WEp"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0x651d84d948832f0ef45686417aa68ffb871378fa788a4123dbf37844903c66f3","urls":["bzz-raw://ff20f5ac9de3dc3ba86b1bf1f2723174e82ce3499ad67cb0ccfa7d28baeee678","dweb:/ipfs/QmRZkUFKz7AmF7yk6o317sk822HHhGVPXZQgX8G4LfYfft"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0xc8a57915ace96f5b6a85b57e57690fc038cad9034a3dc368c11828a3707c61ab","urls":["bzz-raw://fa880a1a6e5d94005dcf4811b4c0df8d9c06407017ae111bd351483e2b76a72d","dweb:/ipfs/QmcxkEE58gE1vDcZofTr8QpvdjXjgR72yYg7o4vTPSLCsy"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0","urls":["bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61","dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3b4bb409a156dee9ce261458117fe9f81080ca844a8a26c07c857c46d155effe","urls":["bzz-raw://5792c69fe24bdc063a14e08fe68275007fdb1e5e7e343840a77938cb7e95a64e","dweb:/ipfs/QmcAMhaurUwzhytJFYix4vRNeZeV8g27b8LnV3t7dvYtiK"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0x30d73c4fea34a791ad7334dd701df60fbb565c643556aadd6621e49e48895d1f","urls":["bzz-raw://be9cf80e55eff0f49ad0ab3c44214e56a3e53b5ecafe311a521f5472fa4bbf59","dweb:/ipfs/QmQHrZZoscvkfKSD2m6jhktrh8ieSLV2fg9DHGDHJiBkjT"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba","urls":["bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70","dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea","urls":["bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973","dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF"],"license":"MIT"},"lib/forge-std/src/interfaces/IERC165.sol":{"keccak256":"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600","urls":["bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc","dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT"],"license":"MIT"},"lib/forge-std/src/interfaces/IERC20.sol":{"keccak256":"0x4cab887298790f908c27de107e4e2907ca5413aee482ef776f8d2f353c5ef947","urls":["bzz-raw://bb715e0c4a2bdbe432bb624501506041f06e878e0b72675aebba30ad2c2b72e7","dweb:/ipfs/QmWhhLSvkxS2NrukJJHqFY8gDVE5r9rD4PfHvR24pwdKv9"],"license":"MIT"},"lib/forge-std/src/interfaces/IERC721.sol":{"keccak256":"0xf069262a264fdb69f8f37a10d2df7374649e9ba73f8414c9c8a3b51184625f15","urls":["bzz-raw://924a41ca82a68ffbd503a5faf2f76d13e9938f10501a71094716f12bb64b4b7f","dweb:/ipfs/QmdWnqfKc5ZGhmxNPTde4zrFchnv9Yk9MpCMb2rdhXE5gm"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/mocks/MockERC20.sol":{"keccak256":"0xadbdfc6639edec00ba94bb1133a0fd8de31ccafe45c2ef5df9b3ca61b60b559b","urls":["bzz-raw://bc766f01bccf669abac8cc7b2096cc1352a66471ca3772ae61b1801dedc4ed4f","dweb:/ipfs/QmNigaPj1LYkP7Z5xr4ijkUxr2K66fDGeoifG3WoM9ruyw"],"license":"MIT"},"lib/forge-std/src/mocks/MockERC721.sol":{"keccak256":"0x3293dcbb7acd28df553c954e4e39e288bf10aab7ecda8d50ef21b4f4a91a28d9","urls":["bzz-raw://9eb374daf6df34f4392f8926f1fddbce9f22c423066aeaefdfbe77395f77967b","dweb:/ipfs/QmWR81zBJRX2uyRjveGzikYPj6ZwKppWsU49YEQXTLWUsN"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381","urls":["bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae","dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq"],"license":"MIT"},"src/Jobs.sol":{"keccak256":"0x3c8c4de2daa16ed74bd516ca4d2386041f400d2e0f8b9b48043af942b6f35f57","urls":["bzz-raw://d24466b1816336ad3bc0233a08229fc858b6bb4647c2915e1445b0c6f8566665","dweb:/ipfs/QmduZq8bLaQxJNqGSd6vVVtpSXWbgHz425XgcrxJD26mXn"],"license":"GPL-3.0-only"},"src/SigningRules.sol":{"keccak256":"0xef3f157ac147e7adc91ad9bfdcb004b460c678ec26ad4a283e348931960c48cd","urls":["bzz-raw://426077ece33956ad051028653d4c5c4fe060c53c89b3731517ccd1f0e4d65407","dweb:/ipfs/QmVsFdMcQvUVFRio87GCXSbXTUAdfh9B86rgUZQqRU2RkA"],"license":"UNLICENSED"},"test/SigningRules.sol":{"keccak256":"0x4f425f70ea658855d134a6d867938f0ae6751d67dad4c36949899e65e851a6e1","urls":["bzz-raw://25961b4a46f8f0aafd178fdff297fd7715bbd87967ff123082a9e8704c1cfdb2","dweb:/ipfs/QmXs3cLtoJTqZhYnw2siEmH4D8EoJz3YxVZSECK4gK7dpY"],"license":"UNLICENSED"}},"version":1},"id":25} \ No newline at end of file diff --git a/examples/contracts/examples/submit_proposal.rs b/examples/contracts/examples/submit_proposal.rs index da2b9b5ba..1933665cd 100644 --- a/examples/contracts/examples/submit_proposal.rs +++ b/examples/contracts/examples/submit_proposal.rs @@ -17,7 +17,6 @@ use ethers::providers::{Http, Provider}; use ethers::signers::LocalWallet; use ethers::signers::Signer as EthSigner; use ethers::types::{Address, Bytes}; -use parity_scale_codec::Encode; use serde_json::Value; use sp_core::{Pair, H256, U256}; use std::str::FromStr; @@ -187,7 +186,6 @@ async fn main() -> Result<(), String> { let client = Arc::new(provider.clone()); let contract = VotableSigningRules::new(Address::from(contract_address), client); let phase_1_job_id = 0u64; - let phase_1_job_details: Bytes = dkg_phase_one.job_type.encode().into(); let threshold = 2; let use_democracy = false; let voters = vec![ @@ -196,14 +194,9 @@ async fn main() -> Result<(), String> { H160::from_str("0xb65EA4E162188d199b14da8bc747F24042c36E2C").unwrap(), ]; let expiry = 5000; - let fn_call: FunctionCall<_, _, _> = contract.initialize( - phase_1_job_id, - phase_1_job_details.clone(), - threshold, - use_democracy, - voters, - expiry, - ); + let ttl = 5000; + let fn_call: FunctionCall<_, _, _> = + contract.initialize(phase_1_job_id, threshold, use_democracy, voters, expiry, ttl); let init_tx_call = RuntimeCall::EVM(TangleApi::evm::Call::call { source: H160::from_str("0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b").unwrap(), @@ -231,11 +224,8 @@ async fn main() -> Result<(), String> { // Step 6: Vote on the proposal to submit the phase 2 job. let phase_2_job_details: Bytes = b"phase2".into(); - let vote_proposal_fn_call: FunctionCall<_, _, _> = contract.vote_proposal( - phase_1_job_id, - phase_1_job_details.clone(), - phase_2_job_details.clone(), - ); + let vote_proposal_fn_call: FunctionCall<_, _, _> = + contract.vote_proposal(phase_1_job_id, phase_2_job_details.clone()); let relayer_wallet1 = LocalWallet::from_str("99b3c12287537e38c90a9219d4cb074a89a16e9cdb20bf85728ebd97c343e342") diff --git a/forge/src/SigningRules.sol b/forge/src/SigningRules.sol index 2503a78ef..c623bc1d7 100644 --- a/forge/src/SigningRules.sol +++ b/forge/src/SigningRules.sol @@ -14,14 +14,14 @@ struct Proposal { } abstract contract SigningRules { - mapping (bytes32 => mapping (address => bool)) public isValidForwarder; - mapping (bytes32 => address) public admins; - mapping (bytes32 => address[]) public voters; - mapping (bytes32 => uint8) public threshold; - mapping (bytes32 => uint64) public expiry; - mapping (bytes32 => uint64) public ttl; - mapping (bytes32 => bool) public useDemocracy; - mapping (bytes32 => bool) public useValidators; + mapping (uint64 => mapping (address => bool)) public isValidForwarder; + mapping (uint64 => address) public admins; + mapping (uint64 => address[]) public voters; + mapping (uint64 => uint8) public threshold; + mapping (uint64 => uint64) public expiry; + mapping (uint64 => uint64) public ttl; + mapping (uint64 => bool) public useDemocracy; + mapping (uint64 => bool) public useValidators; // keccak256(proposalId, phase2JobHash) => Proposal mapping(bytes32 => Proposal) public _proposals; @@ -32,34 +32,30 @@ abstract contract SigningRules { event ProposalEvent( ProposalStatus status, - bytes32 proposalId, + uint64 phase1JobId, bytes32 phase2JobHash ); event ProposalVote( ProposalStatus status, - bytes32 proposalId, + uint64 phase1JobId, bytes32 phase2JobHash ); event FailedHandlerExecution( bytes lowLevelData ); - modifier onlyAdmin(bytes32 id) { + modifier onlyAdmin(uint64 id) { require(admins[id] == msg.sender, "Only admin can call this function"); _; } - function calculatePhase1ProposalId(uint64 phase1JobId, bytes memory phase1JobDetails) public pure returns (bytes32) { - return keccak256(abi.encodePacked(phase1JobId, phase1JobDetails)); - } - function calculatePhase2JobHash(bytes32 proposalId, bytes memory phase2JobDetails) public pure returns (bytes32) { - return keccak256(abi.encodePacked(proposalId, phase2JobDetails)); + function calculatePhase2JobHash(uint64 phase1JobId, bytes memory phase2JobDetails) public pure returns (bytes32) { + return keccak256(abi.encodePacked(phase1JobId, phase2JobDetails)); } function initialize( uint64 phase1JobId, - bytes memory phase1JobDetails, uint8 _threshold, bool _useDemocracy, address[] memory _voters, @@ -71,53 +67,51 @@ abstract contract SigningRules { initialized = true; // Hash the job data to get the an ID for the job - bytes32 phase1ProposalId = keccak256(abi.encodePacked(phase1JobId, phase1JobDetails)); - threshold[phase1ProposalId] = _threshold; - useDemocracy[phase1ProposalId] = _useDemocracy; - expiry[phase1ProposalId] = _expiry; - ttl[phase1ProposalId] = _ttl; - admins[phase1ProposalId] = msg.sender; + threshold[phase1JobId] = _threshold; + useDemocracy[phase1JobId] = _useDemocracy; + expiry[phase1JobId] = _expiry; + ttl[phase1JobId] = _ttl; + admins[phase1JobId] = msg.sender; // If we have voters, add them to the list. if (_voters.length > 0) { - voters[phase1ProposalId] = _voters; + voters[phase1JobId] = _voters; } else { // Otherwise, use the default list of being all validators ECDSA keys. - useValidators[phase1ProposalId] = true; - _refreshVoters(phase1ProposalId); + useValidators[phase1JobId] = true; + _refreshVoters(phase1JobId); } } /// @notice Refresh the list of voters for a proposal w/ validators - /// @param phase1ProposalId ID of the proposal to refresh voters for. - function refreshVoters(bytes32 phase1ProposalId) public onlyAdmin(phase1ProposalId) { - _refreshVoters(phase1ProposalId); + /// @param phase1JobId ID of the proposal to refresh voters for. + function refreshVoters(uint64 phase1JobId) public onlyAdmin(phase1JobId) { + _refreshVoters(phase1JobId); } /// @notice Set a forwarder to be used. /// @notice Only callable by an address that currently has the admin role. /// @param forwarder Forwarder address to be added. /// @param valid Decision for the specific forwarder. - function adminSetForwarder(bytes32 proposalId, address forwarder, bool valid) external onlyAdmin(proposalId) { - isValidForwarder[proposalId][forwarder] = valid; + function adminSetForwarder(uint64 phase1JobId, address forwarder, bool valid) external onlyAdmin(phase1JobId) { + isValidForwarder[phase1JobId][forwarder] = valid; } - function submitGovernanceProposal(uint64 phase1JobId, bytes memory phase1JobDetails, bytes memory phase2JobDetails) public { + function submitGovernanceProposal(uint64 phase1JobId, bytes memory phase2JobDetails) public { // Validate the governance proposal - bytes32 proposalId = keccak256(abi.encodePacked(phase1JobId, phase1JobDetails)); - bytes32 phase2JobHash = keccak256(abi.encodePacked(proposalId, phase2JobDetails)); + bytes32 phase2JobHash = keccak256(abi.encodePacked(phase1JobId, phase2JobDetails)); require(_proposals[phase2JobHash]._status != ProposalStatus.Executed, "Proposal must have been executed"); - require(useDemocracy[proposalId], "Proposal must allow using governance"); + require(useDemocracy[phase1JobId], "Proposal must allow using governance"); // Submit the proposal to governance pallet - _submitToDemocracyPallet(phase1JobId, phase1JobDetails, phase2JobDetails); + _submitToDemocracyPallet(phase1JobId, phase2JobDetails); } - function voteProposal(uint64 phase1JobId, bytes memory phase1JobDetails, bytes memory phase2JobDetails) public { + function voteProposal(uint64 phase1JobId, bytes memory phase2JobDetails) public { // Validate the job/details are AUP - require(_isVotableProposal(phase1JobId, phase1JobDetails, phase2JobDetails), "Proposal must be votable"); + require(_isVotableProposal(phase1JobId, phase2JobDetails), "Proposal must be votable"); // Check that we have received enough votes for the anchor update proposal. // Execute the proposal happens in `_voteProposal` if this vote tips the balance. - _voteProposal(phase1JobId, phase1JobDetails, phase2JobDetails ); + _voteProposal(phase1JobId, phase2JobDetails ); } /// --------------------------------------------------------------------------------------- /// @@ -129,19 +123,18 @@ abstract contract SigningRules { /// @notice {_msgSender()} must not have already voted on proposal. /// @notice Emits {ProposalEvent} event with status indicating the proposal status. /// @notice Emits {ProposalVote} event. - function _voteProposal(uint64 phase1JobId, bytes memory phase1JobDetails, bytes memory phase2JobDetails) internal { - bytes32 phase1ProposalId = keccak256(abi.encodePacked(phase1JobId, phase1JobDetails)); - bytes32 phase2JobHash = keccak256(abi.encodePacked(phase1ProposalId, phase2JobDetails)); + function _voteProposal(uint64 phase1JobId, bytes memory phase2JobDetails) internal { + bytes32 phase2JobHash = keccak256(abi.encodePacked(phase1JobId, phase2JobDetails)); Proposal storage proposal = _proposals[phase2JobHash]; if (proposal._status == ProposalStatus.Passed) { - _executeProposal(phase1ProposalId, phase1JobId, phase2JobHash, phase2JobDetails ); + _executeProposal( phase1JobId, phase2JobHash, phase2JobDetails ); return; } - address sender = _msgSender(phase1ProposalId); + address sender = _msgSender(phase1JobId); require(uint(proposal._status) <= 1, "proposal already executed/cancelled"); - require(!_hasVoted(phase1ProposalId, phase2JobHash, sender), "relayer already voted"); + require(!_hasVoted(phase1JobId, phase2JobHash, sender), "relayer already voted"); if (proposal._status == ProposalStatus.Inactive) { _proposals[phase2JobHash] = Proposal({ @@ -151,70 +144,70 @@ abstract contract SigningRules { _proposedBlock : uint40(block.number) // Overflow is desired. }); - emit ProposalEvent(ProposalStatus.Active, phase1ProposalId, phase2JobHash); - } else if (uint40(block.number - proposal._proposedBlock) > expiry[phase1ProposalId]) { + emit ProposalEvent(ProposalStatus.Active, phase1JobId, phase2JobHash); + } else if (uint40(block.number - proposal._proposedBlock) > expiry[phase1JobId]) { // if the number of blocks that has passed since this proposal was // submitted exceeds the expiry threshold set, cancel the proposal proposal._status = ProposalStatus.Cancelled; - emit ProposalEvent(ProposalStatus.Cancelled, phase1ProposalId, phase2JobHash); + emit ProposalEvent(ProposalStatus.Cancelled, phase1JobId, phase2JobHash); } if (proposal._status != ProposalStatus.Cancelled) { - proposal._yesVotes = (proposal._yesVotes | _voterBit(phase1ProposalId, sender)); + proposal._yesVotes = (proposal._yesVotes | _voterBit(phase1JobId, sender)); proposal._yesVotesTotal++; // TODO: check if bit counting is cheaper. - emit ProposalVote(proposal._status, phase1ProposalId, phase2JobHash); + emit ProposalVote(proposal._status, phase1JobId, phase2JobHash); // Finalize if _relayerThreshold has been reached - if (proposal._yesVotesTotal >= threshold[phase1ProposalId]) { + if (proposal._yesVotesTotal >= threshold[phase1JobId]) { proposal._status = ProposalStatus.Passed; - emit ProposalEvent(ProposalStatus.Passed, phase1ProposalId, phase2JobHash); + emit ProposalEvent(ProposalStatus.Passed, phase1JobId, phase2JobHash); } } _proposals[phase2JobHash] = proposal; if (proposal._status == ProposalStatus.Passed) { - _executeProposal(phase1ProposalId, phase1JobId, phase2JobHash, phase2JobDetails ); + _executeProposal(phase1JobId, phase2JobHash, phase2JobDetails ); } } /// @notice Execute a proposal. - /// @param phase1ProposalId ID of the proposal to execute. + /// @param phase1JobId ID of the job that the proposal is associated with. /// @notice Proposal must have Passed status. /// @notice Emits {ProposalEvent} event with status {Executed}. /// @notice Emits {FailedExecution} event with the failed reason. - function _executeProposal(bytes32 phase1ProposalId, uint64 phase1JobId, bytes32 phase2JobHash, bytes memory phase2JobDetails) internal { + function _executeProposal(uint64 phase1JobId, bytes32 phase2JobHash, bytes memory phase2JobDetails) internal { Proposal storage proposal = _proposals[phase2JobHash]; require(proposal._status == ProposalStatus.Passed, "Proposal must have Passed status"); - JOBS_CONTRACT.submitDkgPhaseTwoJob(expiry[phase1ProposalId], ttl[phase1ProposalId], phase1JobId, phase2JobDetails, bytes("")); + JOBS_CONTRACT.submitDkgPhaseTwoJob(expiry[phase1JobId], ttl[phase1JobId], phase1JobId, phase2JobDetails, bytes("")); proposal._status = ProposalStatus.Executed; - emit ProposalEvent(ProposalStatus.Executed, phase1ProposalId, phase2JobHash); + emit ProposalEvent(ProposalStatus.Executed, phase1JobId, phase2JobHash); } - function _voterIndex(bytes32 phase1ProposalId, address voter) internal view returns (uint) { - for (uint i = 0; i < voters[phase1ProposalId].length; i++) { - if (voters[phase1ProposalId][i] == voter) { + function _voterIndex(uint64 phase1JobId, address voter) internal view returns (uint) { + for (uint i = 0; i < voters[phase1JobId].length; i++) { + if (voters[phase1JobId][i] == voter) { return i + 1; } } return MAX_VOTERS; } - function _voterBit(bytes32 phase1ProposalId, address voter) internal view returns(uint) { - return uint(1) << (_voterIndex(phase1ProposalId, voter) - 1); + function _voterBit(uint64 phase1JobId, address voter) internal view returns(uint) { + return uint(1) << (_voterIndex(phase1JobId, voter) - 1); } - function _hasVoted(bytes32 phase1ProposalId, bytes32 phase2JobHash, address voter) internal view returns(bool) { + function _hasVoted(uint64 phase1JobId, bytes32 phase2JobHash, address voter) internal view returns(bool) { Proposal storage proposal = _proposals[phase2JobHash]; - return (_voterBit(phase1ProposalId, voter) & uint(proposal._yesVotes)) > 0; + return (_voterBit(phase1JobId, voter) & uint(proposal._yesVotes)) > 0; } - function _msgSender(bytes32 proposalId) internal view returns (address) { + function _msgSender(uint64 phase1JobId) internal view returns (address) { address signer = msg.sender; - if (msg.data.length >= 20 && isValidForwarder[proposalId][signer]) { + if (msg.data.length >= 20 && isValidForwarder[phase1JobId][signer]) { assembly { signer := shr(96, calldataload(sub(calldatasize(), 20))) } @@ -226,9 +219,9 @@ abstract contract SigningRules { /// -------------------------------------- Virtuals --------------------------------------- /// /// --------------------------------------------------------------------------------------- /// - function _isVotableProposal(uint64 phase1JobId, bytes memory phase1JobDetails, bytes memory phase2JobDetails) internal virtual returns (bool); - function _refreshVoters(bytes32 proposalId) internal virtual; - function _submitToDemocracyPallet(uint64 phase1JobId, bytes memory phase1JobDetails, bytes memory phase2JobDetails) internal virtual; + function _isVotableProposal(uint64 phase1JobId, bytes memory phase2JobDetails) internal virtual returns (bool); + function _refreshVoters(uint64 phase1JobId) internal virtual; + function _submitToDemocracyPallet(uint64 phase1JobId, bytes memory phase2JobDetails) internal virtual; /// --------------------------------------------------------------------------------------- /// /// -------------------------------------- Helpers ---------------------------------------- /// diff --git a/forge/test/SigningRules.sol b/forge/test/SigningRules.sol index 488eb9312..69815e925 100644 --- a/forge/test/SigningRules.sol +++ b/forge/test/SigningRules.sol @@ -8,17 +8,16 @@ import { Proposal, ProposalStatus } from "../src/SigningRules.sol"; contract VotableSigningRules is SigningRules { - function _isVotableProposal(uint64 phase1JobId, bytes memory phase1JobDetails, bytes memory phase2JobDetails) override pure internal returns (bool) { - require(phase1JobDetails.length != 0, "Job details must be non-empty"); + function _isVotableProposal(uint64 phase1JobId, bytes memory phase2JobDetails) override pure internal returns (bool) { require(phase2JobDetails.length != 0, "Job details must be non-empty"); return true; } - function _refreshVoters(bytes32 proposalId) override internal { + function _refreshVoters(uint64 phase1JobId) override internal { // Do nothing } - function _submitToDemocracyPallet(uint64 phase1JobId, bytes memory phase1JobDetails, bytes memory phase2JobDetails) override internal { + function _submitToDemocracyPallet(uint64 phase1JobId, bytes memory phase2JobDetails) override internal { // Do nothing } } @@ -32,25 +31,22 @@ contract SigningRulesTest is Test { function test_setup() public { uint64 phase1JobId = 1; - bytes memory phase1JobDetails = "test"; uint8 threshold = 1; bool useDemocracy = false; address[] memory voters = new address[](0); uint64 expiry = 1000; uint64 ttl = 1000; - bytes32 proposalId = rules.calculatePhase1ProposalId(phase1JobId, phase1JobDetails); - rules.initialize(phase1JobId, phase1JobDetails, threshold, useDemocracy, voters, expiry, ttl); + rules.initialize(phase1JobId, threshold, useDemocracy, voters, expiry, ttl); assertTrue(rules.initialized()); - assertTrue(rules.threshold(proposalId) == threshold); - assertTrue(rules.useDemocracy(proposalId) == useDemocracy); - assertTrue(rules.expiry(proposalId) == expiry); - assertTrue(rules.useValidators(proposalId) == true); - assertTrue(rules.admins(proposalId) == address(this)); + assertTrue(rules.threshold(phase1JobId) == threshold); + assertTrue(rules.useDemocracy(phase1JobId) == useDemocracy); + assertTrue(rules.expiry(phase1JobId) == expiry); + assertTrue(rules.useValidators(phase1JobId) == true); + assertTrue(rules.admins(phase1JobId) == address(this)); } function test_submitAndVoteOnProposal() public { uint64 phase1JobId = 1; - bytes memory phase1JobDetails = "test"; bytes memory phase2JobDetails = "test"; uint8 threshold = 2; bool useDemocracy = false; @@ -59,26 +55,24 @@ contract SigningRulesTest is Test { voters[1] = vm.addr(2); uint40 expiry = 1000; uint64 ttl = 1000; - bytes32 phase1ProposalId = rules.calculatePhase1ProposalId(phase1JobId, phase1JobDetails); - bytes32 phase2JobHash = rules.calculatePhase2JobHash(phase1ProposalId, phase2JobDetails); + bytes32 phase2JobHash = rules.calculatePhase2JobHash(phase1JobId, phase2JobDetails); - rules.initialize(phase1JobId, phase1JobDetails, threshold, useDemocracy, voters, expiry, ttl); + rules.initialize(phase1JobId, threshold, useDemocracy, voters, expiry, ttl); vm.prank(vm.addr(1)); - rules.voteProposal(phase1JobId, phase1JobDetails, phase2JobDetails); + rules.voteProposal(phase1JobId, phase2JobDetails); assertTrue(rules.getProposalState(phase2JobHash) == ProposalStatus.Active); vm.expectRevert("relayer already voted"); vm.prank(vm.addr(1)); - rules.voteProposal(phase1JobId, phase1JobDetails, phase2JobDetails); + rules.voteProposal(phase1JobId, phase2JobDetails); vm.prank(vm.addr(2)); - rules.voteProposal(phase1JobId, phase1JobDetails, phase2JobDetails); + rules.voteProposal(phase1JobId, phase2JobDetails); assertTrue(rules.getProposalState(phase2JobHash) == ProposalStatus.Executed); } function test_submitAndVote255Participants() public { uint64 phase1JobId = 1; - bytes memory phase1JobDetails = "test"; bytes memory phase2JobDetails = "test"; uint8 threshold = 255; bool useDemocracy = false; @@ -88,12 +82,11 @@ contract SigningRulesTest is Test { } uint40 expiry = 1000; uint64 ttl = 1000; - bytes32 phase1ProposalId = rules.calculatePhase1ProposalId(phase1JobId, phase1JobDetails); - bytes32 phase2JobHash = rules.calculatePhase2JobHash(phase1ProposalId, phase2JobDetails); - rules.initialize(phase1JobId, phase1JobDetails, threshold, useDemocracy, voters, expiry, ttl); + bytes32 phase2JobHash = rules.calculatePhase2JobHash(phase1JobId, phase2JobDetails); + rules.initialize(phase1JobId, threshold, useDemocracy, voters, expiry, ttl); for (uint8 i = 0; i < 255; i++) { vm.prank(vm.addr(i + 1)); - rules.voteProposal(phase1JobId, phase1JobDetails, phase2JobDetails); + rules.voteProposal(phase1JobId, phase2JobDetails); if (i < 254) { assertTrue(rules.getProposalState(phase2JobHash) == ProposalStatus.Active); @@ -104,7 +97,6 @@ contract SigningRulesTest is Test { function test_submitVoteAndExpireProposal() public { uint64 phase1JobId = 1; - bytes memory phase1JobDetails = "test"; bytes memory phase2JobDetails = "test"; uint8 threshold = 2; bool useDemocracy = false; @@ -114,26 +106,24 @@ contract SigningRulesTest is Test { uint40 expiry = 10; uint64 ttl = 10; uint nowBlockNumber = block.number; - bytes32 phase1ProposalId = rules.calculatePhase1ProposalId(phase1JobId, phase1JobDetails); - bytes32 phase2JobHash = rules.calculatePhase2JobHash(phase1ProposalId, phase2JobDetails); + bytes32 phase2JobHash = rules.calculatePhase2JobHash(phase1JobId, phase2JobDetails); - rules.initialize(phase1JobId, phase1JobDetails, threshold, useDemocracy, voters, expiry, ttl); + rules.initialize(phase1JobId, threshold, useDemocracy, voters, expiry, ttl); vm.prank(vm.addr(1)); - rules.voteProposal(phase1JobId, phase1JobDetails, phase2JobDetails); + rules.voteProposal(phase1JobId, phase2JobDetails); assertTrue(rules.getProposalState(phase2JobHash) == ProposalStatus.Active); vm.roll(nowBlockNumber + expiry + 1); vm.prank(vm.addr(2)); - rules.voteProposal(phase1JobId, phase1JobDetails, phase2JobDetails); + rules.voteProposal(phase1JobId, phase2JobDetails); assertTrue(rules.getProposalState(phase2JobHash) == ProposalStatus.Cancelled); vm.expectRevert("proposal already executed/cancelled"); vm.prank(vm.addr(2)); - rules.voteProposal(phase1JobId, phase1JobDetails, phase2JobDetails); + rules.voteProposal(phase1JobId, phase2JobDetails); } function test_adminFunctions() public { uint64 phase1JobId = 1; - bytes memory phase1JobDetails = "test"; uint8 threshold = 2; bool useDemocracy = false; address[] memory voters = new address[](2); @@ -141,15 +131,14 @@ contract SigningRulesTest is Test { voters[1] = vm.addr(2); uint40 expiry = 1000; uint64 ttl = 1000; - bytes32 phase1ProposalId = rules.calculatePhase1ProposalId(phase1JobId, phase1JobDetails); - rules.initialize(phase1JobId, phase1JobDetails, threshold, useDemocracy, voters, expiry, ttl); + rules.initialize(phase1JobId, threshold, useDemocracy, voters, expiry, ttl); - rules.adminSetForwarder(phase1ProposalId, vm.addr(100), true); - assertTrue(rules.isValidForwarder(phase1ProposalId, vm.addr(100))); - assertFalse(rules.isValidForwarder(phase1ProposalId, vm.addr(101))); + rules.adminSetForwarder(phase1JobId, vm.addr(100), true); + assertTrue(rules.isValidForwarder(phase1JobId, vm.addr(100))); + assertFalse(rules.isValidForwarder(phase1JobId, vm.addr(101))); vm.expectRevert("Only admin can call this function"); vm.prank(vm.addr(1)); - rules.adminSetForwarder(phase1ProposalId, vm.addr(100), false); + rules.adminSetForwarder(phase1JobId, vm.addr(100), false); } } diff --git a/node/src/command.rs b/node/src/command.rs index d814e9e9b..5702508f6 100644 --- a/node/src/command.rs +++ b/node/src/command.rs @@ -23,6 +23,7 @@ use sc_cli::SubstrateCli; use sc_service::PartialComponents; use tangle_primitives::types::Block; +#[allow(dead_code)] trait IdentifyChain { fn is_mainnet(&self) -> bool; fn is_testnet(&self) -> bool; diff --git a/node/src/eth.rs b/node/src/eth.rs index 0a75ee3af..3c1a9b8a1 100644 --- a/node/src/eth.rs +++ b/node/src/eth.rs @@ -177,6 +177,7 @@ pub fn new_frontier_partial( } /// A set of APIs that ethereum-compatible runtimes must implement. +#[allow(dead_code)] pub trait EthCompatRuntimeApiCollection: sp_api::ApiExt + fp_rpc::ConvertTransactionRuntimeApi diff --git a/pallets/dkg/src/lib.rs b/pallets/dkg/src/lib.rs index db8e77f3f..173416ab7 100644 --- a/pallets/dkg/src/lib.rs +++ b/pallets/dkg/src/lib.rs @@ -248,7 +248,7 @@ pub mod pallet { /// `UpdateOrigin`. /// * `fee_info` - The new fee information to be set for the pallet. #[pallet::call_index(0)] - #[pallet::weight(Weight::from_parts(10_000, 0) + T::DbWeight::get().writes(1))] + #[pallet::weight(T::WeightInfo::set_fee())] pub fn set_fee(origin: OriginFor, fee_info: FeeInfoOf) -> DispatchResultWithPostInfo { T::UpdateOrigin::ensure_origin(origin)?; diff --git a/pallets/dkg/src/weights.rs b/pallets/dkg/src/weights.rs index 74583567b..37c381ce6 100644 --- a/pallets/dkg/src/weights.rs +++ b/pallets/dkg/src/weights.rs @@ -45,16 +45,6 @@ pub trait WeightInfo { fn set_fee() -> Weight; } -/// Weights for pallet_dkg using the Acala node and recommended hardware. -pub struct AcalaWeight(PhantomData); -impl WeightInfo for AcalaWeight { - fn set_fee() -> Weight { - Weight::from_parts(32_778_000, 0) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} - // For backwards compatibility and tests impl WeightInfo for () { fn set_fee() -> Weight { diff --git a/pallets/jobs/src/mock.rs b/pallets/jobs/src/mock.rs index da74b38c0..889befc17 100644 --- a/pallets/jobs/src/mock.rs +++ b/pallets/jobs/src/mock.rs @@ -22,7 +22,7 @@ use frame_election_provider_support::{ }; use frame_support::{ construct_runtime, parameter_types, - traits::{ConstU128, ConstU32, ConstU64, Contains, Everything}, + traits::{ConstU128, ConstU32, ConstU64, Contains}, }; use pallet_session::historical as pallet_session_historical; use sp_core::{ @@ -65,7 +65,7 @@ impl frame_system::Config for Runtime { type OnNewAccount = (); type OnKilledAccount = (); type DbWeight = (); - type BaseCallFilter = Everything; + type BaseCallFilter = BaseFilter; type SystemWeightInfo = (); type SS58Prefix = (); type OnSetCode = (); diff --git a/pallets/jobs/src/tests.rs b/pallets/jobs/src/tests.rs index 8674e79e6..c83c55ca9 100644 --- a/pallets/jobs/src/tests.rs +++ b/pallets/jobs/src/tests.rs @@ -180,7 +180,6 @@ fn test_signing_rules() { let contract = SigningRules::new(Address::from(signing_rules_address), client); let phase_1_job_id = 0u64; - let phase_1_job_details: Bytes = submission.job_type.encode().into(); let threshold = 3; let use_democracy = false; let voters = vec![ @@ -191,14 +190,9 @@ fn test_signing_rules() { pairs[4].address, ]; let expiry = 1000; - let ethers_call: FunctionCall<_, _, _> = contract.initialize( - phase_1_job_id, - phase_1_job_details.clone(), - threshold, - use_democracy, - voters, - expiry, - ); + let ttl = 1000; + let ethers_call: FunctionCall<_, _, _> = + contract.initialize(phase_1_job_id, threshold, use_democracy, voters, expiry, ttl); let initialize_tx = eip1559_contract_call_unsigned_transaction( signing_rules_address, ethers_call.calldata().unwrap().to_vec(), @@ -209,7 +203,7 @@ fn test_signing_rules() { let phase_2_job_details: Bytes = b"phase2".into(); let vote_proposal_call: FunctionCall<_, _, _> = - contract.vote_proposal(phase_1_job_id, phase_1_job_details, phase_2_job_details); + contract.vote_proposal(phase_1_job_id, phase_2_job_details); let vote_proposal_tx = eip1559_contract_call_unsigned_transaction( signing_rules_address, vote_proposal_call.calldata().unwrap().to_vec(), diff --git a/pallets/zksaas/src/lib.rs b/pallets/zksaas/src/lib.rs index e88c9b573..2560e3914 100644 --- a/pallets/zksaas/src/lib.rs +++ b/pallets/zksaas/src/lib.rs @@ -125,7 +125,7 @@ pub mod pallet { /// `UpdateOrigin`. /// * `fee_info` - The new fee information to be set for the pallet. #[pallet::call_index(0)] - #[pallet::weight(Weight::from_parts(10_000, 0) + T::DbWeight::get().writes(1))] + #[pallet::weight(T::WeightInfo::set_fee())] pub fn set_fee(origin: OriginFor, fee_info: FeeInfoOf) -> DispatchResultWithPostInfo { T::UpdateOrigin::ensure_origin(origin)?; diff --git a/pallets/zksaas/src/weights.rs b/pallets/zksaas/src/weights.rs index 74583567b..37c381ce6 100644 --- a/pallets/zksaas/src/weights.rs +++ b/pallets/zksaas/src/weights.rs @@ -45,16 +45,6 @@ pub trait WeightInfo { fn set_fee() -> Weight; } -/// Weights for pallet_dkg using the Acala node and recommended hardware. -pub struct AcalaWeight(PhantomData); -impl WeightInfo for AcalaWeight { - fn set_fee() -> Weight { - Weight::from_parts(32_778_000, 0) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} - // For backwards compatibility and tests impl WeightInfo for () { fn set_fee() -> Weight { diff --git a/precompiles/vesting/src/mock.rs b/precompiles/vesting/src/mock.rs index a3f99d520..a46f2b201 100644 --- a/precompiles/vesting/src/mock.rs +++ b/precompiles/vesting/src/mock.rs @@ -123,16 +123,6 @@ impl From for H160 { } } } -pub trait H160Conversion { - fn to_h160(&self) -> H160; -} - -impl H160Conversion for AccountId32 { - fn to_h160(&self) -> H160 { - let x = self.encode()[31]; - H160::repeat_byte(x) - } -} impl From for AccountId32 { fn from(x: TestAccount) -> Self {