From d0ba99e580d22c613a664b1ff764aac58bc730bb Mon Sep 17 00:00:00 2001 From: Geoff Stuart Date: Wed, 18 Sep 2024 10:27:38 -0400 Subject: [PATCH] Move weight update to validatormanager --- .../ERC20TokenStakingManager.go | 2 +- .../NativeTokenStakingManager.go | 2 +- .../PoAValidatorManager.go | 159 +++++++++++++++++- contracts/staking/PoSValidatorManager.sol | 9 - contracts/staking/ValidatorManager.sol | 28 +-- 5 files changed, 174 insertions(+), 26 deletions(-) diff --git a/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 901f2f996..2be814453 100644 --- a/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -76,7 +76,7 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activeValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndValidation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeValidatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidator\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structValidator\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"startingWeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageNonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"startedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"endedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWeight\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"settings\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorManagerSettings\",\"components\":[{\"name\":\"baseSettings\",\"type\":\"tuple\",\"internalType\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"pChainBlockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorRegistration\",\"inputs\":[{\"name\":\"registrationInput\",\"type\":\"tuple\",\"internalType\":\"structValidatorRegistrationInput\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"requirements\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorRequirements\",\"components\":[{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendEndValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendRegisterValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendUpdateDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"valueToWeight\",\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"DelegationEnded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegatorAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodEnded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumValidatorStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWeightUpdate\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161524238038061524283398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6150f58061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061013d575f3560e01c806376f78621116100b4578063b771b3bc11610079578063b771b3bc146102d9578063ba3a4b97146102ff578063bee0a03f14610312578063c974d1b614610325578063d5f20ff61461032d578063df93d8de1461034d575f80fd5b806376f786211461027a57806398f3e2b41461028d5780639e1bc4ef146102a0578063a13fd29d146102b3578063a3a65e48146102c6575f80fd5b8063330a0a3a11610105578063330a0a3a146101ff57806335455ded14610212578063467ef06f1461022e5780635297fae614610241578063620658561461025457806366435abf14610267575f80fd5b80630118acc4146101415780630322ed98146101565780630cdd098514610169578063151d30d1146101ba5780632e2194d8146101d4575b5f80fd5b61015461014f3660046145ff565b610357565b005b61015461016436600461463a565b61071b565b6101a761017736600461463a565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b6101c2600a81565b60405160ff90911681526020016101b1565b6101e76101e236600461463a565b6108eb565b6040516001600160401b0390911681526020016101b1565b61015461020d366004614665565b610901565b61021b61271081565b60405161ffff90911681526020016101b1565b61015461023c3660046146a3565b6109e0565b61015461024f3660046146bc565b610a0b565b6101a76102623660046146f8565b610bdb565b6101e761027536600461463a565b610bf4565b6101546102883660046145ff565b610c08565b61015461029b3660046146bc565b610ce8565b6101a76102ae366004614713565b610ef7565b6101a76102c1366004614733565b610f0a565b6101546102d43660046146a3565b610f36565b6102e76005600160991b0181565b6040516001600160a01b0390911681526020016101b1565b61015461030d36600461463a565b6110f3565b61015461032036600461463a565b611379565b6101c2601481565b61034061033b36600461463a565b61148d565b6040516101b191906147a8565b6101e76202a30081565b5f8381527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408120600101545f805160206150498339815191529184156103a9576103a6828561156c565b90505b5f868152600684016020526040808220815161010081019092528054829060ff1660048111156103db576103db614794565b60048111156103ec576103ec614794565b8152815461010090046001600160a01b031660208201526001820154604082015260028201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b909104811660c083015260039092015490911660e09091015290505f6104688461148d565b905060028251600481111561047f5761047f614794565b146104d15760405162461bcd60e51b815260206004820152602a60248201525f805160206150698339815191526044820152696e6f742061637469766560b01b60648201526084015b60405180910390fd5b60208201516001600160a01b031633146105365760405162461bcd60e51b815260206004820152603360248201525f805160206150698339815191526044820152723737ba1037bbb732b210313c9039b2b73232b960691b60648201526084016104c8565b600382528051600290600581111561055057610550614794565b036105a1576105628260600151611808565b5f82606001518260a001516105779190614896565b90506105838582611815565b506001600160401b0390811660e0850152421660a0840152506105c4565b60808101516001600160401b0390811660e0808501919091528201511660a08301525b5f88815260068601602052604090208251815484929190829060ff191660018360048111156105f5576105f5614794565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b031990911617815560408083015160018301556060830151600283018054608086015160a08088015160c08901516001600160401b03908116600160c01b026001600160c01b03928216600160801b02929092166001600160801b03948216600160401b026001600160801b0319909616978216979097179490941792909216949094171790915560e090940151600390930180549390941667ffffffffffffffff199390931692909217909255830151905185918a917f5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c6991610709916001600160401b0391909116815260200190565b60405180910390a35050505050505050565b5f8181525f805160206150c983398151915260205260408082208151610100810190925280545f8051602061508983398151915293929190829060ff16600581111561076957610769614794565b600581111561077a5761077a614794565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e090910152909150815160058111156107ff576107ff614794565b146108645760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016104c8565b6005600160991b016001600160a01b031663ee5b48eb6108898584608001515f61193f565b6040518263ffffffff1660e01b81526004016108a591906148d8565b6020604051808303815f875af11580156108c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e5919061490a565b50505050565b5f6108fb64e8d4a5100083614921565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061094a575080546001600160401b03808416911610155b156109685760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556109938484611b5c565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f6109ea82611b76565b9050610a0781606001516001600160401b03168260400151611ee9565b5050565b5f805160206150498339815191525f610a2384611f1f565b90505f80610a348360400151612100565b50915091505f610a438361148d565b9050816001600160401b031681608001516001600160401b03161015610a7b5760405162461bcd60e51b81526004016104c890614940565b5f8681526006860160205260409020600201546001600160401b03808416600160c01b909204161115610ac05760405162461bcd60e51b81526004016104c890614982565b60015f87815260068701602052604090205460ff166004811115610ae657610ae6614794565b14610b4f5760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a2064656c65676174696f6e4960448201527211081b9bdd081c195b991a5b99c81859191959606a1b60648201526084016104c8565b5f868152600686016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092179092559251928352841691859189917f245fc69b36e168426e0306fc8d8300661b9af297c7958820dbf804f9f63e7064910160405180910390a450505050505050565b5f6108fb6001600160401b03831664e8d4a510006149cb565b5f610bfe8261148d565b60a0015192915050565b5f805160206150498339815191525f610c208561148d565b5f86815260058401602052604090205460c0820151919250610c5291620100009091046001600160401b0316906149e2565b6001600160401b0316421015610cc65760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a206d696e696d756d207374616044820152721ad948191d5c985d1a5bdb881b9bdd081b595d606a1b60648201526084016104c8565b8315610cd857610cd6858461156c565b505b610ce18561233b565b5050505050565b5f805160206150498339815191525f610d0084611f1f565b90505f80610d118360400151612100565b50915091505f610d208361148d565b9050816001600160401b031681608001516001600160401b03161015610d585760405162461bcd60e51b81526004016104c890614940565b5f8681526006860160205260409020600301546001600160401b0380841691161115610d965760405162461bcd60e51b81526004016104c890614982565b60035f87815260068701602052604090205460ff166004811115610dbc57610dbc614794565b14610e105760405162461bcd60e51b815260206004820152603160248201525f805160206150698339815191526044820152701b9bdd081c195b991a5b99c81859191959607a1b60648201526084016104c8565b5f868152600686016020908152604091829020805460ff19166004908117808355845161010080820187529281529190046001600160a01b031692810183905260018201549381019390935260028101546001600160401b0380821660608601819052600160401b830482166080870152600160801b8304821660a0870152600160c01b909204811660c086015260039092015490911660e0840152610eb591611ee9565b826001600160401b031684887f52e9b1eaef84d46cda83ccb9d427267bc4d04f756b4a32c8302722b79e5c65ab60405160405180910390a45050505050505050565b5f610f038333846126d9565b9392505050565b5f610f13612a4e565b610f1e848484612a85565b9050610f0360015f805160206150a983398151915255565b5f805160206150898339815191525f610f4e83611f1f565b90505f80610f5f8360400151612cbe565b9150915080610fc15760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016104c8565b5f82815260078501602052604081208054610fdb90614a02565b905011801561100d575060015f83815260088601602052604090205460ff16600581111561100b5761100b614794565b145b6110295760405162461bcd60e51b81526004016104c890614a3a565b5f828152600785016020526040812061104191614547565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408082208151610100810190925280545f8051602061504983398151915293929190829060ff16600481111561115457611154614794565b600481111561116557611165614794565b8152815461010090046001600160a01b03166020820152600180830154604083015260028301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e090910152909150815160048111156111ec576111ec614794565b148061120a575060038151600481111561120857611208614794565b145b61125e5760405162461bcd60e51b815260206004820152603260248201525f80516020615069833981519152604482015271737461747573206e6f742070656e64696e6760701b60648201526084016104c8565b5f61126c826040015161148d565b905080608001516001600160401b03165f036112f05760405162461bcd60e51b815260206004820152603f60248201527f506f5356616c696461746f724d616e616765723a20636f756c64206e6f74206660448201527f696e642076616c696461746f7220666f722064656c65676174696f6e2049440060648201526084016104c8565b6005600160991b016001600160a01b031663ee5b48eb61131d846040015184608001518560a0015161193f565b6040518263ffffffff1660e01b815260040161133991906148d8565b6020604051808303815f875af1158015611355573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce1919061490a565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f805160206150898339815191529291906113c190614a02565b90501180156113f3575060015f83815260088301602052604090205460ff1660058111156113f1576113f1614794565b145b61140f5760405162461bcd60e51b81526004016104c890614a3a565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916114489190600401614a81565b6020604051808303815f875af1158015611464573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611488919061490a565b505050565b61149561457e565b5f8281525f805160206150c98339815191526020526040908190208151610100810190925280545f80516020615089833981519152929190829060ff1660058111156114e3576114e3614794565b60058111156114f4576114f4614794565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156115b7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115de9190810190614b82565b91509150806116415760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016104c8565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611684573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a8919061490a565b82511461170c5760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016104c8565b60208201516001600160a01b0316156117825760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016104c8565b5f806117918460400151612e5f565b915091508187146117fe5760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016104c8565b9695505050505050565b611812815f613037565b50565b5f805f61182185613291565b5f8681525f805160206150c983398151915260205260408120600301805467ffffffffffffffff60401b1916600160401b6001600160401b038916021790559091505f80516020615089833981519152906005600160991b0163ee5b48eb61188a89868a61193f565b6040518263ffffffff1660e01b81526004016118a691906148d8565b6020604051808303815f875af11580156118c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118e6919061490a565b604080516001600160401b0389811682526020820184905282519394508616928a927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3919350909150505b9250929050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b60028110156119b857611978816001614c6a565b6119839060086149cb565b5081515f9083908390811061199a5761199a614c7d565b60200101906001600160f81b03191690815f1a905350600101611964565b505f5b6004811015611a1b576119cf816003614c6a565b6119da9060086149cb565b6001901c60f81b826119ed836002614c91565b815181106119fd576119fd614c7d565b60200101906001600160f81b03191690815f1a9053506001016119bb565b505f5b6020811015611a7d57611a3281601f614c6a565b611a3d9060086149cb565b86901c60f81b82611a4f836006614c91565b81518110611a5f57611a5f614c7d565b60200101906001600160f81b03191690815f1a905350600101611a1e565b505f5b6008811015611ae857611a94816007614c6a565b611a9f9060086149cb565b6001600160401b038616901c60f81b82611aba836026614c91565b81518110611aca57611aca614c7d565b60200101906001600160f81b03191690815f1a905350600101611a80565b505f5b6008811015611b5357611aff816007614c6a565b611b0a9060086149cb565b6001600160401b038516901c60f81b82611b2583602e614c91565b81518110611b3557611b35614c7d565b60200101906001600160f81b03191690815f1a905350600101611aeb565b50949350505050565b611b64613313565b611b6d8261335e565b610a07816133ca565b611b7e61457e565b5f805160206150898339815191525f611b9684611f1f565b90505f80611ba78360400151612cbe565b915091508015611c0c5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016104c8565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115611c3e57611c3e614794565b6005811115611c4f57611c4f614794565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115611cd657611cd6614794565b1480611cf45750600182516005811115611cf257611cf2614794565b145b611d535760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016104c8565b600382516005811115611d6857611d68614794565b03611d7557506004611d79565b5060055b6020808301515f90815260098801909152604081205581816005811115611da257611da2614794565b90816005811115611db557611db5614794565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115611de957611de9614794565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115611eb457611eb4614794565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab0054610a07906001600160a01b0316828461347e565b60408051606080820183525f8083526020830181905292820152905f805160206150898339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611f94573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611fbb9190810190614b82565b91509150806120225760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016104c8565b82548251146120855760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016104c8565b60208201516001600160a01b0316156120f85760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016104c8565b509392505050565b5f805f83516036146121245760405162461bcd60e51b81526004016104c890614ca4565b5f805b60028110156121735761213b816001614c6a565b6121469060086149cb565b61ffff1686828151811061215c5761215c614c7d565b016020015160f81c901b9190911790600101612127565b5061ffff8116156121965760405162461bcd60e51b81526004016104c890614ced565b5f805b60048110156121f1576121ad816003614c6a565b6121b89060086149cb565b63ffffffff16876121ca836002614c91565b815181106121da576121da614c7d565b016020015160f81c901b9190911790600101612199565b5063ffffffff81166003146122185760405162461bcd60e51b81526004016104c890614d30565b5f805b602081101561226d5761222f81601f614c6a565b61223a9060086149cb565b88612246836006614c91565b8151811061225657612256614c7d565b016020015160f81c901b919091179060010161221b565b505f805b60088110156122cc57612285816007614c6a565b6122909060086149cb565b6001600160401b0316896122a5836026614c91565b815181106122b5576122b5614c7d565b016020015160f81c901b9190911790600101612271565b505f805b600881101561232b576122e4816007614c6a565b6122ef9060086149cb565b6001600160401b03168a61230483602e614c91565b8151811061231457612314614c7d565b016020015160f81c901b91909117906001016122d0565b5091989097509095509350505050565b5f8181525f805160206150c983398151915260205260408082208151610100810190925280545f8051602061508983398151915293929190829060ff16600581111561238957612389614794565b600581111561239a5761239a614794565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e0909101529091508151600581111561242257612422614794565b1461247e5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016104c8565b60408101516001600160a01b0316336001600160a01b0316146124f85760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016104c8565b6125058160a00151611808565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff1916600183600581111561254957612549614794565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f6126158461260f81613291565b5f61193f565b60405163ee5b48eb60e01b81529091505f906005600160991b019063ee5b48eb906126449085906004016148d8565b6020604051808303815f875af1158015612660573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612684919061490a565b60a0840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b5f6126e2612a4e565b5f805160206150498339815191525f6126fd6101e2856134dd565b90505f6127098761148d565b905060028151600581111561272057612720614794565b1461277f5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a2076616c696461746f72206e6044820152686f742061637469766560b81b60648201526084016104c8565b61278882613513565b5f828260a0015161279991906149e2565b600485015460608401519192506127bb916001600160401b0390911690614d77565b6001600160401b0316816001600160401b0316111561283a5760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a206d6178696d756d2076616c6044820152741a59185d1bdc881dd95a59da1d081c995858da1959605a1b60648201526084016104c8565b5f806128468a84611815565b915091505f8a8360405160200161287492919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815282825280516020909101206101008301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905260a0850181905290881660c085015260e090930183905284835260068b01909152902081518154829060ff1916600183600481111561290f5761290f614794565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002860180546080808a015160a08b015160c08c01516001600160401b039687166001600160801b031990951694909417600160401b92871692909202919091176001600160801b0316600160801b918616919091026001600160c01b031617600160c01b928516929092029190911790915560e0909701516003909601805467ffffffffffffffff191696821696909617909555815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49650505050505050610f0360015f805160206150a983398151915255565b5f805160206150a9833981519152805460011901612a7f57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020615049833981519152906001600160401b0316612ad160408601602087016146f8565b6001600160401b03161015612b405760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d696e60448201526e1039ba30b5b290323ab930ba34b7b760891b60648201526084016104c8565b6003810154612b526020860186614db1565b61ffff1610158015612b765750612710612b6f6020860186614db1565b61ffff1611155b612b925760405162461bcd60e51b81526004016104c890614dcc565b8054831015612bf55760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152687420746f6f206c6f7760b81b60648201526084016104c8565b8060010154831115612c5c5760405162461bcd60e51b815260206004820152602a60248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152690e840e8dede40d0d2ced60b31b60648201526084016104c8565b5f612c66846134dd565b90505f612c72826108eb565b90505f612c7f888361351e565b5f81815260058601602052604090209091508790612c9d8282614e17565b509098975050505050505050565b60015f805160206150a983398151915255565b5f808251602714612ce15760405162461bcd60e51b81526004016104c890614ca4565b5f805b6002811015612d3057612cf8816001614c6a565b612d039060086149cb565b61ffff16858281518110612d1957612d19614c7d565b016020015160f81c901b9190911790600101612ce4565b5061ffff811615612d535760405162461bcd60e51b81526004016104c890614ced565b5f805b6004811015612dae57612d6a816003614c6a565b612d759060086149cb565b63ffffffff1686612d87836002614c91565b81518110612d9757612d97614c7d565b016020015160f81c901b9190911790600101612d56565b5063ffffffff8116600214612dd55760405162461bcd60e51b81526004016104c890614d30565b5f805b6020811015612e2a57612dec81601f614c6a565b612df79060086149cb565b87612e03836006614c91565b81518110612e1357612e13614c7d565b016020015160f81c901b9190911790600101612dd8565b505f86602681518110612e3f57612e3f614c7d565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e14612e825760405162461bcd60e51b81526004016104c890614ca4565b5f805b6002811015612ed157612e99816001614c6a565b612ea49060086149cb565b61ffff16858281518110612eba57612eba614c7d565b016020015160f81c901b9190911790600101612e85565b5061ffff811615612ef45760405162461bcd60e51b81526004016104c890614ced565b5f805b6004811015612f4f57612f0b816003614c6a565b612f169060086149cb565b63ffffffff1686612f28836002614c91565b81518110612f3857612f38614c7d565b016020015160f81c901b9190911790600101612ef7565b5063ffffffff8116600414612f765760405162461bcd60e51b81526004016104c890614d30565b5f805b6020811015612fcb57612f8d81601f614c6a565b612f989060086149cb565b87612fa4836006614c91565b81518110612fb457612fb4614c7d565b016020015160f81c901b9190911790600101612f79565b505f805b600881101561302a57612fe3816007614c6a565b612fee9060086149cb565b6001600160401b031688613003836026614c91565b8151811061301357613013614c7d565b016020015160f81c901b9190911790600101612fcf565b5090969095509350505050565b604080516080810182527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb03548082527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb045460208301527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0554928201929092527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06546001600160401b031660608201525f8051602061508983398151915291429190158061311d575060028301548151613119916001600160401b031690614c91565b8210155b15613143576001600160401b038516606082015281815260408101516020820152613162565b848160600181815161315591906149e2565b6001600160401b03169052505b6060810151613172906064614d77565b602082015160028501546001600160401b03929092169161319d9190600160401b900460ff166149cb565b10156132015760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016104c8565b831561322a57846001600160401b0316816040018181516132229190614c91565b905250613249565b846001600160401b0316816040018181516132459190614c6a565b9052505b805160038401556020810151600484015560408101516005840155606001516006909201805467ffffffffffffffff19166001600160401b0390931692909217909155505050565b5f8181525f805160206150c98339815191526020526040812060030180545f80516020615089833981519152916001600160401b0390911690836132d483614e6d565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661335c57604051631afcd79f60e31b815260040160405180910390fd5b565b613366613313565b61336f81613a58565b611812608082013560a083013561338c60e0850160c086016146f8565b61339d610100860160e08701614db1565b61ffff166133b361012087016101008801614e92565b6133c561014088016101208901614eb2565b613a79565b6133d2613313565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab006001600160a01b03821661345e5760405162461bcd60e51b815260206004820152602c60248201527f4552433230546f6b656e5374616b696e674d616e616765723a207a65726f207460448201526b6f6b656e206164647265737360a01b60648201526084016104c8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b0383811660248301526044820183905261148891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613cbd565b5f6108fb827f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00546001600160a01b031690613d1e565b611812816001613037565b5f5f805160206150898339815191524261353e60408601602087016146f8565b6001600160401b0316116135b05760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016104c8565b6135c060408501602086016146f8565b6001600160401b03166135d66202a30042614c91565b116136495760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016104c8565b83356136a15760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016104c8565b83355f908152600982016020526040902054156137115760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016104c8565b61371e6040850185614ecd565b90506030146137855760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016104c8565b61378e83613513565b5f806138286040518060a0016040528085600101548152602001885f01358152602001876001600160401b031681526020018860200160208101906137d391906146f8565b6001600160401b031681526020016137ee60408a018a614ecd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250613e80565b5f828152600786016020526040902091935091506138468282614f53565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906138739085906004016148d8565b6020604051808303815f875af115801561388f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138b3919061490a565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff1916600183600581111561393557613935614794565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b91613a2a91908e01908e016146f8565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b613a60613313565b613a68614225565b613a70614235565b6118128161423d565b613a81613313565b5f8051602061504983398151915283613aed5760405162461bcd60e51b815260206004820152602860248201527f506f5356616c696461746f724d616e616765723a207a65726f2064656c65676160448201526774696f6e2066656560c01b60648201526084016104c8565b612710841115613b0f5760405162461bcd60e51b81526004016104c890614dcc565b85871115613b775760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642073746160448201526e6b6520616d6f756e742072616e676560881b60648201526084016104c8565b5f8360ff1611613be45760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a207a65726f206d6178696d75604482015271369039ba30b5b29036bab63a34b83634b2b960711b60648201526084016104c8565b600a60ff84161115613c565760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d617860448201527434b6bab69039ba30b5b29036bab63a34b83634b2b960591b60648201526084016104c8565b95865560018601949094556002850180546001600160401b0390941667ffffffffffffffff19909416939093179092556003840155600490920180546001600160a01b03909216600160401b026001600160e01b031990921660ff90931692909217179055565b5f613cd16001600160a01b038416836143ea565b905080515f14158015613cf5575080806020019051810190613cf39190615012565b155b1561148857604051635274afe760e01b81526001600160a01b03841660048201526024016104c8565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015613d64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d88919061490a565b9050613d9f6001600160a01b0385163330866143f7565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015613de3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e07919061490a565b9050818111613e6d5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104c8565b613e778282614c6a565b95945050505050565b5f6060826080015151603014613eea5760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016104c8565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613f6157613f21816001614c6a565b613f2c9060086149cb565b5081515f90839083908110613f4357613f43614c7d565b60200101906001600160f81b03191690815f1a905350600101613f0d565b505f5b6004811015613fbf57613f78816003614c6a565b613f839060086149cb565b505f82613f91836002614c91565b81518110613fa157613fa1614c7d565b60200101906001600160f81b03191690815f1a905350600101613f64565b505f5b602081101561401c5784518160208110613fde57613fde614c7d565b1a60f81b82613fee836006614c91565b81518110613ffe57613ffe614c7d565b60200101906001600160f81b03191690815f1a905350600101613fc2565b505f5b602081101561407c578460200151816020811061403e5761403e614c7d565b1a60f81b8261404e836026614c91565b8151811061405e5761405e614c7d565b60200101906001600160f81b03191690815f1a90535060010161401f565b505f5b60088110156140f057614093816007614c6a565b61409e9060086149cb565b60ff1685604001516001600160401b0316901c60f81b828260466140c29190614c91565b815181106140d2576140d2614c7d565b60200101906001600160f81b03191690815f1a90535060010161407f565b505f5b603081101561415b578460800151818151811061411257614112614c7d565b01602001516001600160f81b0319168261412d83604e614c91565b8151811061413d5761413d614c7d565b60200101906001600160f81b03191690815f1a9053506001016140f3565b505f5b60088110156141cd57614172816007614c6a565b61417d9060086149cb565b60608601516001600160401b0390811691161c60f81b8261419f83607e614c91565b815181106141af576141af614c7d565b60200101906001600160f81b03191690815f1a90535060010161415e565b506002816040516141de919061502d565b602060405180830381855afa1580156141f9573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061421c919061490a565b94909350915050565b61422d613313565b61335c614430565b61335c613313565b614245613313565b80355f8051602061508983398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb015560146142916080840160608501614e92565b60ff1611156142fe5760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016104c8565b5f61430f6080840160608501614e92565b60ff16116143775760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016104c8565b6143876080830160608401614e92565b60028201805460ff92909216600160401b0260ff60401b199092169190911790556143b860608301604084016146f8565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b6060610f0383835f614438565b6040516001600160a01b0384811660248301528381166044830152606482018390526108e59186918216906323b872dd906084016134ab565b612cab613313565b60608147101561445d5760405163cd78605960e01b81523060048201526024016104c8565b5f80856001600160a01b03168486604051614478919061502d565b5f6040518083038185875af1925050503d805f81146144b2576040519150601f19603f3d011682016040523d82523d5f602084013e6144b7565b606091505b50915091506117fe8683836060826144d7576144d28261451e565b610f03565b81511580156144ee57506001600160a01b0384163b155b1561451757604051639996b31560e01b81526001600160a01b03851660048201526024016104c8565b5080610f03565b80511561452e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50805461455390614a02565b5f825580601f10614562575050565b601f0160209004905f5260205f209081019061181291906145c2565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156145d6575f81556001016145c3565b5090565b8015158114611812575f80fd5b803563ffffffff811681146145fa575f80fd5b919050565b5f805f60608486031215614611575f80fd5b833592506020840135614623816145da565b9150614631604085016145e7565b90509250925092565b5f6020828403121561464a575f80fd5b5035919050565b6001600160a01b0381168114611812575f80fd5b5f80828403610160811215614678575f80fd5b61014080821215614687575f80fd5b849350830135905061469881614651565b809150509250929050565b5f602082840312156146b3575f80fd5b610f03826145e7565b5f80604083850312156146cd575f80fd5b6146d6836145e7565b946020939093013593505050565b6001600160401b0381168114611812575f80fd5b5f60208284031215614708575f80fd5b8135610f03816146e4565b5f8060408385031215614724575f80fd5b50508035926020909101359150565b5f805f8385036080811215614746575f80fd5b84356001600160401b0381111561475b575f80fd5b85016060818803121561476c575f80fd5b93506040601f198201121561477f575f80fd5b50602084019150606084013590509250925092565b634e487b7160e01b5f52602160045260245ffd5b8151610100820190600681106147cc57634e487b7160e01b5f52602160045260245ffd5b808352506020830151602083015260408301516147f460408401826001600160a01b03169052565b50606083015161480f60608401826001600160401b03169052565b50608083015161482a60808401826001600160401b03169052565b5060a083015161484560a08401826001600160401b03169052565b5060c083015161486060c08401826001600160401b03169052565b5060e083015161487b60e08401826001600160401b03169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0382811682821603908082111561487b5761487b614882565b5f5b838110156148d05781810151838201526020016148b8565b50505f910152565b602081525f82518060208401526148f68160408501602087016148b6565b601f01601f19169190910160400192915050565b5f6020828403121561491a575f80fd5b5051919050565b5f8261493b57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b80820281158282048414176108fb576108fb614882565b6001600160401b0381811683821601908082111561487b5761487b614882565b600181811c90821680614a1657607f821691505b602082108103614a3457634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f8454614a9381614a02565b806020870152604060018084165f8114614ab45760018114614ad057614afd565b60ff19851660408a0152604084151560051b8a01019550614afd565b895f5260205f205f5b85811015614af45781548b8201860152908301908801614ad9565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614b4157614b41614b0b565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b6f57614b6f614b0b565b604052919050565b80516145fa816145da565b5f8060408385031215614b93575f80fd5b82516001600160401b0380821115614ba9575f80fd5b9084019060608287031215614bbc575f80fd5b614bc4614b1f565b82518152602080840151614bd781614651565b82820152604084015183811115614bec575f80fd5b80850194505087601f850112614c00575f80fd5b835183811115614c1257614c12614b0b565b614c24601f8201601f19168301614b47565b93508084528882828701011115614c39575f80fd5b614c48818386018488016148b6565b50826040830152819550614c5d818801614b77565b9450505050509250929050565b818103818111156108fb576108fb614882565b634e487b7160e01b5f52603260045260245ffd5b808201808211156108fb576108fb614882565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b6001600160401b03818116838216028082169190828114614d9a57614d9a614882565b505092915050565b61ffff81168114611812575f80fd5b5f60208284031215614dc1575f80fd5b8135610f0381614da2565b6020808252602b908201527f506f5356616c696461746f724d616e616765723a20696e76616c69642064656c60408201526a65676174696f6e2066656560a81b606082015260800190565b8135614e2281614da2565b61ffff8116905081548161ffff1982161783556020840135614e43816146e4565b69ffffffffffffffff00008160101b168369ffffffffffffffffffff198416171784555050505050565b5f6001600160401b03808316818103614e8857614e88614882565b6001019392505050565b5f60208284031215614ea2575f80fd5b813560ff81168114610f03575f80fd5b5f60208284031215614ec2575f80fd5b8135610f0381614651565b5f808335601e19843603018112614ee2575f80fd5b8301803591506001600160401b03821115614efb575f80fd5b602001915036819003821315611938575f80fd5b601f82111561148857805f5260205f20601f840160051c81016020851015614f345750805b601f840160051c820191505b81811015610ce1575f8155600101614f40565b81516001600160401b03811115614f6c57614f6c614b0b565b614f8081614f7a8454614a02565b84614f0f565b602080601f831160018114614fb3575f8415614f9c5750858301515b5f19600386901b1c1916600185901b17855561500a565b5f85815260208120601f198616915b82811015614fe157888601518255948401946001909101908401614fc2565b5085821015614ffe57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208284031215615022575f80fd5b8151610f03816145da565b5f825161503e8184602087016148b6565b919091019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00506f5356616c696461746f724d616e616765723a2064656c65676174696f6e20e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", + Bin: "0x608060405234801561000f575f80fd5b506040516151fe3803806151fe83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6150b18061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061013d575f3560e01c806376f78621116100b4578063b771b3bc11610079578063b771b3bc146102d9578063ba3a4b97146102ff578063bee0a03f14610312578063c974d1b614610325578063d5f20ff61461032d578063df93d8de1461034d575f80fd5b806376f786211461027a57806398f3e2b41461028d5780639e1bc4ef146102a0578063a13fd29d146102b3578063a3a65e48146102c6575f80fd5b8063330a0a3a11610105578063330a0a3a146101ff57806335455ded14610212578063467ef06f1461022e5780635297fae614610241578063620658561461025457806366435abf14610267575f80fd5b80630118acc4146101415780630322ed98146101565780630cdd098514610169578063151d30d1146101ba5780632e2194d8146101d4575b5f80fd5b61015461014f3660046145bb565b610357565b005b6101546101643660046145f6565b61070e565b6101a76101773660046145f6565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b6101c2600a81565b60405160ff90911681526020016101b1565b6101e76101e23660046145f6565b6108de565b6040516001600160401b0390911681526020016101b1565b61015461020d366004614621565b6108f4565b61021b61271081565b60405161ffff90911681526020016101b1565b61015461023c36600461465f565b6109d3565b61015461024f366004614678565b6109fe565b6101a76102623660046146b4565b610bce565b6101e76102753660046145f6565b610be7565b6101546102883660046145bb565b610bfb565b61015461029b366004614678565b610cdb565b6101a76102ae3660046146cf565b610eea565b6101a76102c13660046146ef565b610efd565b6101546102d436600461465f565b610f29565b6102e76005600160991b0181565b6040516001600160a01b0390911681526020016101b1565b61015461030d3660046145f6565b6110e6565b6101546103203660046145f6565b61136c565b6101c2601481565b61034061033b3660046145f6565b611480565b6040516101b19190614764565b6101e76202a30081565b5f8381527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408120600101545f805160206150058339815191529184156103a9576103a6828561155f565b90505b5f868152600684016020526040808220815161010081019092528054829060ff1660048111156103db576103db614750565b60048111156103ec576103ec614750565b8152815461010090046001600160a01b031660208201526001820154604082015260028201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b909104811660c083015260039092015490911660e09091015290505f61046884611480565b905060028251600481111561047f5761047f614750565b146104d15760405162461bcd60e51b815260206004820152602a60248201525f805160206150258339815191526044820152696e6f742061637469766560b01b60648201526084015b60405180910390fd5b60208201516001600160a01b031633146105365760405162461bcd60e51b815260206004820152603360248201525f805160206150258339815191526044820152723737ba1037bbb732b210313c9039b2b73232b960691b60648201526084016104c8565b600382528051600290600581111561055057610550614750565b03610594575f82606001518260a0015161056a9190614852565b905061057685826117fb565b506001600160401b0390811660e0850152421660a0840152506105b7565b60808101516001600160401b0390811660e0808501919091528201511660a08301525b5f88815260068601602052604090208251815484929190829060ff191660018360048111156105e8576105e8614750565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b031990911617815560408083015160018301556060830151600283018054608086015160a08088015160c08901516001600160401b03908116600160c01b026001600160c01b03928216600160801b02929092166001600160801b03948216600160401b026001600160801b0319909616978216979097179490941792909216949094171790915560e090940151600390930180549390941667ffffffffffffffff199390931692909217909255830151905185918a917f5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69916106fc916001600160401b0391909116815260200190565b60405180910390a35050505050505050565b5f8181525f8051602061508583398151915260205260408082208151610100810190925280545f8051602061504583398151915293929190829060ff16600581111561075c5761075c614750565b600581111561076d5761076d614750565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e090910152909150815160058111156107f2576107f2614750565b146108575760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016104c8565b6005600160991b016001600160a01b031663ee5b48eb61087c8584608001515f61197c565b6040518263ffffffff1660e01b81526004016108989190614894565b6020604051808303815f875af11580156108b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d891906148c6565b50505050565b5f6108ee64e8d4a51000836148dd565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061093d575080546001600160401b03808416911610155b1561095b5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556109868484611b99565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f6109dd82611bb3565b90506109fa81606001516001600160401b03168260400151611f26565b5050565b5f805160206150058339815191525f610a1684611f5c565b90505f80610a27836040015161213d565b50915091505f610a3683611480565b9050816001600160401b031681608001516001600160401b03161015610a6e5760405162461bcd60e51b81526004016104c8906148fc565b5f8681526006860160205260409020600201546001600160401b03808416600160c01b909204161115610ab35760405162461bcd60e51b81526004016104c89061493e565b60015f87815260068701602052604090205460ff166004811115610ad957610ad9614750565b14610b425760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a2064656c65676174696f6e4960448201527211081b9bdd081c195b991a5b99c81859191959606a1b60648201526084016104c8565b5f868152600686016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092179092559251928352841691859189917f245fc69b36e168426e0306fc8d8300661b9af297c7958820dbf804f9f63e7064910160405180910390a450505050505050565b5f6108ee6001600160401b03831664e8d4a51000614987565b5f610bf182611480565b60a0015192915050565b5f805160206150058339815191525f610c1385611480565b5f86815260058401602052604090205460c0820151919250610c4591620100009091046001600160401b03169061499e565b6001600160401b0316421015610cb95760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a206d696e696d756d207374616044820152721ad948191d5c985d1a5bdb881b9bdd081b595d606a1b60648201526084016104c8565b8315610ccb57610cc9858461155f565b505b610cd485612378565b5050505050565b5f805160206150058339815191525f610cf384611f5c565b90505f80610d04836040015161213d565b50915091505f610d1383611480565b9050816001600160401b031681608001516001600160401b03161015610d4b5760405162461bcd60e51b81526004016104c8906148fc565b5f8681526006860160205260409020600301546001600160401b0380841691161115610d895760405162461bcd60e51b81526004016104c89061493e565b60035f87815260068701602052604090205460ff166004811115610daf57610daf614750565b14610e035760405162461bcd60e51b815260206004820152603160248201525f805160206150258339815191526044820152701b9bdd081c195b991a5b99c81859191959607a1b60648201526084016104c8565b5f868152600686016020908152604091829020805460ff19166004908117808355845161010080820187529281529190046001600160a01b031692810183905260018201549381019390935260028101546001600160401b0380821660608601819052600160401b830482166080870152600160801b8304821660a0870152600160c01b909204811660c086015260039092015490911660e0840152610ea891611f26565b826001600160401b031684887f52e9b1eaef84d46cda83ccb9d427267bc4d04f756b4a32c8302722b79e5c65ab60405160405180910390a45050505050505050565b5f610ef6833384612691565b9392505050565b5f610f066129fd565b610f11848484612a34565b9050610ef660015f8051602061506583398151915255565b5f805160206150458339815191525f610f4183611f5c565b90505f80610f528360400151612c6d565b9150915080610fb45760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016104c8565b5f82815260078501602052604081208054610fce906149be565b9050118015611000575060015f83815260088601602052604090205460ff166005811115610ffe57610ffe614750565b145b61101c5760405162461bcd60e51b81526004016104c8906149f6565b5f828152600785016020526040812061103491614503565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408082208151610100810190925280545f8051602061500583398151915293929190829060ff16600481111561114757611147614750565b600481111561115857611158614750565b8152815461010090046001600160a01b03166020820152600180830154604083015260028301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e090910152909150815160048111156111df576111df614750565b14806111fd57506003815160048111156111fb576111fb614750565b145b6112515760405162461bcd60e51b815260206004820152603260248201525f80516020615025833981519152604482015271737461747573206e6f742070656e64696e6760701b60648201526084016104c8565b5f61125f8260400151611480565b905080608001516001600160401b03165f036112e35760405162461bcd60e51b815260206004820152603f60248201527f506f5356616c696461746f724d616e616765723a20636f756c64206e6f74206660448201527f696e642076616c696461746f7220666f722064656c65676174696f6e2049440060648201526084016104c8565b6005600160991b016001600160a01b031663ee5b48eb611310846040015184608001518560a0015161197c565b6040518263ffffffff1660e01b815260040161132c9190614894565b6020604051808303815f875af1158015611348573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd491906148c6565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f805160206150458339815191529291906113b4906149be565b90501180156113e6575060015f83815260088301602052604090205460ff1660058111156113e4576113e4614750565b145b6114025760405162461bcd60e51b81526004016104c8906149f6565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161143b9190600401614a3d565b6020604051808303815f875af1158015611457573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147b91906148c6565b505050565b61148861453a565b5f8281525f805160206150858339815191526020526040908190208151610100810190925280545f80516020615045833981519152929190829060ff1660058111156114d6576114d6614750565b60058111156114e7576114e7614750565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156115aa573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115d19190810190614b3e565b91509150806116345760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016104c8565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611677573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169b91906148c6565b8251146116ff5760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016104c8565b60208201516001600160a01b0316156117755760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016104c8565b5f806117848460400151612e0e565b915091508187146117f15760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016104c8565b9695505050505050565b5f8281525f80516020615085833981519152602052604081206003015481905f8051602061504583398151915290600160401b90046001600160401b03908116908516811161185b576118566118518287614852565b612fe6565b61186d565b61186d6118688683614852565b612ff4565b5f61187787612ffe565b5f8881526008850160205260408120600301805467ffffffffffffffff60401b1916600160401b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6118c78a858b61197c565b6040518263ffffffff1660e01b81526004016118e39190614894565b6020604051808303815f875af11580156118ff573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192391906148c6565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b60028110156119f5576119b5816001614c26565b6119c0906008614987565b5081515f908390839081106119d7576119d7614c39565b60200101906001600160f81b03191690815f1a9053506001016119a1565b505f5b6004811015611a5857611a0c816003614c26565b611a17906008614987565b6001901c60f81b82611a2a836002614c4d565b81518110611a3a57611a3a614c39565b60200101906001600160f81b03191690815f1a9053506001016119f8565b505f5b6020811015611aba57611a6f81601f614c26565b611a7a906008614987565b86901c60f81b82611a8c836006614c4d565b81518110611a9c57611a9c614c39565b60200101906001600160f81b03191690815f1a905350600101611a5b565b505f5b6008811015611b2557611ad1816007614c26565b611adc906008614987565b6001600160401b038616901c60f81b82611af7836026614c4d565b81518110611b0757611b07614c39565b60200101906001600160f81b03191690815f1a905350600101611abd565b505f5b6008811015611b9057611b3c816007614c26565b611b47906008614987565b6001600160401b038516901c60f81b82611b6283602e614c4d565b81518110611b7257611b72614c39565b60200101906001600160f81b03191690815f1a905350600101611b28565b50949350505050565b611ba1613080565b611baa826130cb565b6109fa81613137565b611bbb61453a565b5f805160206150458339815191525f611bd384611f5c565b90505f80611be48360400151612c6d565b915091508015611c495760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016104c8565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115611c7b57611c7b614750565b6005811115611c8c57611c8c614750565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115611d1357611d13614750565b1480611d315750600182516005811115611d2f57611d2f614750565b145b611d905760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016104c8565b600382516005811115611da557611da5614750565b03611db257506004611db6565b5060055b6020808301515f90815260098801909152604081205581816005811115611ddf57611ddf614750565b90816005811115611df257611df2614750565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115611e2657611e26614750565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115611ef157611ef1614750565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00546109fa906001600160a01b031682846131eb565b60408051606080820183525f8083526020830181905292820152905f805160206150458339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611fd1573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ff89190810190614b3e565b915091508061205f5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016104c8565b82548251146120c25760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016104c8565b60208201516001600160a01b0316156121355760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016104c8565b509392505050565b5f805f83516036146121615760405162461bcd60e51b81526004016104c890614c60565b5f805b60028110156121b057612178816001614c26565b612183906008614987565b61ffff1686828151811061219957612199614c39565b016020015160f81c901b9190911790600101612164565b5061ffff8116156121d35760405162461bcd60e51b81526004016104c890614ca9565b5f805b600481101561222e576121ea816003614c26565b6121f5906008614987565b63ffffffff1687612207836002614c4d565b8151811061221757612217614c39565b016020015160f81c901b91909117906001016121d6565b5063ffffffff81166003146122555760405162461bcd60e51b81526004016104c890614cec565b5f805b60208110156122aa5761226c81601f614c26565b612277906008614987565b88612283836006614c4d565b8151811061229357612293614c39565b016020015160f81c901b9190911790600101612258565b505f805b6008811015612309576122c2816007614c26565b6122cd906008614987565b6001600160401b0316896122e2836026614c4d565b815181106122f2576122f2614c39565b016020015160f81c901b91909117906001016122ae565b505f805b600881101561236857612321816007614c26565b61232c906008614987565b6001600160401b03168a61234183602e614c4d565b8151811061235157612351614c39565b016020015160f81c901b919091179060010161230d565b5091989097509095509350505050565b5f8181525f8051602061508583398151915260205260408082208151610100810190925280545f8051602061504583398151915293929190829060ff1660058111156123c6576123c6614750565b60058111156123d7576123d7614750565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e0909101529091508151600581111561245f5761245f614750565b146124bb5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016104c8565b60408101516001600160a01b0316336001600160a01b0316146125355760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016104c8565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff1916600183600581111561257957612579614750565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f61263c84826117fb565b60a0840151604080516001600160401b03909216825242602083015291935083925086917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a350505050565b5f61269a6129fd565b5f805160206150058339815191525f6126b56101e28561324a565b90505f6126c187611480565b90506002815160058111156126d8576126d8614750565b146127375760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a2076616c696461746f72206e6044820152686f742061637469766560b81b60648201526084016104c8565b5f828260a00151612748919061499e565b6004850154606084015191925061276a916001600160401b0390911690614d33565b6001600160401b0316816001600160401b031611156127e95760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a206d6178696d756d2076616c6044820152741a59185d1bdc881dd95a59da1d081c995858da1959605a1b60648201526084016104c8565b5f806127f58a846117fb565b915091505f8a8360405160200161282392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815282825280516020909101206101008301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905260a0850181905290881660c085015260e090930183905284835260068b01909152902081518154829060ff191660018360048111156128be576128be614750565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002860180546080808a015160a08b015160c08c01516001600160401b039687166001600160801b031990951694909417600160401b92871692909202919091176001600160801b0316600160801b918616919091026001600160c01b031617600160c01b928516929092029190911790915560e0909701516003909601805467ffffffffffffffff191696821696909617909555815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49650505050505050610ef660015f8051602061506583398151915255565b5f80516020615065833981519152805460011901612a2e57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020615005833981519152906001600160401b0316612a8060408601602087016146b4565b6001600160401b03161015612aef5760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d696e60448201526e1039ba30b5b290323ab930ba34b7b760891b60648201526084016104c8565b6003810154612b016020860186614d6d565b61ffff1610158015612b255750612710612b1e6020860186614d6d565b61ffff1611155b612b415760405162461bcd60e51b81526004016104c890614d88565b8054831015612ba45760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152687420746f6f206c6f7760b81b60648201526084016104c8565b8060010154831115612c0b5760405162461bcd60e51b815260206004820152602a60248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152690e840e8dede40d0d2ced60b31b60648201526084016104c8565b5f612c158461324a565b90505f612c21826108de565b90505f612c2e8883613280565b5f81815260058601602052604090209091508790612c4c8282614dd3565b509098975050505050505050565b60015f8051602061506583398151915255565b5f808251602714612c905760405162461bcd60e51b81526004016104c890614c60565b5f805b6002811015612cdf57612ca7816001614c26565b612cb2906008614987565b61ffff16858281518110612cc857612cc8614c39565b016020015160f81c901b9190911790600101612c93565b5061ffff811615612d025760405162461bcd60e51b81526004016104c890614ca9565b5f805b6004811015612d5d57612d19816003614c26565b612d24906008614987565b63ffffffff1686612d36836002614c4d565b81518110612d4657612d46614c39565b016020015160f81c901b9190911790600101612d05565b5063ffffffff8116600214612d845760405162461bcd60e51b81526004016104c890614cec565b5f805b6020811015612dd957612d9b81601f614c26565b612da6906008614987565b87612db2836006614c4d565b81518110612dc257612dc2614c39565b016020015160f81c901b9190911790600101612d87565b505f86602681518110612dee57612dee614c39565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e14612e315760405162461bcd60e51b81526004016104c890614c60565b5f805b6002811015612e8057612e48816001614c26565b612e53906008614987565b61ffff16858281518110612e6957612e69614c39565b016020015160f81c901b9190911790600101612e34565b5061ffff811615612ea35760405162461bcd60e51b81526004016104c890614ca9565b5f805b6004811015612efe57612eba816003614c26565b612ec5906008614987565b63ffffffff1686612ed7836002614c4d565b81518110612ee757612ee7614c39565b016020015160f81c901b9190911790600101612ea6565b5063ffffffff8116600414612f255760405162461bcd60e51b81526004016104c890614cec565b5f805b6020811015612f7a57612f3c81601f614c26565b612f47906008614987565b87612f53836006614c4d565b81518110612f6357612f63614c39565b016020015160f81c901b9190911790600101612f28565b505f805b6008811015612fd957612f92816007614c26565b612f9d906008614987565b6001600160401b031688612fb2836026614c4d565b81518110612fc257612fc2614c39565b016020015160f81c901b9190911790600101612f7e565b5090969095509350505050565b612ff18160016137ba565b50565b612ff1815f6137ba565b5f8181525f805160206150858339815191526020526040812060030180545f80516020615045833981519152916001600160401b03909116908361304183614e29565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166130c957604051631afcd79f60e31b815260040160405180910390fd5b565b6130d3613080565b6130dc81613a14565b612ff1608082013560a08301356130f960e0850160c086016146b4565b61310a610100860160e08701614d6d565b61ffff1661312061012087016101008801614e4e565b61313261014088016101208901614e6e565b613a35565b61313f613080565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab006001600160a01b0382166131cb5760405162461bcd60e51b815260206004820152602c60248201527f4552433230546f6b656e5374616b696e674d616e616765723a207a65726f207460448201526b6f6b656e206164647265737360a01b60648201526084016104c8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b0383811660248301526044820183905261147b91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613c79565b5f6108ee827f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00546001600160a01b031690613cda565b5f5f80516020615045833981519152426132a060408601602087016146b4565b6001600160401b0316116133125760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016104c8565b61332260408501602086016146b4565b6001600160401b03166133386202a30042614c4d565b116133ab5760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016104c8565b83356134035760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016104c8565b83355f908152600982016020526040902054156134735760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016104c8565b6134806040850185614e89565b90506030146134e75760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016104c8565b6134f083612fe6565b5f8061358a6040518060a0016040528085600101548152602001885f01358152602001876001600160401b0316815260200188602001602081019061353591906146b4565b6001600160401b0316815260200161355060408a018a614e89565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250613e3c565b5f828152600786016020526040902091935091506135a88282614f0f565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906135d5908590600401614894565b6020604051808303815f875af11580156135f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061361591906148c6565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff1916600183600581111561369757613697614750565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b9161378c91908e01908e016146b4565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b604080516080810182527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb03548082527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb045460208301527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0554928201929092527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06546001600160401b031660608201525f805160206150458339815191529142919015806138a057506002830154815161389c916001600160401b031690614c4d565b8210155b156138c6576001600160401b0385166060820152818152604081015160208201526138e5565b84816060018181516138d8919061499e565b6001600160401b03169052505b60608101516138f5906064614d33565b602082015160028501546001600160401b0392909216916139209190600160401b900460ff16614987565b10156139845760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016104c8565b83156139ad57846001600160401b0316816040018181516139a59190614c4d565b9052506139cc565b846001600160401b0316816040018181516139c89190614c26565b9052505b805160038401556020810151600484015560408101516005840155606001516006909201805467ffffffffffffffff19166001600160401b0390931692909217909155505050565b613a1c613080565b613a246141e1565b613a2c6141f1565b612ff1816141f9565b613a3d613080565b5f8051602061500583398151915283613aa95760405162461bcd60e51b815260206004820152602860248201527f506f5356616c696461746f724d616e616765723a207a65726f2064656c65676160448201526774696f6e2066656560c01b60648201526084016104c8565b612710841115613acb5760405162461bcd60e51b81526004016104c890614d88565b85871115613b335760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642073746160448201526e6b6520616d6f756e742072616e676560881b60648201526084016104c8565b5f8360ff1611613ba05760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a207a65726f206d6178696d75604482015271369039ba30b5b29036bab63a34b83634b2b960711b60648201526084016104c8565b600a60ff84161115613c125760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d617860448201527434b6bab69039ba30b5b29036bab63a34b83634b2b960591b60648201526084016104c8565b95865560018601949094556002850180546001600160401b0390941667ffffffffffffffff19909416939093179092556003840155600490920180546001600160a01b03909216600160401b026001600160e01b031990921660ff90931692909217179055565b5f613c8d6001600160a01b038416836143a6565b905080515f14158015613cb1575080806020019051810190613caf9190614fce565b155b1561147b57604051635274afe760e01b81526001600160a01b03841660048201526024016104c8565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015613d20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d4491906148c6565b9050613d5b6001600160a01b0385163330866143b3565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015613d9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dc391906148c6565b9050818111613e295760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104c8565b613e338282614c26565b95945050505050565b5f6060826080015151603014613ea65760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016104c8565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613f1d57613edd816001614c26565b613ee8906008614987565b5081515f90839083908110613eff57613eff614c39565b60200101906001600160f81b03191690815f1a905350600101613ec9565b505f5b6004811015613f7b57613f34816003614c26565b613f3f906008614987565b505f82613f4d836002614c4d565b81518110613f5d57613f5d614c39565b60200101906001600160f81b03191690815f1a905350600101613f20565b505f5b6020811015613fd85784518160208110613f9a57613f9a614c39565b1a60f81b82613faa836006614c4d565b81518110613fba57613fba614c39565b60200101906001600160f81b03191690815f1a905350600101613f7e565b505f5b60208110156140385784602001518160208110613ffa57613ffa614c39565b1a60f81b8261400a836026614c4d565b8151811061401a5761401a614c39565b60200101906001600160f81b03191690815f1a905350600101613fdb565b505f5b60088110156140ac5761404f816007614c26565b61405a906008614987565b60ff1685604001516001600160401b0316901c60f81b8282604661407e9190614c4d565b8151811061408e5761408e614c39565b60200101906001600160f81b03191690815f1a90535060010161403b565b505f5b603081101561411757846080015181815181106140ce576140ce614c39565b01602001516001600160f81b031916826140e983604e614c4d565b815181106140f9576140f9614c39565b60200101906001600160f81b03191690815f1a9053506001016140af565b505f5b60088110156141895761412e816007614c26565b614139906008614987565b60608601516001600160401b0390811691161c60f81b8261415b83607e614c4d565b8151811061416b5761416b614c39565b60200101906001600160f81b03191690815f1a90535060010161411a565b5060028160405161419a9190614fe9565b602060405180830381855afa1580156141b5573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906141d891906148c6565b94909350915050565b6141e9613080565b6130c96143ec565b6130c9613080565b614201613080565b80355f8051602061504583398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0155601461424d6080840160608501614e4e565b60ff1611156142ba5760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016104c8565b5f6142cb6080840160608501614e4e565b60ff16116143335760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016104c8565b6143436080830160608401614e4e565b60028201805460ff92909216600160401b0260ff60401b1990921691909117905561437460608301604084016146b4565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b6060610ef683835f6143f4565b6040516001600160a01b0384811660248301528381166044830152606482018390526108d89186918216906323b872dd90608401613218565b612c5a613080565b6060814710156144195760405163cd78605960e01b81523060048201526024016104c8565b5f80856001600160a01b031684866040516144349190614fe9565b5f6040518083038185875af1925050503d805f811461446e576040519150601f19603f3d011682016040523d82523d5f602084013e614473565b606091505b50915091506117f18683836060826144935761448e826144da565b610ef6565b81511580156144aa57506001600160a01b0384163b155b156144d357604051639996b31560e01b81526001600160a01b03851660048201526024016104c8565b5080610ef6565b8051156144ea5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50805461450f906149be565b5f825580601f1061451e575050565b601f0160209004905f5260205f2090810190612ff1919061457e565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614592575f815560010161457f565b5090565b8015158114612ff1575f80fd5b803563ffffffff811681146145b6575f80fd5b919050565b5f805f606084860312156145cd575f80fd5b8335925060208401356145df81614596565b91506145ed604085016145a3565b90509250925092565b5f60208284031215614606575f80fd5b5035919050565b6001600160a01b0381168114612ff1575f80fd5b5f80828403610160811215614634575f80fd5b61014080821215614643575f80fd5b84935083013590506146548161460d565b809150509250929050565b5f6020828403121561466f575f80fd5b610ef6826145a3565b5f8060408385031215614689575f80fd5b614692836145a3565b946020939093013593505050565b6001600160401b0381168114612ff1575f80fd5b5f602082840312156146c4575f80fd5b8135610ef6816146a0565b5f80604083850312156146e0575f80fd5b50508035926020909101359150565b5f805f8385036080811215614702575f80fd5b84356001600160401b03811115614717575f80fd5b850160608188031215614728575f80fd5b93506040601f198201121561473b575f80fd5b50602084019150606084013590509250925092565b634e487b7160e01b5f52602160045260245ffd5b81516101008201906006811061478857634e487b7160e01b5f52602160045260245ffd5b808352506020830151602083015260408301516147b060408401826001600160a01b03169052565b5060608301516147cb60608401826001600160401b03169052565b5060808301516147e660808401826001600160401b03169052565b5060a083015161480160a08401826001600160401b03169052565b5060c083015161481c60c08401826001600160401b03169052565b5060e083015161483760e08401826001600160401b03169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038281168282160390808211156148375761483761483e565b5f5b8381101561488c578181015183820152602001614874565b50505f910152565b602081525f82518060208401526148b2816040850160208701614872565b601f01601f19169190910160400192915050565b5f602082840312156148d6575f80fd5b5051919050565b5f826148f757634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b80820281158282048414176108ee576108ee61483e565b6001600160401b038181168382160190808211156148375761483761483e565b600181811c908216806149d257607f821691505b6020821081036149f057634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f8454614a4f816149be565b806020870152604060018084165f8114614a705760018114614a8c57614ab9565b60ff19851660408a0152604084151560051b8a01019550614ab9565b895f5260205f205f5b85811015614ab05781548b8201860152908301908801614a95565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614afd57614afd614ac7565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b2b57614b2b614ac7565b604052919050565b80516145b681614596565b5f8060408385031215614b4f575f80fd5b82516001600160401b0380821115614b65575f80fd5b9084019060608287031215614b78575f80fd5b614b80614adb565b82518152602080840151614b938161460d565b82820152604084015183811115614ba8575f80fd5b80850194505087601f850112614bbc575f80fd5b835183811115614bce57614bce614ac7565b614be0601f8201601f19168301614b03565b93508084528882828701011115614bf5575f80fd5b614c0481838601848801614872565b50826040830152819550614c19818801614b33565b9450505050509250929050565b818103818111156108ee576108ee61483e565b634e487b7160e01b5f52603260045260245ffd5b808201808211156108ee576108ee61483e565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b6001600160401b03818116838216028082169190828114614d5657614d5661483e565b505092915050565b61ffff81168114612ff1575f80fd5b5f60208284031215614d7d575f80fd5b8135610ef681614d5e565b6020808252602b908201527f506f5356616c696461746f724d616e616765723a20696e76616c69642064656c60408201526a65676174696f6e2066656560a81b606082015260800190565b8135614dde81614d5e565b61ffff8116905081548161ffff1982161783556020840135614dff816146a0565b69ffffffffffffffff00008160101b168369ffffffffffffffffffff198416171784555050505050565b5f6001600160401b03808316818103614e4457614e4461483e565b6001019392505050565b5f60208284031215614e5e575f80fd5b813560ff81168114610ef6575f80fd5b5f60208284031215614e7e575f80fd5b8135610ef68161460d565b5f808335601e19843603018112614e9e575f80fd5b8301803591506001600160401b03821115614eb7575f80fd5b602001915036819003821315611975575f80fd5b601f82111561147b57805f5260205f20601f840160051c81016020851015614ef05750805b601f840160051c820191505b81811015610cd4575f8155600101614efc565b81516001600160401b03811115614f2857614f28614ac7565b614f3c81614f3684546149be565b84614ecb565b602080601f831160018114614f6f575f8415614f585750858301515b5f19600386901b1c1916600185901b178555614fc6565b5f85815260208120601f198616915b82811015614f9d57888601518255948401946001909101908401614f7e565b5085821015614fba57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208284031215614fde575f80fd5b8151610ef681614596565b5f8251614ffa818460208701614872565b919091019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00506f5356616c696461746f724d616e616765723a2064656c65676174696f6e20e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go index bb8f45551..4546803b5 100644 --- a/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -76,7 +76,7 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activeValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndValidation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeValidatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidator\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structValidator\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"startingWeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageNonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"startedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"endedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWeight\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"settings\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorManagerSettings\",\"components\":[{\"name\":\"baseSettings\",\"type\":\"tuple\",\"internalType\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"pChainBlockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorRegistration\",\"inputs\":[{\"name\":\"registrationInput\",\"type\":\"tuple\",\"internalType\":\"structValidatorRegistrationInput\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"requirements\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorRequirements\",\"components\":[{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"resendEndValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendRegisterValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendUpdateDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"valueToWeight\",\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"DelegationEnded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegatorAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodEnded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumValidatorStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWeightUpdate\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]}]", - Bin: "0x608060405234801561000f575f80fd5b50604051614ea7380380614ea783398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b614d5a8061014d5f395ff3fe608060405260043610610131575f3560e01c806376f78621116100a8578063ba3a4b971161006d578063ba3a4b9714610394578063bee0a03f146103b3578063c599e24f146103d2578063c974d1b6146103e5578063d5f20ff6146103f9578063df93d8de14610425575f80fd5b806376f78621146102f257806380a8ad941461031157806398f3e2b414610324578063a3a65e4814610343578063b771b3bc14610362575f80fd5b80632e2194d8116100f95780632e2194d81461021757806335455ded1461024e578063467ef06f146102765780635297fae61461029557806362065856146102b457806366435abf146102d3575f80fd5b80630118acc4146101355780630322ed98146101565780630cdd098514610175578063151d30d1146101d25780631f7a9d8f146101f8575b5f80fd5b348015610140575f80fd5b5061015461014f3660046142d4565b61043b565b005b348015610161575f80fd5b5061015461017036600461430f565b6107ff565b348015610180575f80fd5b506101bf61018f36600461430f565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b3480156101dd575f80fd5b506101e6600a81565b60405160ff90911681526020016101c9565b348015610203575f80fd5b50610154610212366004614326565b6109cf565b348015610222575f80fd5b5061023661023136600461430f565b610aac565b6040516001600160401b0390911681526020016101c9565b348015610259575f80fd5b5061026361271081565b60405161ffff90911681526020016101c9565b348015610281575f80fd5b5061015461029036600461433d565b610ac2565b3480156102a0575f80fd5b506101546102af366004614356565b610aed565b3480156102bf575f80fd5b506101bf6102ce366004614392565b610cbd565b3480156102de575f80fd5b506102366102ed36600461430f565b610cd6565b3480156102fd575f80fd5b5061015461030c3660046142d4565b610cea565b6101bf61031f3660046143ad565b610dca565b34801561032f575f80fd5b5061015461033e366004614356565b610df6565b34801561034e575f80fd5b5061015461035d36600461433d565b611005565b34801561036d575f80fd5b5061037c6005600160991b0181565b6040516001600160a01b0390911681526020016101c9565b34801561039f575f80fd5b506101546103ae36600461430f565b6111c2565b3480156103be575f80fd5b506101546103cd36600461430f565b611448565b6101bf6103e036600461430f565b61155c565b3480156103f0575f80fd5b506101e6601481565b348015610404575f80fd5b5061041861041336600461430f565b611568565b6040516101c9919061441a565b348015610430575f80fd5b506102366202a30081565b5f8381527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408120600101545f80516020614cae83398151915291841561048d5761048a8285611647565b90505b5f868152600684016020526040808220815161010081019092528054829060ff1660048111156104bf576104bf614406565b60048111156104d0576104d0614406565b8152815461010090046001600160a01b031660208201526001820154604082015260028201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b909104811660c083015260039092015490911660e09091015290505f61054c84611568565b905060028251600481111561056357610563614406565b146105b55760405162461bcd60e51b815260206004820152602a60248201525f80516020614cce8339815191526044820152696e6f742061637469766560b01b60648201526084015b60405180910390fd5b60208201516001600160a01b0316331461061a5760405162461bcd60e51b815260206004820152603360248201525f80516020614cce8339815191526044820152723737ba1037bbb732b210313c9039b2b73232b960691b60648201526084016105ac565b600382528051600290600581111561063457610634614406565b036106855761064682606001516118e3565b5f82606001518260a0015161065b9190614508565b905061066785826118f0565b506001600160401b0390811660e0850152421660a0840152506106a8565b60808101516001600160401b0390811660e0808501919091528201511660a08301525b5f88815260068601602052604090208251815484929190829060ff191660018360048111156106d9576106d9614406565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b031990911617815560408083015160018301556060830151600283018054608086015160a08088015160c08901516001600160401b03908116600160c01b026001600160c01b03928216600160801b02929092166001600160801b03948216600160401b026001600160801b0319909616978216979097179490941792909216949094171790915560e090940151600390930180549390941667ffffffffffffffff199390931692909217909255830151905185918a917f5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69916107ed916001600160401b0391909116815260200190565b60405180910390a35050505050505050565b5f8181525f80516020614d2e83398151915260205260408082208151610100810190925280545f80516020614cee83398151915293929190829060ff16600581111561084d5761084d614406565b600581111561085e5761085e614406565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e090910152909150815160058111156108e3576108e3614406565b146109485760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016105ac565b6005600160991b016001600160a01b031663ee5b48eb61096d8584608001515f611a1a565b6040518263ffffffff1660e01b8152600401610989919061454a565b6020604051808303815f875af11580156109a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c9919061457c565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a18575080546001600160401b03808416911610155b15610a365760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a6083611c39565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f610abc64e8d4a5100083614593565b92915050565b5f610acc82611c4a565b9050610ae981606001516001600160401b03168260400151611fbd565b5050565b5f80516020614cae8339815191525f610b0584611fd0565b90505f80610b1683604001516121b1565b50915091505f610b2583611568565b9050816001600160401b031681608001516001600160401b03161015610b5d5760405162461bcd60e51b81526004016105ac906145b2565b5f8681526006860160205260409020600201546001600160401b03808416600160c01b909204161115610ba25760405162461bcd60e51b81526004016105ac906145f4565b60015f87815260068701602052604090205460ff166004811115610bc857610bc8614406565b14610c315760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a2064656c65676174696f6e4960448201527211081b9bdd081c195b991a5b99c81859191959606a1b60648201526084016105ac565b5f868152600686016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092179092559251928352841691859189917f245fc69b36e168426e0306fc8d8300661b9af297c7958820dbf804f9f63e7064910160405180910390a450505050505050565b5f610abc6001600160401b03831664e8d4a5100061463d565b5f610ce082611568565b60a0015192915050565b5f80516020614cae8339815191525f610d0285611568565b5f86815260058401602052604090205460c0820151919250610d3491620100009091046001600160401b031690614654565b6001600160401b0316421015610da85760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a206d696e696d756d207374616044820152721ad948191d5c985d1a5bdb881b9bdd081b595d606a1b60648201526084016105ac565b8315610dba57610db88584611647565b505b610dc3856123ec565b5050505050565b5f610dd361278a565b610dde8383346127c1565b9050610abc60015f80516020614d0e83398151915255565b5f80516020614cae8339815191525f610e0e84611fd0565b90505f80610e1f83604001516121b1565b50915091505f610e2e83611568565b9050816001600160401b031681608001516001600160401b03161015610e665760405162461bcd60e51b81526004016105ac906145b2565b5f8681526006860160205260409020600301546001600160401b0380841691161115610ea45760405162461bcd60e51b81526004016105ac906145f4565b60035f87815260068701602052604090205460ff166004811115610eca57610eca614406565b14610f1e5760405162461bcd60e51b815260206004820152603160248201525f80516020614cce8339815191526044820152701b9bdd081c195b991a5b99c81859191959607a1b60648201526084016105ac565b5f868152600686016020908152604091829020805460ff19166004908117808355845161010080820187529281529190046001600160a01b031692810183905260018201549381019390935260028101546001600160401b0380821660608601819052600160401b830482166080870152600160801b8304821660a0870152600160c01b909204811660c086015260039092015490911660e0840152610fc391611fbd565b826001600160401b031684887f52e9b1eaef84d46cda83ccb9d427267bc4d04f756b4a32c8302722b79e5c65ab60405160405180910390a45050505050505050565b5f80516020614cee8339815191525f61101d83611fd0565b90505f8061102e83604001516129ef565b91509150806110905760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016105ac565b5f828152600785016020526040812080546110aa90614674565b90501180156110dc575060015f83815260088601602052604090205460ff1660058111156110da576110da614406565b145b6110f85760405162461bcd60e51b81526004016105ac906146a6565b5f82815260078501602052604081206111109161421c565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408082208151610100810190925280545f80516020614cae83398151915293929190829060ff16600481111561122357611223614406565b600481111561123457611234614406565b8152815461010090046001600160a01b03166020820152600180830154604083015260028301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e090910152909150815160048111156112bb576112bb614406565b14806112d957506003815160048111156112d7576112d7614406565b145b61132d5760405162461bcd60e51b815260206004820152603260248201525f80516020614cce833981519152604482015271737461747573206e6f742070656e64696e6760701b60648201526084016105ac565b5f61133b8260400151611568565b905080608001516001600160401b03165f036113bf5760405162461bcd60e51b815260206004820152603f60248201527f506f5356616c696461746f724d616e616765723a20636f756c64206e6f74206660448201527f696e642076616c696461746f7220666f722064656c65676174696f6e2049440060648201526084016105ac565b6005600160991b016001600160a01b031663ee5b48eb6113ec846040015184608001518560a00151611a1a565b6040518263ffffffff1660e01b8152600401611408919061454a565b6020604051808303815f875af1158015611424573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc3919061457c565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f80516020614cee83398151915292919061149090614674565b90501180156114c2575060015f83815260088301602052604090205460ff1660058111156114c0576114c0614406565b145b6114de5760405162461bcd60e51b81526004016105ac906146a6565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161151791906004016146ed565b6020604051808303815f875af1158015611533573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611557919061457c565b505050565b5f610abc823334612b90565b611570614253565b5f8281525f80516020614d2e8339815191526020526040908190208151610100810190925280545f80516020614cee833981519152929190829060ff1660058111156115be576115be614406565b60058111156115cf576115cf614406565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015611692573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116b99190810190614802565b915091508061171c5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016105ac565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561175f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611783919061457c565b8251146117e75760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016105ac565b60208201516001600160a01b03161561185d5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016105ac565b5f8061186c8460400151612f02565b915091508187146118d95760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016105ac565b9695505050505050565b6118ed815f6130da565b50565b5f805f6118fc85613334565b5f8681525f80516020614d2e83398151915260205260408120600301805467ffffffffffffffff60401b1916600160401b6001600160401b038916021790559091505f80516020614cee833981519152906005600160991b0163ee5b48eb61196589868a611a1a565b6040518263ffffffff1660e01b8152600401611981919061454a565b6020604051808303815f875af115801561199d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c1919061457c565b604080516001600160401b0389811682526020820184905282519394508616928a927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3919350909150505b9250929050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611a9357611a538160016148ea565b611a5e90600861463d565b5081515f90839083908110611a7557611a756148fd565b60200101906001600160f81b03191690815f1a905350600101611a3f565b505f5b6004811015611af657611aaa8160036148ea565b611ab590600861463d565b6001901c60f81b82611ac8836002614911565b81518110611ad857611ad86148fd565b60200101906001600160f81b03191690815f1a905350600101611a96565b505f5b6020811015611b5857611b0d81601f6148ea565b611b1890600861463d565b86901c60f81b82611b2a836006614911565b81518110611b3a57611b3a6148fd565b60200101906001600160f81b03191690815f1a905350600101611af9565b505f5b6008811015611bc357611b6f8160076148ea565b611b7a90600861463d565b6001600160401b038616901c60f81b82611b95836026614911565b81518110611ba557611ba56148fd565b60200101906001600160f81b03191690815f1a905350600101611b5b565b505f5b6008811015611c2e57611bda8160076148ea565b611be590600861463d565b6001600160401b038516901c60f81b82611c0083602e614911565b81518110611c1057611c106148fd565b60200101906001600160f81b03191690815f1a905350600101611bc6565b5090505b9392505050565b611c416133b6565b6118ed81613401565b611c52614253565b5f80516020614cee8339815191525f611c6a84611fd0565b90505f80611c7b83604001516129ef565b915091508015611ce05760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016105ac565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115611d1257611d12614406565b6005811115611d2357611d23614406565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115611daa57611daa614406565b1480611dc85750600182516005811115611dc657611dc6614406565b145b611e275760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016105ac565b600382516005811115611e3c57611e3c614406565b03611e4957506004611e4d565b5060055b6020808301515f90815260098801909152604081205581816005811115611e7657611e76614406565b90816005811115611e8957611e89614406565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115611ebd57611ebd614406565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115611f8857611f88614406565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b610ae96001600160a01b0382168361346d565b60408051606080820183525f8083526020830181905292820152905f80516020614cee8339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612045573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261206c9190810190614802565b91509150806120d35760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016105ac565b82548251146121365760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016105ac565b60208201516001600160a01b0316156121a95760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016105ac565b509392505050565b5f805f83516036146121d55760405162461bcd60e51b81526004016105ac90614924565b5f805b6002811015612224576121ec8160016148ea565b6121f790600861463d565b61ffff1686828151811061220d5761220d6148fd565b016020015160f81c901b91909117906001016121d8565b5061ffff8116156122475760405162461bcd60e51b81526004016105ac9061496d565b5f805b60048110156122a25761225e8160036148ea565b61226990600861463d565b63ffffffff168761227b836002614911565b8151811061228b5761228b6148fd565b016020015160f81c901b919091179060010161224a565b5063ffffffff81166003146122c95760405162461bcd60e51b81526004016105ac906149b0565b5f805b602081101561231e576122e081601f6148ea565b6122eb90600861463d565b886122f7836006614911565b81518110612307576123076148fd565b016020015160f81c901b91909117906001016122cc565b505f805b600881101561237d576123368160076148ea565b61234190600861463d565b6001600160401b031689612356836026614911565b81518110612366576123666148fd565b016020015160f81c901b9190911790600101612322565b505f805b60088110156123dc576123958160076148ea565b6123a090600861463d565b6001600160401b03168a6123b583602e614911565b815181106123c5576123c56148fd565b016020015160f81c901b9190911790600101612381565b5091989097509095509350505050565b5f8181525f80516020614d2e83398151915260205260408082208151610100810190925280545f80516020614cee83398151915293929190829060ff16600581111561243a5761243a614406565b600581111561244b5761244b614406565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e090910152909150815160058111156124d3576124d3614406565b1461252f5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016105ac565b60408101516001600160a01b0316336001600160a01b0316146125a95760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016105ac565b6125b68160a001516118e3565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff191660018360058111156125fa576125fa614406565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f6126c6846126c081613334565b5f611a1a565b60405163ee5b48eb60e01b81529091505f906005600160991b019063ee5b48eb906126f590859060040161454a565b6020604051808303815f875af1158015612711573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612735919061457c565b60a0840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b5f80516020614d0e8339815191528054600119016127bb57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020614cae833981519152906001600160401b031661280d6040860160208701614392565b6001600160401b0316101561287c5760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d696e60448201526e1039ba30b5b290323ab930ba34b7b760891b60648201526084016105ac565b600381015461288e6020860186614a06565b61ffff16101580156128b257506127106128ab6020860186614a06565b61ffff1611155b6128ce5760405162461bcd60e51b81526004016105ac90614a21565b80548310156129315760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152687420746f6f206c6f7760b81b60648201526084016105ac565b80600101548311156129985760405162461bcd60e51b815260206004820152602a60248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152690e840e8dede40d0d2ced60b31b60648201526084016105ac565b825f6129a382610aac565b90505f6129b08883613500565b5f818152600586016020526040902090915087906129ce8282614a6c565b509098975050505050505050565b60015f80516020614d0e83398151915255565b5f808251602714612a125760405162461bcd60e51b81526004016105ac90614924565b5f805b6002811015612a6157612a298160016148ea565b612a3490600861463d565b61ffff16858281518110612a4a57612a4a6148fd565b016020015160f81c901b9190911790600101612a15565b5061ffff811615612a845760405162461bcd60e51b81526004016105ac9061496d565b5f805b6004811015612adf57612a9b8160036148ea565b612aa690600861463d565b63ffffffff1686612ab8836002614911565b81518110612ac857612ac86148fd565b016020015160f81c901b9190911790600101612a87565b5063ffffffff8116600214612b065760405162461bcd60e51b81526004016105ac906149b0565b5f805b6020811015612b5b57612b1d81601f6148ea565b612b2890600861463d565b87612b34836006614911565b81518110612b4457612b446148fd565b016020015160f81c901b9190911790600101612b09565b505f86602681518110612b7057612b706148fd565b016020015191976001600160f81b03199092161515965090945050505050565b5f612b9961278a565b5f80516020614cae8339815191525f612bb184610aac565b90505f612bbd87611568565b9050600281516005811115612bd457612bd4614406565b14612c335760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a2076616c696461746f72206e6044820152686f742061637469766560b81b60648201526084016105ac565b612c3c82613a3a565b5f828260a00151612c4d9190614654565b60048501546060840151919250612c6f916001600160401b0390911690614ac2565b6001600160401b0316816001600160401b03161115612cee5760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a206d6178696d756d2076616c6044820152741a59185d1bdc881dd95a59da1d081c995858da1959605a1b60648201526084016105ac565b5f80612cfa8a846118f0565b915091505f8a83604051602001612d2892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815282825280516020909101206101008301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905260a0850181905290881660c085015260e090930183905284835260068b01909152902081518154829060ff19166001836004811115612dc357612dc3614406565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002860180546080808a015160a08b015160c08c01516001600160401b039687166001600160801b031990951694909417600160401b92871692909202919091176001600160801b0316600160801b918616919091026001600160c01b031617600160c01b928516929092029190911790915560e0909701516003909601805467ffffffffffffffff191696821696909617909555815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49650505050505050611c3260015f80516020614d0e83398151915255565b5f808251602e14612f255760405162461bcd60e51b81526004016105ac90614924565b5f805b6002811015612f7457612f3c8160016148ea565b612f4790600861463d565b61ffff16858281518110612f5d57612f5d6148fd565b016020015160f81c901b9190911790600101612f28565b5061ffff811615612f975760405162461bcd60e51b81526004016105ac9061496d565b5f805b6004811015612ff257612fae8160036148ea565b612fb990600861463d565b63ffffffff1686612fcb836002614911565b81518110612fdb57612fdb6148fd565b016020015160f81c901b9190911790600101612f9a565b5063ffffffff81166004146130195760405162461bcd60e51b81526004016105ac906149b0565b5f805b602081101561306e5761303081601f6148ea565b61303b90600861463d565b87613047836006614911565b81518110613057576130576148fd565b016020015160f81c901b919091179060010161301c565b505f805b60088110156130cd576130868160076148ea565b61309190600861463d565b6001600160401b0316886130a6836026614911565b815181106130b6576130b66148fd565b016020015160f81c901b9190911790600101613072565b5090969095509350505050565b604080516080810182527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb03548082527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb045460208301527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0554928201929092527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06546001600160401b031660608201525f80516020614cee8339815191529142919015806131c05750600283015481516131bc916001600160401b031690614911565b8210155b156131e6576001600160401b038516606082015281815260408101516020820152613205565b84816060018181516131f89190614654565b6001600160401b03169052505b6060810151613215906064614ac2565b602082015160028501546001600160401b0392909216916132409190600160401b900460ff1661463d565b10156132a45760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016105ac565b83156132cd57846001600160401b0316816040018181516132c59190614911565b9052506132ec565b846001600160401b0316816040018181516132e891906148ea565b9052505b805160038401556020810151600484015560408101516005840155606001516006909201805467ffffffffffffffff19166001600160401b0390931692909217909155505050565b5f8181525f80516020614d2e8339815191526020526040812060030180545f80516020614cee833981519152916001600160401b03909116908361337783614aed565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166133ff57604051631afcd79f60e31b815260040160405180910390fd5b565b6134096133b6565b61341281613a45565b6118ed608082013560a083013561342f60e0850160c08601614392565b613440610100860160e08701614a06565b61ffff1661345661012087016101008801614b12565b61346861014088016101208901614b32565b613a66565b804710156134905760405163cd78605960e01b81523060048201526024016105ac565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146134d9576040519150601f19603f3d011682016040523d82523d5f602084013e6134de565b606091505b505090508061155757604051630a12f52160e11b815260040160405180910390fd5b5f5f80516020614cee833981519152426135206040860160208701614392565b6001600160401b0316116135925760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016105ac565b6135a26040850160208601614392565b6001600160401b03166135b86202a30042614911565b1161362b5760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016105ac565b83356136835760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016105ac565b83355f908152600982016020526040902054156136f35760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016105ac565b6137006040850185614b4d565b90506030146137675760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016105ac565b61377083613a3a565b5f8061380a6040518060a0016040528085600101548152602001885f01358152602001876001600160401b031681526020018860200160208101906137b59190614392565b6001600160401b031681526020016137d060408a018a614b4d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250613caa565b5f828152600786016020526040902091935091506138288282614bd3565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061385590859060040161454a565b6020604051808303815f875af1158015613871573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613895919061457c565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff1916600183600581111561391757613917614406565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b91613a0c91908e01908e01614392565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b6118ed8160016130da565b613a4d6133b6565b613a5561404f565b613a5d61405f565b6118ed81614067565b613a6e6133b6565b5f80516020614cae83398151915283613ada5760405162461bcd60e51b815260206004820152602860248201527f506f5356616c696461746f724d616e616765723a207a65726f2064656c65676160448201526774696f6e2066656560c01b60648201526084016105ac565b612710841115613afc5760405162461bcd60e51b81526004016105ac90614a21565b85871115613b645760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642073746160448201526e6b6520616d6f756e742072616e676560881b60648201526084016105ac565b5f8360ff1611613bd15760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a207a65726f206d6178696d75604482015271369039ba30b5b29036bab63a34b83634b2b960711b60648201526084016105ac565b600a60ff84161115613c435760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d617860448201527434b6bab69039ba30b5b29036bab63a34b83634b2b960591b60648201526084016105ac565b95865560018601949094556002850180546001600160401b0390941667ffffffffffffffff19909416939093179092556003840155600490920180546001600160a01b03909216600160401b026001600160e01b031990921660ff90931692909217179055565b5f6060826080015151603014613d145760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016105ac565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613d8b57613d4b8160016148ea565b613d5690600861463d565b5081515f90839083908110613d6d57613d6d6148fd565b60200101906001600160f81b03191690815f1a905350600101613d37565b505f5b6004811015613de957613da28160036148ea565b613dad90600861463d565b505f82613dbb836002614911565b81518110613dcb57613dcb6148fd565b60200101906001600160f81b03191690815f1a905350600101613d8e565b505f5b6020811015613e465784518160208110613e0857613e086148fd565b1a60f81b82613e18836006614911565b81518110613e2857613e286148fd565b60200101906001600160f81b03191690815f1a905350600101613dec565b505f5b6020811015613ea65784602001518160208110613e6857613e686148fd565b1a60f81b82613e78836026614911565b81518110613e8857613e886148fd565b60200101906001600160f81b03191690815f1a905350600101613e49565b505f5b6008811015613f1a57613ebd8160076148ea565b613ec890600861463d565b60ff1685604001516001600160401b0316901c60f81b82826046613eec9190614911565b81518110613efc57613efc6148fd565b60200101906001600160f81b03191690815f1a905350600101613ea9565b505f5b6030811015613f855784608001518181518110613f3c57613f3c6148fd565b01602001516001600160f81b03191682613f5783604e614911565b81518110613f6757613f676148fd565b60200101906001600160f81b03191690815f1a905350600101613f1d565b505f5b6008811015613ff757613f9c8160076148ea565b613fa790600861463d565b60608601516001600160401b0390811691161c60f81b82613fc983607e614911565b81518110613fd957613fd96148fd565b60200101906001600160f81b03191690815f1a905350600101613f88565b506002816040516140089190614c92565b602060405180830381855afa158015614023573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190614046919061457c565b94909350915050565b6140576133b6565b6133ff614214565b6133ff6133b6565b61406f6133b6565b80355f80516020614cee83398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb015560146140bb6080840160608501614b12565b60ff1611156141285760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016105ac565b5f6141396080840160608501614b12565b60ff16116141a15760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016105ac565b6141b16080830160608401614b12565b60028201805460ff92909216600160401b0260ff60401b199092169190911790556141e26060830160408401614392565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b6129dc6133b6565b50805461422890614674565b5f825580601f10614237575050565b601f0160209004905f5260205f20908101906118ed9190614297565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156142ab575f8155600101614298565b5090565b80151581146118ed575f80fd5b803563ffffffff811681146142cf575f80fd5b919050565b5f805f606084860312156142e6575f80fd5b8335925060208401356142f8816142af565b9150614306604085016142bc565b90509250925092565b5f6020828403121561431f575f80fd5b5035919050565b5f6101408284031215614337575f80fd5b50919050565b5f6020828403121561434d575f80fd5b611c32826142bc565b5f8060408385031215614367575f80fd5b614370836142bc565b946020939093013593505050565b6001600160401b03811681146118ed575f80fd5b5f602082840312156143a2575f80fd5b8135611c328161437e565b5f8082840360608112156143bf575f80fd5b83356001600160401b038111156143d4575f80fd5b8401606081870312156143e5575f80fd5b92506040601f19820112156143f8575f80fd5b506020830190509250929050565b634e487b7160e01b5f52602160045260245ffd5b81516101008201906006811061443e57634e487b7160e01b5f52602160045260245ffd5b8083525060208301516020830152604083015161446660408401826001600160a01b03169052565b50606083015161448160608401826001600160401b03169052565b50608083015161449c60808401826001600160401b03169052565b5060a08301516144b760a08401826001600160401b03169052565b5060c08301516144d260c08401826001600160401b03169052565b5060e08301516144ed60e08401826001600160401b03169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038281168282160390808211156144ed576144ed6144f4565b5f5b8381101561454257818101518382015260200161452a565b50505f910152565b602081525f8251806020840152614568816040850160208701614528565b601f01601f19169190910160400192915050565b5f6020828403121561458c575f80fd5b5051919050565b5f826145ad57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b8082028115828204841417610abc57610abc6144f4565b6001600160401b038181168382160190808211156144ed576144ed6144f4565b600181811c9082168061468857607f821691505b60208210810361433757634e487b7160e01b5f52602260045260245ffd5b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f84546146ff81614674565b806020870152604060018084165f8114614720576001811461473c57614769565b60ff19851660408a0152604084151560051b8a01019550614769565b895f5260205f205f5b858110156147605781548b8201860152908301908801614745565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156147ad576147ad614777565b60405290565b604051601f8201601f191681016001600160401b03811182821017156147db576147db614777565b604052919050565b6001600160a01b03811681146118ed575f80fd5b80516142cf816142af565b5f8060408385031215614813575f80fd5b82516001600160401b0380821115614829575f80fd5b908401906060828703121561483c575f80fd5b61484461478b565b82518152602080840151614857816147e3565b8282015260408401518381111561486c575f80fd5b80850194505087601f850112614880575f80fd5b83518381111561489257614892614777565b6148a4601f8201601f191683016147b3565b935080845288828287010111156148b9575f80fd5b6148c881838601848801614528565b508260408301528195506148dd8188016147f7565b9450505050509250929050565b81810381811115610abc57610abc6144f4565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610abc57610abc6144f4565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b61ffff811681146118ed575f80fd5b5f60208284031215614a16575f80fd5b8135611c32816149f7565b6020808252602b908201527f506f5356616c696461746f724d616e616765723a20696e76616c69642064656c60408201526a65676174696f6e2066656560a81b606082015260800190565b8135614a77816149f7565b61ffff8116905081548161ffff1982161783556020840135614a988161437e565b69ffffffffffffffff00008160101b168369ffffffffffffffffffff198416171784555050505050565b6001600160401b03818116838216028082169190828114614ae557614ae56144f4565b505092915050565b5f6001600160401b03808316818103614b0857614b086144f4565b6001019392505050565b5f60208284031215614b22575f80fd5b813560ff81168114611c32575f80fd5b5f60208284031215614b42575f80fd5b8135611c32816147e3565b5f808335601e19843603018112614b62575f80fd5b8301803591506001600160401b03821115614b7b575f80fd5b602001915036819003821315611a13575f80fd5b601f82111561155757805f5260205f20601f840160051c81016020851015614bb45750805b601f840160051c820191505b81811015610dc3575f8155600101614bc0565b81516001600160401b03811115614bec57614bec614777565b614c0081614bfa8454614674565b84614b8f565b602080601f831160018114614c33575f8415614c1c5750858301515b5f19600386901b1c1916600185901b178555614c8a565b5f85815260208120601f198616915b82811015614c6157888601518255948401946001909101908401614c42565b5085821015614c7e57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251614ca3818460208701614528565b919091019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00506f5356616c696461746f724d616e616765723a2064656c65676174696f6e20e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", + Bin: "0x608060405234801561000f575f80fd5b50604051614e63380380614e6383398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b614d168061014d5f395ff3fe608060405260043610610131575f3560e01c806376f78621116100a8578063ba3a4b971161006d578063ba3a4b9714610394578063bee0a03f146103b3578063c599e24f146103d2578063c974d1b6146103e5578063d5f20ff6146103f9578063df93d8de14610425575f80fd5b806376f78621146102f257806380a8ad941461031157806398f3e2b414610324578063a3a65e4814610343578063b771b3bc14610362575f80fd5b80632e2194d8116100f95780632e2194d81461021757806335455ded1461024e578063467ef06f146102765780635297fae61461029557806362065856146102b457806366435abf146102d3575f80fd5b80630118acc4146101355780630322ed98146101565780630cdd098514610175578063151d30d1146101d25780631f7a9d8f146101f8575b5f80fd5b348015610140575f80fd5b5061015461014f366004614290565b61043b565b005b348015610161575f80fd5b506101546101703660046142cb565b6107f2565b348015610180575f80fd5b506101bf61018f3660046142cb565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b3480156101dd575f80fd5b506101e6600a81565b60405160ff90911681526020016101c9565b348015610203575f80fd5b506101546102123660046142e2565b6109c2565b348015610222575f80fd5b506102366102313660046142cb565b610a9f565b6040516001600160401b0390911681526020016101c9565b348015610259575f80fd5b5061026361271081565b60405161ffff90911681526020016101c9565b348015610281575f80fd5b506101546102903660046142f9565b610ab5565b3480156102a0575f80fd5b506101546102af366004614312565b610ae0565b3480156102bf575f80fd5b506101bf6102ce36600461434e565b610cb0565b3480156102de575f80fd5b506102366102ed3660046142cb565b610cc9565b3480156102fd575f80fd5b5061015461030c366004614290565b610cdd565b6101bf61031f366004614369565b610dbd565b34801561032f575f80fd5b5061015461033e366004614312565b610de9565b34801561034e575f80fd5b5061015461035d3660046142f9565b610ff8565b34801561036d575f80fd5b5061037c6005600160991b0181565b6040516001600160a01b0390911681526020016101c9565b34801561039f575f80fd5b506101546103ae3660046142cb565b6111b5565b3480156103be575f80fd5b506101546103cd3660046142cb565b61143b565b6101bf6103e03660046142cb565b61154f565b3480156103f0575f80fd5b506101e6601481565b348015610404575f80fd5b506104186104133660046142cb565b61155b565b6040516101c991906143d6565b348015610430575f80fd5b506102366202a30081565b5f8381527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408120600101545f80516020614c6a83398151915291841561048d5761048a828561163a565b90505b5f868152600684016020526040808220815161010081019092528054829060ff1660048111156104bf576104bf6143c2565b60048111156104d0576104d06143c2565b8152815461010090046001600160a01b031660208201526001820154604082015260028201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b909104811660c083015260039092015490911660e09091015290505f61054c8461155b565b9050600282516004811115610563576105636143c2565b146105b55760405162461bcd60e51b815260206004820152602a60248201525f80516020614c8a8339815191526044820152696e6f742061637469766560b01b60648201526084015b60405180910390fd5b60208201516001600160a01b0316331461061a5760405162461bcd60e51b815260206004820152603360248201525f80516020614c8a8339815191526044820152723737ba1037bbb732b210313c9039b2b73232b960691b60648201526084016105ac565b6003825280516002906005811115610634576106346143c2565b03610678575f82606001518260a0015161064e91906144c4565b905061065a85826118d6565b506001600160401b0390811660e0850152421660a08401525061069b565b60808101516001600160401b0390811660e0808501919091528201511660a08301525b5f88815260068601602052604090208251815484929190829060ff191660018360048111156106cc576106cc6143c2565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b031990911617815560408083015160018301556060830151600283018054608086015160a08088015160c08901516001600160401b03908116600160c01b026001600160c01b03928216600160801b02929092166001600160801b03948216600160401b026001600160801b0319909616978216979097179490941792909216949094171790915560e090940151600390930180549390941667ffffffffffffffff199390931692909217909255830151905185918a917f5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69916107e0916001600160401b0391909116815260200190565b60405180910390a35050505050505050565b5f8181525f80516020614cea83398151915260205260408082208151610100810190925280545f80516020614caa83398151915293929190829060ff166005811115610840576108406143c2565b6005811115610851576108516143c2565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e090910152909150815160058111156108d6576108d66143c2565b1461093b5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016105ac565b6005600160991b016001600160a01b031663ee5b48eb6109608584608001515f611a57565b6040518263ffffffff1660e01b815260040161097c9190614506565b6020604051808303815f875af1158015610998573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bc9190614538565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0b575080546001600160401b03808416911610155b15610a295760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a5383611c76565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f610aaf64e8d4a510008361454f565b92915050565b5f610abf82611c8a565b9050610adc81606001516001600160401b03168260400151611ffd565b5050565b5f80516020614c6a8339815191525f610af884612010565b90505f80610b0983604001516121f1565b50915091505f610b188361155b565b9050816001600160401b031681608001516001600160401b03161015610b505760405162461bcd60e51b81526004016105ac9061456e565b5f8681526006860160205260409020600201546001600160401b03808416600160c01b909204161115610b955760405162461bcd60e51b81526004016105ac906145b0565b60015f87815260068701602052604090205460ff166004811115610bbb57610bbb6143c2565b14610c245760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a2064656c65676174696f6e4960448201527211081b9bdd081c195b991a5b99c81859191959606a1b60648201526084016105ac565b5f868152600686016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092179092559251928352841691859189917f245fc69b36e168426e0306fc8d8300661b9af297c7958820dbf804f9f63e7064910160405180910390a450505050505050565b5f610aaf6001600160401b03831664e8d4a510006145f9565b5f610cd38261155b565b60a0015192915050565b5f80516020614c6a8339815191525f610cf58561155b565b5f86815260058401602052604090205460c0820151919250610d2791620100009091046001600160401b031690614610565b6001600160401b0316421015610d9b5760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a206d696e696d756d207374616044820152721ad948191d5c985d1a5bdb881b9bdd081b595d606a1b60648201526084016105ac565b8315610dad57610dab858461163a565b505b610db68561242c565b5050505050565b5f610dc6612745565b610dd183833461277c565b9050610aaf60015f80516020614cca83398151915255565b5f80516020614c6a8339815191525f610e0184612010565b90505f80610e1283604001516121f1565b50915091505f610e218361155b565b9050816001600160401b031681608001516001600160401b03161015610e595760405162461bcd60e51b81526004016105ac9061456e565b5f8681526006860160205260409020600301546001600160401b0380841691161115610e975760405162461bcd60e51b81526004016105ac906145b0565b60035f87815260068701602052604090205460ff166004811115610ebd57610ebd6143c2565b14610f115760405162461bcd60e51b815260206004820152603160248201525f80516020614c8a8339815191526044820152701b9bdd081c195b991a5b99c81859191959607a1b60648201526084016105ac565b5f868152600686016020908152604091829020805460ff19166004908117808355845161010080820187529281529190046001600160a01b031692810183905260018201549381019390935260028101546001600160401b0380821660608601819052600160401b830482166080870152600160801b8304821660a0870152600160c01b909204811660c086015260039092015490911660e0840152610fb691611ffd565b826001600160401b031684887f52e9b1eaef84d46cda83ccb9d427267bc4d04f756b4a32c8302722b79e5c65ab60405160405180910390a45050505050505050565b5f80516020614caa8339815191525f61101083612010565b90505f8061102183604001516129aa565b91509150806110835760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016105ac565b5f8281526007850160205260408120805461109d90614630565b90501180156110cf575060015f83815260088601602052604090205460ff1660058111156110cd576110cd6143c2565b145b6110eb5760405162461bcd60e51b81526004016105ac90614662565b5f8281526007850160205260408120611103916141d8565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408082208151610100810190925280545f80516020614c6a83398151915293929190829060ff166004811115611216576112166143c2565b6004811115611227576112276143c2565b8152815461010090046001600160a01b03166020820152600180830154604083015260028301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e090910152909150815160048111156112ae576112ae6143c2565b14806112cc57506003815160048111156112ca576112ca6143c2565b145b6113205760405162461bcd60e51b815260206004820152603260248201525f80516020614c8a833981519152604482015271737461747573206e6f742070656e64696e6760701b60648201526084016105ac565b5f61132e826040015161155b565b905080608001516001600160401b03165f036113b25760405162461bcd60e51b815260206004820152603f60248201527f506f5356616c696461746f724d616e616765723a20636f756c64206e6f74206660448201527f696e642076616c696461746f7220666f722064656c65676174696f6e2049440060648201526084016105ac565b6005600160991b016001600160a01b031663ee5b48eb6113df846040015184608001518560a00151611a57565b6040518263ffffffff1660e01b81526004016113fb9190614506565b6020604051808303815f875af1158015611417573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db69190614538565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f80516020614caa83398151915292919061148390614630565b90501180156114b5575060015f83815260088301602052604090205460ff1660058111156114b3576114b36143c2565b145b6114d15760405162461bcd60e51b81526004016105ac90614662565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161150a91906004016146a9565b6020604051808303815f875af1158015611526573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061154a9190614538565b505050565b5f610aaf823334612b4b565b61156361420f565b5f8281525f80516020614cea8339815191526020526040908190208151610100810190925280545f80516020614caa833981519152929190829060ff1660058111156115b1576115b16143c2565b60058111156115c2576115c26143c2565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015611685573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116ac91908101906147be565b915091508061170f5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016105ac565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611752573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117769190614538565b8251146117da5760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016105ac565b60208201516001600160a01b0316156118505760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016105ac565b5f8061185f8460400151612eb4565b915091508187146118cc5760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016105ac565b9695505050505050565b5f8281525f80516020614cea833981519152602052604081206003015481905f80516020614caa83398151915290600160401b90046001600160401b0390811690851681116119365761193161192c82876144c4565b61308c565b611948565b61194861194386836144c4565b613097565b5f611952876130a1565b5f8881526008850160205260408120600301805467ffffffffffffffff60401b1916600160401b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6119a28a858b611a57565b6040518263ffffffff1660e01b81526004016119be9190614506565b6020604051808303815f875af11580156119da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119fe9190614538565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611ad057611a908160016148a6565b611a9b9060086145f9565b5081515f90839083908110611ab257611ab26148b9565b60200101906001600160f81b03191690815f1a905350600101611a7c565b505f5b6004811015611b3357611ae78160036148a6565b611af29060086145f9565b6001901c60f81b82611b058360026148cd565b81518110611b1557611b156148b9565b60200101906001600160f81b03191690815f1a905350600101611ad3565b505f5b6020811015611b9557611b4a81601f6148a6565b611b559060086145f9565b86901c60f81b82611b678360066148cd565b81518110611b7757611b776148b9565b60200101906001600160f81b03191690815f1a905350600101611b36565b505f5b6008811015611c0057611bac8160076148a6565b611bb79060086145f9565b6001600160401b038616901c60f81b82611bd28360266148cd565b81518110611be257611be26148b9565b60200101906001600160f81b03191690815f1a905350600101611b98565b505f5b6008811015611c6b57611c178160076148a6565b611c229060086145f9565b6001600160401b038516901c60f81b82611c3d83602e6148cd565b81518110611c4d57611c4d6148b9565b60200101906001600160f81b03191690815f1a905350600101611c03565b5090505b9392505050565b611c7e613123565b611c878161316e565b50565b611c9261420f565b5f80516020614caa8339815191525f611caa84612010565b90505f80611cbb83604001516129aa565b915091508015611d205760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016105ac565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115611d5257611d526143c2565b6005811115611d6357611d636143c2565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115611dea57611dea6143c2565b1480611e085750600182516005811115611e0657611e066143c2565b145b611e675760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016105ac565b600382516005811115611e7c57611e7c6143c2565b03611e8957506004611e8d565b5060055b6020808301515f90815260098801909152604081205581816005811115611eb657611eb66143c2565b90816005811115611ec957611ec96143c2565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115611efd57611efd6143c2565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115611fc857611fc86143c2565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b610adc6001600160a01b038216836131da565b60408051606080820183525f8083526020830181905292820152905f80516020614caa8339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612085573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120ac91908101906147be565b91509150806121135760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016105ac565b82548251146121765760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016105ac565b60208201516001600160a01b0316156121e95760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016105ac565b509392505050565b5f805f83516036146122155760405162461bcd60e51b81526004016105ac906148e0565b5f805b60028110156122645761222c8160016148a6565b6122379060086145f9565b61ffff1686828151811061224d5761224d6148b9565b016020015160f81c901b9190911790600101612218565b5061ffff8116156122875760405162461bcd60e51b81526004016105ac90614929565b5f805b60048110156122e25761229e8160036148a6565b6122a99060086145f9565b63ffffffff16876122bb8360026148cd565b815181106122cb576122cb6148b9565b016020015160f81c901b919091179060010161228a565b5063ffffffff81166003146123095760405162461bcd60e51b81526004016105ac9061496c565b5f805b602081101561235e5761232081601f6148a6565b61232b9060086145f9565b886123378360066148cd565b81518110612347576123476148b9565b016020015160f81c901b919091179060010161230c565b505f805b60088110156123bd576123768160076148a6565b6123819060086145f9565b6001600160401b0316896123968360266148cd565b815181106123a6576123a66148b9565b016020015160f81c901b9190911790600101612362565b505f805b600881101561241c576123d58160076148a6565b6123e09060086145f9565b6001600160401b03168a6123f583602e6148cd565b81518110612405576124056148b9565b016020015160f81c901b91909117906001016123c1565b5091989097509095509350505050565b5f8181525f80516020614cea83398151915260205260408082208151610100810190925280545f80516020614caa83398151915293929190829060ff16600581111561247a5761247a6143c2565b600581111561248b5761248b6143c2565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e09091015290915081516005811115612513576125136143c2565b1461256f5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016105ac565b60408101516001600160a01b0316336001600160a01b0316146125e95760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016105ac565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff1916600183600581111561262d5761262d6143c2565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f6126f084826118d6565b60a0840151604080516001600160401b03909216825242602083015291935083925086917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a350505050565b5f80516020614cca83398151915280546001190161277657604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020614c6a833981519152906001600160401b03166127c8604086016020870161434e565b6001600160401b031610156128375760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d696e60448201526e1039ba30b5b290323ab930ba34b7b760891b60648201526084016105ac565b600381015461284960208601866149c2565b61ffff161015801561286d575061271061286660208601866149c2565b61ffff1611155b6128895760405162461bcd60e51b81526004016105ac906149dd565b80548310156128ec5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152687420746f6f206c6f7760b81b60648201526084016105ac565b80600101548311156129535760405162461bcd60e51b815260206004820152602a60248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152690e840e8dede40d0d2ced60b31b60648201526084016105ac565b825f61295e82610a9f565b90505f61296b888361326d565b5f818152600586016020526040902090915087906129898282614a28565b509098975050505050505050565b60015f80516020614cca83398151915255565b5f8082516027146129cd5760405162461bcd60e51b81526004016105ac906148e0565b5f805b6002811015612a1c576129e48160016148a6565b6129ef9060086145f9565b61ffff16858281518110612a0557612a056148b9565b016020015160f81c901b91909117906001016129d0565b5061ffff811615612a3f5760405162461bcd60e51b81526004016105ac90614929565b5f805b6004811015612a9a57612a568160036148a6565b612a619060086145f9565b63ffffffff1686612a738360026148cd565b81518110612a8357612a836148b9565b016020015160f81c901b9190911790600101612a42565b5063ffffffff8116600214612ac15760405162461bcd60e51b81526004016105ac9061496c565b5f805b6020811015612b1657612ad881601f6148a6565b612ae39060086145f9565b87612aef8360066148cd565b81518110612aff57612aff6148b9565b016020015160f81c901b9190911790600101612ac4565b505f86602681518110612b2b57612b2b6148b9565b016020015191976001600160f81b03199092161515965090945050505050565b5f612b54612745565b5f80516020614c6a8339815191525f612b6c84610a9f565b90505f612b788761155b565b9050600281516005811115612b8f57612b8f6143c2565b14612bee5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a2076616c696461746f72206e6044820152686f742061637469766560b81b60648201526084016105ac565b5f828260a00151612bff9190614610565b60048501546060840151919250612c21916001600160401b0390911690614a7e565b6001600160401b0316816001600160401b03161115612ca05760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a206d6178696d756d2076616c6044820152741a59185d1bdc881dd95a59da1d081c995858da1959605a1b60648201526084016105ac565b5f80612cac8a846118d6565b915091505f8a83604051602001612cda92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815282825280516020909101206101008301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905260a0850181905290881660c085015260e090930183905284835260068b01909152902081518154829060ff19166001836004811115612d7557612d756143c2565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002860180546080808a015160a08b015160c08c01516001600160401b039687166001600160801b031990951694909417600160401b92871692909202919091176001600160801b0316600160801b918616919091026001600160c01b031617600160c01b928516929092029190911790915560e0909701516003909601805467ffffffffffffffff191696821696909617909555815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49650505050505050611c6f60015f80516020614cca83398151915255565b5f808251602e14612ed75760405162461bcd60e51b81526004016105ac906148e0565b5f805b6002811015612f2657612eee8160016148a6565b612ef99060086145f9565b61ffff16858281518110612f0f57612f0f6148b9565b016020015160f81c901b9190911790600101612eda565b5061ffff811615612f495760405162461bcd60e51b81526004016105ac90614929565b5f805b6004811015612fa457612f608160036148a6565b612f6b9060086145f9565b63ffffffff1686612f7d8360026148cd565b81518110612f8d57612f8d6148b9565b016020015160f81c901b9190911790600101612f4c565b5063ffffffff8116600414612fcb5760405162461bcd60e51b81526004016105ac9061496c565b5f805b602081101561302057612fe281601f6148a6565b612fed9060086145f9565b87612ff98360066148cd565b81518110613009576130096148b9565b016020015160f81c901b9190911790600101612fce565b505f805b600881101561307f576130388160076148a6565b6130439060086145f9565b6001600160401b0316886130588360266148cd565b81518110613068576130686148b9565b016020015160f81c901b9190911790600101613024565b5090969095509350505050565b611c878160016137a7565b611c87815f6137a7565b5f8181525f80516020614cea8339815191526020526040812060030180545f80516020614caa833981519152916001600160401b0390911690836130e483614aa9565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661316c57604051631afcd79f60e31b815260040160405180910390fd5b565b613176613123565b61317f81613a01565b611c87608082013560a083013561319c60e0850160c0860161434e565b6131ad610100860160e087016149c2565b61ffff166131c361012087016101008801614ace565b6131d561014088016101208901614aee565b613a22565b804710156131fd5760405163cd78605960e01b81523060048201526024016105ac565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613246576040519150601f19603f3d011682016040523d82523d5f602084013e61324b565b606091505b505090508061154a57604051630a12f52160e11b815260040160405180910390fd5b5f5f80516020614caa8339815191524261328d604086016020870161434e565b6001600160401b0316116132ff5760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016105ac565b61330f604085016020860161434e565b6001600160401b03166133256202a300426148cd565b116133985760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016105ac565b83356133f05760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016105ac565b83355f908152600982016020526040902054156134605760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016105ac565b61346d6040850185614b09565b90506030146134d45760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016105ac565b6134dd8361308c565b5f806135776040518060a0016040528085600101548152602001885f01358152602001876001600160401b03168152602001886020016020810190613522919061434e565b6001600160401b0316815260200161353d60408a018a614b09565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250613c66565b5f828152600786016020526040902091935091506135958282614b8f565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906135c2908590600401614506565b6020604051808303815f875af11580156135de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136029190614538565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff19166001836005811115613684576136846143c2565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b9161377991908e01908e0161434e565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b604080516080810182527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb03548082527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb045460208301527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0554928201929092527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06546001600160401b031660608201525f80516020614caa83398151915291429190158061388d575060028301548151613889916001600160401b0316906148cd565b8210155b156138b3576001600160401b0385166060820152818152604081015160208201526138d2565b84816060018181516138c59190614610565b6001600160401b03169052505b60608101516138e2906064614a7e565b602082015160028501546001600160401b03929092169161390d9190600160401b900460ff166145f9565b10156139715760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016105ac565b831561399a57846001600160401b03168160400181815161399291906148cd565b9052506139b9565b846001600160401b0316816040018181516139b591906148a6565b9052505b805160038401556020810151600484015560408101516005840155606001516006909201805467ffffffffffffffff19166001600160401b0390931692909217909155505050565b613a09613123565b613a1161400b565b613a1961401b565b611c8781614023565b613a2a613123565b5f80516020614c6a83398151915283613a965760405162461bcd60e51b815260206004820152602860248201527f506f5356616c696461746f724d616e616765723a207a65726f2064656c65676160448201526774696f6e2066656560c01b60648201526084016105ac565b612710841115613ab85760405162461bcd60e51b81526004016105ac906149dd565b85871115613b205760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642073746160448201526e6b6520616d6f756e742072616e676560881b60648201526084016105ac565b5f8360ff1611613b8d5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a207a65726f206d6178696d75604482015271369039ba30b5b29036bab63a34b83634b2b960711b60648201526084016105ac565b600a60ff84161115613bff5760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d617860448201527434b6bab69039ba30b5b29036bab63a34b83634b2b960591b60648201526084016105ac565b95865560018601949094556002850180546001600160401b0390941667ffffffffffffffff19909416939093179092556003840155600490920180546001600160a01b03909216600160401b026001600160e01b031990921660ff90931692909217179055565b5f6060826080015151603014613cd05760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016105ac565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613d4757613d078160016148a6565b613d129060086145f9565b5081515f90839083908110613d2957613d296148b9565b60200101906001600160f81b03191690815f1a905350600101613cf3565b505f5b6004811015613da557613d5e8160036148a6565b613d699060086145f9565b505f82613d778360026148cd565b81518110613d8757613d876148b9565b60200101906001600160f81b03191690815f1a905350600101613d4a565b505f5b6020811015613e025784518160208110613dc457613dc46148b9565b1a60f81b82613dd48360066148cd565b81518110613de457613de46148b9565b60200101906001600160f81b03191690815f1a905350600101613da8565b505f5b6020811015613e625784602001518160208110613e2457613e246148b9565b1a60f81b82613e348360266148cd565b81518110613e4457613e446148b9565b60200101906001600160f81b03191690815f1a905350600101613e05565b505f5b6008811015613ed657613e798160076148a6565b613e849060086145f9565b60ff1685604001516001600160401b0316901c60f81b82826046613ea891906148cd565b81518110613eb857613eb86148b9565b60200101906001600160f81b03191690815f1a905350600101613e65565b505f5b6030811015613f415784608001518181518110613ef857613ef86148b9565b01602001516001600160f81b03191682613f1383604e6148cd565b81518110613f2357613f236148b9565b60200101906001600160f81b03191690815f1a905350600101613ed9565b505f5b6008811015613fb357613f588160076148a6565b613f639060086145f9565b60608601516001600160401b0390811691161c60f81b82613f8583607e6148cd565b81518110613f9557613f956148b9565b60200101906001600160f81b03191690815f1a905350600101613f44565b50600281604051613fc49190614c4e565b602060405180830381855afa158015613fdf573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906140029190614538565b94909350915050565b614013613123565b61316c6141d0565b61316c613123565b61402b613123565b80355f80516020614caa83398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb015560146140776080840160608501614ace565b60ff1611156140e45760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016105ac565b5f6140f56080840160608501614ace565b60ff161161415d5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016105ac565b61416d6080830160608401614ace565b60028201805460ff92909216600160401b0260ff60401b1990921691909117905561419e606083016040840161434e565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b612997613123565b5080546141e490614630565b5f825580601f106141f3575050565b601f0160209004905f5260205f2090810190611c879190614253565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614267575f8155600101614254565b5090565b8015158114611c87575f80fd5b803563ffffffff8116811461428b575f80fd5b919050565b5f805f606084860312156142a2575f80fd5b8335925060208401356142b48161426b565b91506142c260408501614278565b90509250925092565b5f602082840312156142db575f80fd5b5035919050565b5f61014082840312156142f3575f80fd5b50919050565b5f60208284031215614309575f80fd5b611c6f82614278565b5f8060408385031215614323575f80fd5b61432c83614278565b946020939093013593505050565b6001600160401b0381168114611c87575f80fd5b5f6020828403121561435e575f80fd5b8135611c6f8161433a565b5f80828403606081121561437b575f80fd5b83356001600160401b03811115614390575f80fd5b8401606081870312156143a1575f80fd5b92506040601f19820112156143b4575f80fd5b506020830190509250929050565b634e487b7160e01b5f52602160045260245ffd5b8151610100820190600681106143fa57634e487b7160e01b5f52602160045260245ffd5b8083525060208301516020830152604083015161442260408401826001600160a01b03169052565b50606083015161443d60608401826001600160401b03169052565b50608083015161445860808401826001600160401b03169052565b5060a083015161447360a08401826001600160401b03169052565b5060c083015161448e60c08401826001600160401b03169052565b5060e08301516144a960e08401826001600160401b03169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038281168282160390808211156144a9576144a96144b0565b5f5b838110156144fe5781810151838201526020016144e6565b50505f910152565b602081525f82518060208401526145248160408501602087016144e4565b601f01601f19169190910160400192915050565b5f60208284031215614548575f80fd5b5051919050565b5f8261456957634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b8082028115828204841417610aaf57610aaf6144b0565b6001600160401b038181168382160190808211156144a9576144a96144b0565b600181811c9082168061464457607f821691505b6020821081036142f357634e487b7160e01b5f52602260045260245ffd5b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f84546146bb81614630565b806020870152604060018084165f81146146dc57600181146146f857614725565b60ff19851660408a0152604084151560051b8a01019550614725565b895f5260205f205f5b8581101561471c5781548b8201860152908301908801614701565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561476957614769614733565b60405290565b604051601f8201601f191681016001600160401b038111828210171561479757614797614733565b604052919050565b6001600160a01b0381168114611c87575f80fd5b805161428b8161426b565b5f80604083850312156147cf575f80fd5b82516001600160401b03808211156147e5575f80fd5b90840190606082870312156147f8575f80fd5b614800614747565b825181526020808401516148138161479f565b82820152604084015183811115614828575f80fd5b80850194505087601f85011261483c575f80fd5b83518381111561484e5761484e614733565b614860601f8201601f1916830161476f565b93508084528882828701011115614875575f80fd5b614884818386018488016144e4565b508260408301528195506148998188016147b3565b9450505050509250929050565b81810381811115610aaf57610aaf6144b0565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610aaf57610aaf6144b0565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b61ffff81168114611c87575f80fd5b5f602082840312156149d2575f80fd5b8135611c6f816149b3565b6020808252602b908201527f506f5356616c696461746f724d616e616765723a20696e76616c69642064656c60408201526a65676174696f6e2066656560a81b606082015260800190565b8135614a33816149b3565b61ffff8116905081548161ffff1982161783556020840135614a548161433a565b69ffffffffffffffff00008160101b168369ffffffffffffffffffff198416171784555050505050565b6001600160401b03818116838216028082169190828114614aa157614aa16144b0565b505092915050565b5f6001600160401b03808316818103614ac457614ac46144b0565b6001019392505050565b5f60208284031215614ade575f80fd5b813560ff81168114611c6f575f80fd5b5f60208284031215614afe575f80fd5b8135611c6f8161479f565b5f808335601e19843603018112614b1e575f80fd5b8301803591506001600160401b03821115614b37575f80fd5b602001915036819003821315611a50575f80fd5b601f82111561154a57805f5260205f20601f840160051c81016020851015614b705750805b601f840160051c820191505b81811015610db6575f8155600101614b7c565b81516001600160401b03811115614ba857614ba8614733565b614bbc81614bb68454614630565b84614b4b565b602080601f831160018114614bef575f8415614bd85750858301515b5f19600386901b1c1916600185901b178555614c46565b5f85815260208120601f198616915b82811015614c1d57888601518255948401946001909101908401614bfe565b5085821015614c3a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251614c5f8184602087016144e4565b919091019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00506f5356616c696461746f724d616e616765723a2064656c65676174696f6e20e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/staking/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/staking/PoAValidatorManager/PoAValidatorManager.go index e8db2a7e7..c41d13a02 100644 --- a/abi-bindings/go/staking/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/staking/PoAValidatorManager/PoAValidatorManager.go @@ -58,8 +58,8 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activeValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeEndValidation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeValidatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidator\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structValidator\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"startingWeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageNonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"startedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"endedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWeight\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"settings\",\"type\":\"tuple\",\"internalType\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"pChainBlockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorRegistration\",\"inputs\":[{\"name\":\"registrationInput\",\"type\":\"tuple\",\"internalType\":\"structValidatorRegistrationInput\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendEndValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendRegisterValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodEnded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumValidatorStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]}]", - Bin: "0x608060405234801561000f575f80fd5b50604051612ff8380380612ff883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b612eab8061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106100fb575f3560e01c806397fb70d411610093578063c974d1b611610063578063c974d1b61461025c578063d5f20ff614610276578063df93d8de14610296578063f2fde38b146102a0575f80fd5b806397fb70d414610215578063a3a65e4814610228578063b771b3bc1461023b578063bee0a03f14610249575f80fd5b806366435abf116100ce57806366435abf1461018b578063715018a6146101b65780638994ab49146101be5780638da5cb5b146101d1575f80fd5b80630322ed98146100ff5780630cdd098514610114578063467ef06f14610165578063580a400614610178575b5f80fd5b61011261010d366004612708565b6102b3565b005b610152610122366004612708565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b61011261017336600461271f565b610488565b61011261018636600461275d565b610495565b61019e610199366004612708565b6105a3565b6040516001600160401b03909116815260200161015c565b6101126105b7565b6101526101cc3660046127b4565b6105ca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161015c565b610112610223366004612708565b6105e6565b61011261023636600461271f565b6105f2565b6101fd6005600160991b0181565b610112610257366004612708565b6107af565b610264601481565b60405160ff909116815260200161015c565b610289610284366004612708565b6108c3565b60405161015c9190612816565b61019e6202a30081565b6101126102ae3660046128f0565b6109a2565b5f8181525f80516020612e7f83398151915260205260408082208151610100810190925280545f80516020612e5f83398151915293929190829060ff16600581111561030157610301612802565b600581111561031257610312612802565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091508151600581111561039757610397612802565b146104015760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084015b60405180910390fd5b6005600160991b016001600160a01b031663ee5b48eb6104268584608001515f6109dc565b6040518263ffffffff1660e01b8152600401610442919061292d565b6020604051808303815f875af115801561045e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610482919061295f565b50505050565b61049181610bf9565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156104d95750825b90505f826001600160401b031660011480156104f45750303b155b905081158015610502575080155b156105205760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561054a57845460ff60401b1916600160401b1785555b6105548787610f6c565b831561059a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f6105ad826108c3565b60a0015192915050565b6105bf610f86565b6105c85f610fe1565b565b5f6105d3610f86565b6105dd8383611051565b90505b92915050565b6105ef8161158b565b50565b5f80516020612e5f8339815191525f61060a83611929565b90505f8061061b8360400151611b0a565b915091508061067d5760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016103f8565b5f8281526007850160205260408120805461069790612976565b90501180156106c9575060015f83815260088601602052604090205460ff1660058111156106c7576106c7612802565b145b6106e55760405162461bcd60e51b81526004016103f8906129ae565b5f82815260078501602052604081206106fd91612675565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f80516020612e5f8339815191529291906107f790612976565b9050118015610829575060015f83815260088301602052604090205460ff16600581111561082757610827612802565b145b6108455760405162461bcd60e51b81526004016103f8906129ae565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161087e91906004016129f5565b6020604051808303815f875af115801561089a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108be919061295f565b505050565b6108cb6126ac565b5f8281525f80516020612e7f8339815191526020526040908190208151610100810190925280545f80516020612e5f833981519152929190829060ff16600581111561091957610919612802565b600581111561092a5761092a612802565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6109aa610f86565b6001600160a01b0381166109d357604051631e4fbdf760e01b81525f60048201526024016103f8565b6105ef81610fe1565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015610a5557610a15816001612aa7565b610a20906008612aba565b5081515f90839083908110610a3757610a37612ad1565b60200101906001600160f81b03191690815f1a905350600101610a01565b505f5b6004811015610ab857610a6c816003612aa7565b610a77906008612aba565b6001901c60f81b82610a8a836002612ae5565b81518110610a9a57610a9a612ad1565b60200101906001600160f81b03191690815f1a905350600101610a58565b505f5b6020811015610b1a57610acf81601f612aa7565b610ada906008612aba565b86901c60f81b82610aec836006612ae5565b81518110610afc57610afc612ad1565b60200101906001600160f81b03191690815f1a905350600101610abb565b505f5b6008811015610b8557610b31816007612aa7565b610b3c906008612aba565b6001600160401b038616901c60f81b82610b57836026612ae5565b81518110610b6757610b67612ad1565b60200101906001600160f81b03191690815f1a905350600101610b1d565b505f5b6008811015610bf057610b9c816007612aa7565b610ba7906008612aba565b6001600160401b038516901c60f81b82610bc283602e612ae5565b81518110610bd257610bd2612ad1565b60200101906001600160f81b03191690815f1a905350600101610b88565b50949350505050565b610c016126ac565b5f80516020612e5f8339815191525f610c1984611929565b90505f80610c2a8360400151611b0a565b915091508015610c8f5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016103f8565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115610cc157610cc1612802565b6005811115610cd257610cd2612802565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115610d5957610d59612802565b1480610d775750600182516005811115610d7557610d75612802565b145b610dd65760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016103f8565b600382516005811115610deb57610deb612802565b03610df857506004610dfc565b5060055b6020808301515f90815260098801909152604081205581816005811115610e2557610e25612802565b90816005811115610e3857610e38612802565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115610e6c57610e6c612802565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115610f3757610f37612802565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b610f74611d69565b610f7d82611db2565b61049181611dd3565b33610fb87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105c85760405163118cdaa760e01b81523360048201526024016103f8565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f5f80516020612e5f833981519152426110716040860160208701612af8565b6001600160401b0316116110e35760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016103f8565b6110f36040850160208601612af8565b6001600160401b03166111096202a30042612ae5565b1161117c5760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016103f8565b83356111d45760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016103f8565b83355f908152600982016020526040902054156112445760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016103f8565b6112516040850185612b11565b90506030146112b85760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016103f8565b6112c183611de4565b5f8061135b6040518060a0016040528085600101548152602001885f01358152602001876001600160401b031681526020018860200160208101906113069190612af8565b6001600160401b0316815260200161132160408a018a612b11565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250611def565b5f828152600786016020526040902091935091506113798282612ba5565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906113a690859060040161292d565b6020604051808303815f875af11580156113c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e6919061295f565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff1916600183600581111561146857611468612802565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b9161155d91908e01908e01612af8565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f8181525f80516020612e7f83398151915260205260408082208151610100810190925280545f80516020612e5f83398151915293929190829060ff1660058111156115d9576115d9612802565b60058111156115ea576115ea612802565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e0909101529091508151600581111561167257611672612802565b146116ce5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016103f8565b60408101516001600160a01b0316336001600160a01b0316146117485760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016103f8565b6117558160a00151612194565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff1916600183600581111561179957611799612802565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f6118658461185f8161219e565b5f6109dc565b60405163ee5b48eb60e01b81529091505f906005600160991b019063ee5b48eb9061189490859060040161292d565b6020604051808303815f875af11580156118b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118d4919061295f565b60a0840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b60408051606080820183525f8083526020830181905292820152905f80516020612e5f8339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561199e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119c59190810190612ccb565b9150915080611a2c5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016103f8565b8254825114611a8f5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016103f8565b60208201516001600160a01b031615611b025760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016103f8565b509392505050565b5f808251602714611b6f5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616044820152680ceca40d8cadccee8d60bb1b60648201526084016103f8565b5f805b6002811015611bbe57611b86816001612aa7565b611b91906008612aba565b61ffff16858281518110611ba757611ba7612ad1565b016020015160f81c901b9190911790600101611b72565b5061ffff811615611c1d5760405162461bcd60e51b815260206004820152602360248201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360448201526208125160ea1b60648201526084016103f8565b5f805b6004811015611c7857611c34816003612aa7565b611c3f906008612aba565b63ffffffff1686611c51836002612ae5565b81518110611c6157611c61612ad1565b016020015160f81c901b9190911790600101611c20565b5063ffffffff8116600214611cdf5760405162461bcd60e51b815260206004820152602760248201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616044820152666765207479706560c81b60648201526084016103f8565b5f805b6020811015611d3457611cf681601f612aa7565b611d01906008612aba565b87611d0d836006612ae5565b81518110611d1d57611d1d612ad1565b016020015160f81c901b9190911790600101611ce2565b505f86602681518110611d4957611d49612ad1565b016020015191976001600160f81b03199092161515965090945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166105c857604051631afcd79f60e31b815260040160405180910390fd5b611dba611d69565b611dc2612220565b611dca612230565b6105ef81612238565b611ddb611d69565b6105ef816123e5565b6105ef8160016123ed565b5f6060826080015151603014611e595760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016103f8565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015611ed057611e90816001612aa7565b611e9b906008612aba565b5081515f90839083908110611eb257611eb2612ad1565b60200101906001600160f81b03191690815f1a905350600101611e7c565b505f5b6004811015611f2e57611ee7816003612aa7565b611ef2906008612aba565b505f82611f00836002612ae5565b81518110611f1057611f10612ad1565b60200101906001600160f81b03191690815f1a905350600101611ed3565b505f5b6020811015611f8b5784518160208110611f4d57611f4d612ad1565b1a60f81b82611f5d836006612ae5565b81518110611f6d57611f6d612ad1565b60200101906001600160f81b03191690815f1a905350600101611f31565b505f5b6020811015611feb5784602001518160208110611fad57611fad612ad1565b1a60f81b82611fbd836026612ae5565b81518110611fcd57611fcd612ad1565b60200101906001600160f81b03191690815f1a905350600101611f8e565b505f5b600881101561205f57612002816007612aa7565b61200d906008612aba565b60ff1685604001516001600160401b0316901c60f81b828260466120319190612ae5565b8151811061204157612041612ad1565b60200101906001600160f81b03191690815f1a905350600101611fee565b505f5b60308110156120ca578460800151818151811061208157612081612ad1565b01602001516001600160f81b0319168261209c83604e612ae5565b815181106120ac576120ac612ad1565b60200101906001600160f81b03191690815f1a905350600101612062565b505f5b600881101561213c576120e1816007612aa7565b6120ec906008612aba565b60608601516001600160401b0390811691161c60f81b8261210e83607e612ae5565b8151811061211e5761211e612ad1565b60200101906001600160f81b03191690815f1a9053506001016120cd565b5060028160405161214d9190612db3565b602060405180830381855afa158015612168573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061218b919061295f565b94909350915050565b6105ef815f6123ed565b5f8181525f80516020612e7f8339815191526020526040812060030180545f80516020612e5f833981519152916001600160401b0390911690836121e183612dce565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b612228611d69565b6105c8612647565b6105c8611d69565b612240611d69565b80355f80516020612e5f83398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0155601461228c6080840160608501612df3565b60ff1611156122f95760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016103f8565b5f61230a6080840160608501612df3565b60ff16116123725760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016103f8565b6123826080830160608401612df3565b60028201805460ff92909216600160401b0260ff60401b199092169190911790556123b36060830160408401612af8565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b6109aa611d69565b604080516080810182527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb03548082527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb045460208301527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0554928201929092527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06546001600160401b031660608201525f80516020612e5f8339815191529142919015806124d35750600283015481516124cf916001600160401b031690612ae5565b8210155b156124f9576001600160401b038516606082015281815260408101516020820152612518565b848160600181815161250b9190612e13565b6001600160401b03169052505b6060810151612528906064612e33565b602082015160028501546001600160401b0392909216916125539190600160401b900460ff16612aba565b10156125b75760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016103f8565b83156125e057846001600160401b0316816040018181516125d89190612ae5565b9052506125ff565b846001600160401b0316816040018181516125fb9190612aa7565b9052505b805160038401556020810151600484015560408101516005840155606001516006909201805467ffffffffffffffff19166001600160401b0390931692909217909155505050565b61264f611d69565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50805461268190612976565b5f825580601f10612690575050565b601f0160209004905f5260205f20908101906105ef91906126f0565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115612704575f81556001016126f1565b5090565b5f60208284031215612718575f80fd5b5035919050565b5f6020828403121561272f575f80fd5b813563ffffffff81168114612742575f80fd5b9392505050565b6001600160a01b03811681146105ef575f80fd5b5f8082840360a081121561276f575f80fd5b608081121561277c575f80fd5b50829150608083013561278e81612749565b809150509250929050565b80356001600160401b03811681146127af575f80fd5b919050565b5f80604083850312156127c5575f80fd5b82356001600160401b038111156127da575f80fd5b8301606081860312156127eb575f80fd5b91506127f960208401612799565b90509250929050565b634e487b7160e01b5f52602160045260245ffd5b81516101008201906006811061283a57634e487b7160e01b5f52602160045260245ffd5b8083525060208301516020830152604083015161286260408401826001600160a01b03169052565b50606083015161287d60608401826001600160401b03169052565b50608083015161289860808401826001600160401b03169052565b5060a08301516128b360a08401826001600160401b03169052565b5060c08301516128ce60c08401826001600160401b03169052565b5060e08301516128e960e08401826001600160401b03169052565b5092915050565b5f60208284031215612900575f80fd5b813561274281612749565b5f5b8381101561292557818101518382015260200161290d565b50505f910152565b602081525f825180602084015261294b81604085016020870161290b565b601f01601f19169190910160400192915050565b5f6020828403121561296f575f80fd5b5051919050565b600181811c9082168061298a57607f821691505b6020821081036129a857634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f8454612a0781612976565b806020870152604060018084165f8114612a285760018114612a4457612a71565b60ff19851660408a0152604084151560051b8a01019550612a71565b895f5260205f205f5b85811015612a685781548b8201860152908301908801612a4d565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156105e0576105e0612a93565b80820281158282048414176105e0576105e0612a93565b634e487b7160e01b5f52603260045260245ffd5b808201808211156105e0576105e0612a93565b5f60208284031215612b08575f80fd5b6105dd82612799565b5f808335601e19843603018112612b26575f80fd5b8301803591506001600160401b03821115612b3f575f80fd5b602001915036819003821315612b53575f80fd5b9250929050565b601f8211156108be57805f5260205f20601f840160051c81016020851015612b7f5750805b601f840160051c820191505b81811015612b9e575f8155600101612b8b565b5050505050565b81516001600160401b03811115612bbe57612bbe612a7f565b612bd281612bcc8454612976565b84612b5a565b602080601f831160018114612c05575f8415612bee5750858301515b5f19600386901b1c1916600185901b178555612c5c565b5f85815260208120601f198616915b82811015612c3357888601518255948401946001909101908401612c14565b5085821015612c5057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b604051606081016001600160401b0381118282101715612c8657612c86612a7f565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612cb457612cb4612a7f565b604052919050565b805180151581146127af575f80fd5b5f8060408385031215612cdc575f80fd5b82516001600160401b0380821115612cf2575f80fd5b9084019060608287031215612d05575f80fd5b612d0d612c64565b82518152602080840151612d2081612749565b82820152604084015183811115612d35575f80fd5b80850194505087601f850112612d49575f80fd5b835183811115612d5b57612d5b612a7f565b612d6d601f8201601f19168301612c8c565b93508084528882828701011115612d82575f80fd5b612d918183860184880161290b565b50826040830152819550612da6818801612cbc565b9450505050509250929050565b5f8251612dc481846020870161290b565b9190910192915050565b5f6001600160401b03808316818103612de957612de9612a93565b6001019392505050565b5f60208284031215612e03575f80fd5b813560ff81168114612742575f80fd5b6001600160401b038181168382160190808211156128e9576128e9612a93565b6001600160401b03818116838216028082169190828114612e5657612e56612a93565b50509291505056fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activeValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"completeEndValidation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeValidatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidator\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structValidator\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"startingWeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"messageNonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"startedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"endedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWeight\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"settings\",\"type\":\"tuple\",\"internalType\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"pChainBlockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorRegistration\",\"inputs\":[{\"name\":\"registrationInput\",\"type\":\"tuple\",\"internalType\":\"structValidatorRegistrationInput\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendEndValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendRegisterValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodEnded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumValidatorStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWeightUpdate\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]}]", + Bin: "0x608060405234801561000f575f80fd5b5060405161311238038061311283398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b612fc58061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106100fb575f3560e01c806397fb70d411610093578063c974d1b611610063578063c974d1b61461025c578063d5f20ff614610276578063df93d8de14610296578063f2fde38b146102a0575f80fd5b806397fb70d414610215578063a3a65e4814610228578063b771b3bc1461023b578063bee0a03f14610249575f80fd5b806366435abf116100ce57806366435abf1461018b578063715018a6146101b65780638994ab49146101be5780638da5cb5b146101d1575f80fd5b80630322ed98146100ff5780630cdd098514610114578063467ef06f14610165578063580a400614610178575b5f80fd5b61011261010d366004612809565b6102b3565b005b610152610122366004612809565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b610112610173366004612820565b610488565b61011261018636600461285e565b610495565b61019e610199366004612809565b6105a3565b6040516001600160401b03909116815260200161015c565b6101126105b7565b6101526101cc3660046128b5565b6105ca565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161015c565b610112610223366004612809565b6105e6565b610112610236366004612820565b6105f2565b6101fd6005600160991b0181565b610112610257366004612809565b6107af565b610264601481565b60405160ff909116815260200161015c565b610289610284366004612809565b6108c3565b60405161015c9190612917565b61019e6202a30081565b6101126102ae3660046129f1565b6109a2565b5f8181525f80516020612f9983398151915260205260408082208151610100810190925280545f80516020612f7983398151915293929190829060ff16600581111561030157610301612903565b600581111561031257610312612903565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091508151600581111561039757610397612903565b146104015760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084015b60405180910390fd5b6005600160991b016001600160a01b031663ee5b48eb6104268584608001515f6109dc565b6040518263ffffffff1660e01b81526004016104429190612a2e565b6020604051808303815f875af115801561045e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104829190612a60565b50505050565b61049181610bf9565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156104d95750825b90505f826001600160401b031660011480156104f45750303b155b905081158015610502575080155b156105205760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561054a57845460ff60401b1916600160401b1785555b6105548787610f6c565b831561059a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f6105ad826108c3565b60a0015192915050565b6105bf610f86565b6105c85f610fe1565b565b5f6105d3610f86565b6105dd8383611051565b90505b92915050565b6105ef8161158b565b50565b5f80516020612f798339815191525f61060a836118a4565b90505f8061061b8360400151611a85565b915091508061067d5760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016103f8565b5f8281526007850160205260408120805461069790612a77565b90501180156106c9575060015f83815260088601602052604090205460ff1660058111156106c7576106c7612903565b145b6106e55760405162461bcd60e51b81526004016103f890612aaf565b5f82815260078501602052604081206106fd91612776565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f80516020612f798339815191529291906107f790612a77565b9050118015610829575060015f83815260088301602052604090205460ff16600581111561082757610827612903565b145b6108455760405162461bcd60e51b81526004016103f890612aaf565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161087e9190600401612af6565b6020604051808303815f875af115801561089a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108be9190612a60565b505050565b6108cb6127ad565b5f8281525f80516020612f998339815191526020526040908190208151610100810190925280545f80516020612f79833981519152929190829060ff16600581111561091957610919612903565b600581111561092a5761092a612903565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6109aa610f86565b6001600160a01b0381166109d357604051631e4fbdf760e01b81525f60048201526024016103f8565b6105ef81610fe1565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015610a5557610a15816001612ba8565b610a20906008612bbb565b5081515f90839083908110610a3757610a37612bd2565b60200101906001600160f81b03191690815f1a905350600101610a01565b505f5b6004811015610ab857610a6c816003612ba8565b610a77906008612bbb565b6001901c60f81b82610a8a836002612be6565b81518110610a9a57610a9a612bd2565b60200101906001600160f81b03191690815f1a905350600101610a58565b505f5b6020811015610b1a57610acf81601f612ba8565b610ada906008612bbb565b86901c60f81b82610aec836006612be6565b81518110610afc57610afc612bd2565b60200101906001600160f81b03191690815f1a905350600101610abb565b505f5b6008811015610b8557610b31816007612ba8565b610b3c906008612bbb565b6001600160401b038616901c60f81b82610b57836026612be6565b81518110610b6757610b67612bd2565b60200101906001600160f81b03191690815f1a905350600101610b1d565b505f5b6008811015610bf057610b9c816007612ba8565b610ba7906008612bbb565b6001600160401b038516901c60f81b82610bc283602e612be6565b81518110610bd257610bd2612bd2565b60200101906001600160f81b03191690815f1a905350600101610b88565b50949350505050565b610c016127ad565b5f80516020612f798339815191525f610c19846118a4565b90505f80610c2a8360400151611a85565b915091508015610c8f5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016103f8565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115610cc157610cc1612903565b6005811115610cd257610cd2612903565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115610d5957610d59612903565b1480610d775750600182516005811115610d7557610d75612903565b145b610dd65760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016103f8565b600382516005811115610deb57610deb612903565b03610df857506004610dfc565b5060055b6020808301515f90815260098801909152604081205581816005811115610e2557610e25612903565b90816005811115610e3857610e38612903565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115610e6c57610e6c612903565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115610f3757610f37612903565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b610f74611ce4565b610f7d82611d2d565b61049181611d4e565b33610fb87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105c85760405163118cdaa760e01b81523360048201526024016103f8565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f5f80516020612f79833981519152426110716040860160208701612bf9565b6001600160401b0316116110e35760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016103f8565b6110f36040850160208601612bf9565b6001600160401b03166111096202a30042612be6565b1161117c5760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016103f8565b83356111d45760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016103f8565b83355f908152600982016020526040902054156112445760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016103f8565b6112516040850185612c12565b90506030146112b85760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016103f8565b6112c183611d5f565b5f8061135b6040518060a0016040528085600101548152602001885f01358152602001876001600160401b031681526020018860200160208101906113069190612bf9565b6001600160401b0316815260200161132160408a018a612c12565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250611d6a565b5f828152600786016020526040902091935091506113798282612c9f565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906113a6908590600401612a2e565b6020604051808303815f875af11580156113c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e69190612a60565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff1916600183600581111561146857611468612903565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b9161155d91908e01908e01612bf9565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f8181525f80516020612f9983398151915260205260408082208151610100810190925280545f80516020612f7983398151915293929190829060ff1660058111156115d9576115d9612903565b60058111156115ea576115ea612903565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e0909101529091508151600581111561167257611672612903565b146116ce5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016103f8565b60408101516001600160a01b0316336001600160a01b0316146117485760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016103f8565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff1916600183600581111561178c5761178c612903565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f61184f848261210f565b60a0840151604080516001600160401b03909216825242602083015291935083925086917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a350505050565b60408051606080820183525f8083526020830181905292820152905f80516020612f798339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611919573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119409190810190612dc5565b91509150806119a75760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016103f8565b8254825114611a0a5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016103f8565b60208201516001600160a01b031615611a7d5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016103f8565b509392505050565b5f808251602714611aea5760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616044820152680ceca40d8cadccee8d60bb1b60648201526084016103f8565b5f805b6002811015611b3957611b01816001612ba8565b611b0c906008612bbb565b61ffff16858281518110611b2257611b22612bd2565b016020015160f81c901b9190911790600101611aed565b5061ffff811615611b985760405162461bcd60e51b815260206004820152602360248201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360448201526208125160ea1b60648201526084016103f8565b5f805b6004811015611bf357611baf816003612ba8565b611bba906008612bbb565b63ffffffff1686611bcc836002612be6565b81518110611bdc57611bdc612bd2565b016020015160f81c901b9190911790600101611b9b565b5063ffffffff8116600214611c5a5760405162461bcd60e51b815260206004820152602760248201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616044820152666765207479706560c81b60648201526084016103f8565b5f805b6020811015611caf57611c7181601f612ba8565b611c7c906008612bbb565b87611c88836006612be6565b81518110611c9857611c98612bd2565b016020015160f81c901b9190911790600101611c5d565b505f86602681518110611cc457611cc4612bd2565b016020015191976001600160f81b03199092161515965090945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166105c857604051631afcd79f60e31b815260040160405180910390fd5b611d35611ce4565b611d3d612295565b611d456122a5565b6105ef816122ad565b611d56611ce4565b6105ef8161245a565b6105ef816001612462565b5f6060826080015151603014611dd45760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016103f8565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015611e4b57611e0b816001612ba8565b611e16906008612bbb565b5081515f90839083908110611e2d57611e2d612bd2565b60200101906001600160f81b03191690815f1a905350600101611df7565b505f5b6004811015611ea957611e62816003612ba8565b611e6d906008612bbb565b505f82611e7b836002612be6565b81518110611e8b57611e8b612bd2565b60200101906001600160f81b03191690815f1a905350600101611e4e565b505f5b6020811015611f065784518160208110611ec857611ec8612bd2565b1a60f81b82611ed8836006612be6565b81518110611ee857611ee8612bd2565b60200101906001600160f81b03191690815f1a905350600101611eac565b505f5b6020811015611f665784602001518160208110611f2857611f28612bd2565b1a60f81b82611f38836026612be6565b81518110611f4857611f48612bd2565b60200101906001600160f81b03191690815f1a905350600101611f09565b505f5b6008811015611fda57611f7d816007612ba8565b611f88906008612bbb565b60ff1685604001516001600160401b0316901c60f81b82826046611fac9190612be6565b81518110611fbc57611fbc612bd2565b60200101906001600160f81b03191690815f1a905350600101611f69565b505f5b60308110156120455784608001518181518110611ffc57611ffc612bd2565b01602001516001600160f81b0319168261201783604e612be6565b8151811061202757612027612bd2565b60200101906001600160f81b03191690815f1a905350600101611fdd565b505f5b60088110156120b75761205c816007612ba8565b612067906008612bbb565b60608601516001600160401b0390811691161c60f81b8261208983607e612be6565b8151811061209957612099612bd2565b60200101906001600160f81b03191690815f1a905350600101612048565b506002816040516120c89190612ead565b602060405180830381855afa1580156120e3573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906121069190612a60565b94909350915050565b5f8281525f80516020612f99833981519152602052604081206003015481905f80516020612f7983398151915290600160401b90046001600160401b03908116908516811161216f5761216a6121658287612ec8565b611d5f565b612181565b61218161217c8683612ec8565b6126bc565b5f61218b876126c6565b5f888152600885016020526040812060030180546fffffffffffffffff00000000000000001916600160401b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6121e08a858b6109dc565b6040518263ffffffff1660e01b81526004016121fc9190612a2e565b6020604051808303815f875af1158015612218573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061223c9190612a60565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b61229d611ce4565b6105c8612748565b6105c8611ce4565b6122b5611ce4565b80355f80516020612f7983398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb015560146123016080840160608501612ee8565b60ff16111561236e5760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016103f8565b5f61237f6080840160608501612ee8565b60ff16116123e75760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016103f8565b6123f76080830160608401612ee8565b60028201805460ff92909216600160401b0260ff60401b199092169190911790556124286060830160408401612bf9565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b6109aa611ce4565b604080516080810182527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb03548082527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb045460208301527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0554928201929092527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06546001600160401b031660608201525f80516020612f79833981519152914291901580612548575060028301548151612544916001600160401b031690612be6565b8210155b1561256e576001600160401b03851660608201528181526040810151602082015261258d565b84816060018181516125809190612f08565b6001600160401b03169052505b606081015161259d906064612f28565b602082015160028501546001600160401b0392909216916125c89190600160401b900460ff16612bbb565b101561262c5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016103f8565b831561265557846001600160401b03168160400181815161264d9190612be6565b905250612674565b846001600160401b0316816040018181516126709190612ba8565b9052505b805160038401556020810151600484015560408101516005840155606001516006909201805467ffffffffffffffff19166001600160401b0390931692909217909155505050565b6105ef815f612462565b5f8181525f80516020612f998339815191526020526040812060030180545f80516020612f79833981519152916001600160401b03909116908361270983612f53565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b612750611ce4565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50805461278290612a77565b5f825580601f10612791575050565b601f0160209004905f5260205f20908101906105ef91906127f1565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115612805575f81556001016127f2565b5090565b5f60208284031215612819575f80fd5b5035919050565b5f60208284031215612830575f80fd5b813563ffffffff81168114612843575f80fd5b9392505050565b6001600160a01b03811681146105ef575f80fd5b5f8082840360a0811215612870575f80fd5b608081121561287d575f80fd5b50829150608083013561288f8161284a565b809150509250929050565b80356001600160401b03811681146128b0575f80fd5b919050565b5f80604083850312156128c6575f80fd5b82356001600160401b038111156128db575f80fd5b8301606081860312156128ec575f80fd5b91506128fa6020840161289a565b90509250929050565b634e487b7160e01b5f52602160045260245ffd5b81516101008201906006811061293b57634e487b7160e01b5f52602160045260245ffd5b8083525060208301516020830152604083015161296360408401826001600160a01b03169052565b50606083015161297e60608401826001600160401b03169052565b50608083015161299960808401826001600160401b03169052565b5060a08301516129b460a08401826001600160401b03169052565b5060c08301516129cf60c08401826001600160401b03169052565b5060e08301516129ea60e08401826001600160401b03169052565b5092915050565b5f60208284031215612a01575f80fd5b81356128438161284a565b5f5b83811015612a26578181015183820152602001612a0e565b50505f910152565b602081525f8251806020840152612a4c816040850160208701612a0c565b601f01601f19169190910160400192915050565b5f60208284031215612a70575f80fd5b5051919050565b600181811c90821680612a8b57607f821691505b602082108103612aa957634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f8454612b0881612a77565b806020870152604060018084165f8114612b295760018114612b4557612b72565b60ff19851660408a0152604084151560051b8a01019550612b72565b895f5260205f205f5b85811015612b695781548b8201860152908301908801612b4e565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156105e0576105e0612b94565b80820281158282048414176105e0576105e0612b94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156105e0576105e0612b94565b5f60208284031215612c09575f80fd5b6105dd8261289a565b5f808335601e19843603018112612c27575f80fd5b8301803591506001600160401b03821115612c40575f80fd5b60200191503681900382131561228e575f80fd5b601f8211156108be57805f5260205f20601f840160051c81016020851015612c795750805b601f840160051c820191505b81811015612c98575f8155600101612c85565b5050505050565b81516001600160401b03811115612cb857612cb8612b80565b612ccc81612cc68454612a77565b84612c54565b602080601f831160018114612cff575f8415612ce85750858301515b5f19600386901b1c1916600185901b178555612d56565b5f85815260208120601f198616915b82811015612d2d57888601518255948401946001909101908401612d0e565b5085821015612d4a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b604051606081016001600160401b0381118282101715612d8057612d80612b80565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612dae57612dae612b80565b604052919050565b805180151581146128b0575f80fd5b5f8060408385031215612dd6575f80fd5b82516001600160401b0380821115612dec575f80fd5b9084019060608287031215612dff575f80fd5b612e07612d5e565b82518152602080840151612e1a8161284a565b82820152604084015183811115612e2f575f80fd5b80850194505087601f850112612e43575f80fd5b835183811115612e5557612e55612b80565b612e67601f8201601f19168301612d86565b93508084528882828701011115612e7c575f80fd5b612e8b81838601848801612a0c565b50826040830152819550612ea0818801612db6565b9450505050509250929050565b5f8251612ebe818460208701612a0c565b9190910192915050565b6001600160401b038281168282160390808211156129ea576129ea612b94565b5f60208284031215612ef8575f80fd5b813560ff81168114612843575f80fd5b6001600160401b038181168382160190808211156129ea576129ea612b94565b6001600160401b03818116838216028082169190828114612f4b57612f4b612b94565b505092915050565b5f6001600160401b03808316818103612f6e57612f6e612b94565b600101939250505056fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. @@ -1539,3 +1539,158 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidatorRemovalIn event.Raw = log return event, nil } + +// PoAValidatorManagerValidatorWeightUpdateIterator is returned from FilterValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for ValidatorWeightUpdate events raised by the PoAValidatorManager contract. +type PoAValidatorManagerValidatorWeightUpdateIterator struct { + Event *PoAValidatorManagerValidatorWeightUpdate // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(PoAValidatorManagerValidatorWeightUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(PoAValidatorManagerValidatorWeightUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PoAValidatorManagerValidatorWeightUpdate represents a ValidatorWeightUpdate event raised by the PoAValidatorManager contract. +type PoAValidatorManagerValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + ValidatorWeight uint64 + SetWeightMessageID [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// +// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 validatorWeight, bytes32 setWeightMessageID) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte, nonce []uint64) (*PoAValidatorManagerValidatorWeightUpdateIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + var nonceRule []interface{} + for _, nonceItem := range nonce { + nonceRule = append(nonceRule, nonceItem) + } + + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) + if err != nil { + return nil, err + } + return &PoAValidatorManagerValidatorWeightUpdateIterator{contract: _PoAValidatorManager.contract, event: "ValidatorWeightUpdate", logs: logs, sub: sub}, nil +} + +// WatchValidatorWeightUpdate is a free log subscription operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// +// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 validatorWeight, bytes32 setWeightMessageID) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerValidatorWeightUpdate, validationID [][32]byte, nonce []uint64) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + var nonceRule []interface{} + for _, nonceItem := range nonce { + nonceRule = append(nonceRule, nonceItem) + } + + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(PoAValidatorManagerValidatorWeightUpdate) + if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidatorWeightUpdate is a log parse operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// +// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 validatorWeight, bytes32 setWeightMessageID) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidatorWeightUpdate(log types.Log) (*PoAValidatorManagerValidatorWeightUpdate, error) { + event := new(PoAValidatorManagerValidatorWeightUpdate) + if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/staking/PoSValidatorManager.sol b/contracts/staking/PoSValidatorManager.sol index b1af8b3cd..2478dca6d 100644 --- a/contracts/staking/PoSValidatorManager.sol +++ b/contracts/staking/PoSValidatorManager.sol @@ -229,9 +229,6 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager validator.status == ValidatorStatus.Active, "PoSValidatorManager: validator not active" ); - // Check that adding this delegator would not exceed the maximum churn rate. - _checkAndUpdateChurnTrackerAddition(weight); - // Update the validator weight uint64 newValidatorWeight = validator.weight + weight; require( @@ -343,12 +340,6 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager delegator.status = DelegatorStatus.PendingRemoved; if (validator.status == ValidatorStatus.Active) { - // Check that removing this delegator would not exceed the maximum churn rate. - // We only need to check this is the validator is still active. If the validator ends its validation - // period, the weight of all its delegators will be added to the churn tracker at that time. Ending - // a delegation whose validator has ended validating has no impact on the stake weight of the chain. - _checkAndUpdateChurnTrackerRemoval(delegator.weight); - uint64 newValidatorWeight = validator.weight - delegator.weight; (delegator.endingNonce,) = _setValidatorWeight(validationID, newValidatorWeight); diff --git a/contracts/staking/ValidatorManager.sol b/contracts/staking/ValidatorManager.sol index ddc40eb1c..be5ca7392 100644 --- a/contracts/staking/ValidatorManager.sol +++ b/contracts/staking/ValidatorManager.sol @@ -247,9 +247,6 @@ abstract contract ValidatorManager is ); require(_msgSender() == validator.owner, "ValidatorManager: sender not validator owner"); - // Check that removing this delegator would not exceed the maximum churn rate. - _checkAndUpdateChurnTrackerRemoval(validator.weight); - // Update the validator status to pending removal. // They are not removed from the active validators mapping until the P-Chain acknowledges the removal. validator.status = ValidatorStatus.PendingRemoved; @@ -262,11 +259,7 @@ abstract contract ValidatorManager is // TODO: Optimize storage writes here (probably don't need to write the whole value). $._validationPeriods[validationID] = validator; - // Submit the message to the Warp precompile. - bytes memory setValidatorWeightPayload = ValidatorMessages - .packSetSubnetValidatorWeightMessage(validationID, _incrementAndGetNonce(validationID), 0); - - bytes32 messageID = WARP_MESSENGER.sendWarpMessage(setValidatorWeightPayload); + (, bytes32 messageID) = _setValidatorWeight(validationID, 0); // Emit the event to signal the start of the validator removal process. emit ValidatorRemovalInitialized(validationID, messageID, validator.weight, block.timestamp); @@ -378,22 +371,31 @@ abstract contract ValidatorManager is function _setValidatorWeight( bytes32 validationID, - uint64 weight + uint64 newWeight ) internal returns (uint64, bytes32) { + ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); + uint64 validatorWeight = $._validationPeriods[validationID].weight; + + // Check that removing this delegator would not exceed the maximum churn rate. + if (newWeight >= validatorWeight) { + _checkAndUpdateChurnTrackerAddition(newWeight - validatorWeight); + } else { + _checkAndUpdateChurnTrackerRemoval(validatorWeight - newWeight); + } + uint64 nonce = _incrementAndGetNonce(validationID); - ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); - $._validationPeriods[validationID].weight = weight; + $._validationPeriods[validationID].weight = newWeight; // Submit the message to the Warp precompile. bytes32 messageID = WARP_MESSENGER.sendWarpMessage( - ValidatorMessages.packSetSubnetValidatorWeightMessage(validationID, nonce, weight) + ValidatorMessages.packSetSubnetValidatorWeightMessage(validationID, nonce, newWeight) ); emit ValidatorWeightUpdate({ validationID: validationID, nonce: nonce, - validatorWeight: weight, + validatorWeight: newWeight, setWeightMessageID: messageID });