diff --git a/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 11cd94930..3c3f566f2 100644 --- a/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/staking/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -75,8 +75,8 @@ 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\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"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\":\"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: "0x608060405234801561000f575f80fd5b506040516152bd3803806152bd83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6151708061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061013d575f3560e01c806376f78621116100b4578063b771b3bc11610079578063b771b3bc146102d9578063ba3a4b97146102ff578063bee0a03f14610312578063c974d1b614610325578063d5f20ff61461032d578063df93d8de1461034d575f80fd5b806376f786211461027a57806398f3e2b41461028d5780639e1bc4ef146102a0578063a13fd29d146102b3578063a3a65e48146102c6575f80fd5b8063330a0a3a11610105578063330a0a3a146101ff57806335455ded14610212578063467ef06f1461022e5780635297fae614610241578063620658561461025457806366435abf14610267575f80fd5b80630118acc4146101415780630322ed98146101565780630cdd098514610169578063151d30d1146101ba5780632e2194d8146101d4575b5f80fd5b61015461014f366004614673565b610357565b005b6101546101643660046146ae565b6107e8565b6101a76101773660046146ae565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b6101c2600a81565b60405160ff90911681526020016101b1565b6101e76101e23660046146ae565b6109b8565b6040516001600160401b0390911681526020016101b1565b61015461020d3660046146d9565b6109ce565b61021b61271081565b60405161ffff90911681526020016101b1565b61015461023c366004614717565b610aad565b61015461024f366004614730565b610ad8565b6101a761026236600461476c565b610ca8565b6101e76102753660046146ae565b610cc1565b610154610288366004614673565b610cd5565b61015461029b366004614730565b610db5565b6101a76102ae366004614787565b610fc4565b6101a76102c13660046147a7565b610fd7565b6101546102d4366004614717565b611003565b6102e76005600160991b0181565b6040516001600160a01b0390911681526020016101b1565b61015461030d3660046146ae565b6111c0565b6101546103203660046146ae565b611446565b6101c2601481565b61034061033b3660046146ae565b61155a565b6040516101b1919061481c565b6101e76202a30081565b5f8381527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408120600101545f805160206150c48339815191529184156103a9576103a68285611639565b90505b5f868152600684016020526040808220815161010081019092528054829060ff1660048111156103db576103db614808565b60048111156103ec576103ec614808565b8152815461010090046001600160a01b03166020820152600182015460408201526002808301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e0909101529091508151600481111561047357610473614808565b146104c55760405162461bcd60e51b815260206004820152602a60248201525f805160206150e48339815191526044820152696e6f742061637469766560b01b60648201526084015b60405180910390fd5b60208101516001600160a01b0316331461052a5760405162461bcd60e51b815260206004820152603360248201525f805160206150e48339815191526044820152723737ba1037bbb732b210313c9039b2b73232b960691b60648201526084016104bc565b5f610534846118d5565b600383526001600160401b0342811660a0850152811660e08401525f8981526006870160205260409020835181549293508492829060ff1916600183600481111561058157610581614808565b021790555060208201518154610100600160a81b0319166101006001600160a01b0390921691909102178155604082015160018201556060820151600282018054608085015160a086015160c08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560e0909201516003909101805467ffffffffffffffff1916919092161790555f6106538561155a565b905082606001516001600160401b03168160a001516001600160401b0316116106ca5760405162461bcd60e51b815260206004820152602360248201527f506f5356616c696461746f724d616e616765723a20496e76616c69642077656960448201526219da1d60ea1b60648201526084016104bc565b6002815160058111156106df576106df614808565b036106f1576106f18360600151611957565b5f83606001518260a00151610706919061490a565b90506107128682611964565b5f6005600160991b0163ee5b48eb61072b8987866119ac565b6040518263ffffffff1660e01b8152600401610747919061494c565b6020604051808303815f875af1158015610763573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610787919061497e565b604080516001600160401b03858116825242602083015291810183905291925085169088908d907f5318ab4d7cdf77056db2db5b539a08fe7d1a63d6885ecee8236a0dbda2843b4e9060600160405180910390a45050505050505050505050565b5f8181525f8051602061514483398151915260205260408082208151610100810190925280545f8051602061510483398151915293929190829060ff16600581111561083657610836614808565b600581111561084757610847614808565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e090910152909150815160058111156108cc576108cc614808565b146109315760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016104bc565b6005600160991b016001600160a01b031663ee5b48eb6109568584608001515f6119ac565b6040518263ffffffff1660e01b8152600401610972919061494c565b6020604051808303815f875af115801561098e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b2919061497e565b50505050565b5f6109c864e8d4a5100083614995565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a17575080546001600160401b03808416911610155b15610a355760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a608484611bc9565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f610ab782611be3565b9050610ad481606001516001600160401b03168260400151611f56565b5050565b5f805160206150c48339815191525f610af084611f8c565b90505f80610b01836040015161216d565b50915091505f610b108361155a565b9050816001600160401b031681608001516001600160401b03161015610b485760405162461bcd60e51b81526004016104bc906149b4565b5f8681526006860160205260409020600201546001600160401b03808416600160c01b909204161115610b8d5760405162461bcd60e51b81526004016104bc906149f6565b60015f87815260068701602052604090205460ff166004811115610bb357610bb3614808565b14610c1c5760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a2064656c65676174696f6e4960448201527211081b9bdd081c195b991a5b99c81859191959606a1b60648201526084016104bc565b5f868152600686016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092179092559251928352841691859189917f245fc69b36e168426e0306fc8d8300661b9af297c7958820dbf804f9f63e7064910160405180910390a450505050505050565b5f6109c86001600160401b03831664e8d4a51000614a3f565b5f610ccb8261155a565b60a0015192915050565b5f805160206150c48339815191525f610ced8561155a565b5f86815260058401602052604090205460c0820151919250610d1f91620100009091046001600160401b031690614a56565b6001600160401b0316421015610d935760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a206d696e696d756d207374616044820152721ad948191d5c985d1a5bdb881b9bdd081b595d606a1b60648201526084016104bc565b8315610da557610da38584611639565b505b610dae856123a8565b5050505050565b5f805160206150c48339815191525f610dcd84611f8c565b90505f80610dde836040015161216d565b50915091505f610ded8361155a565b9050816001600160401b031681608001516001600160401b03161015610e255760405162461bcd60e51b81526004016104bc906149b4565b5f8681526006860160205260409020600301546001600160401b0380841691161115610e635760405162461bcd60e51b81526004016104bc906149f6565b60035f87815260068701602052604090205460ff166004811115610e8957610e89614808565b14610edd5760405162461bcd60e51b815260206004820152603160248201525f805160206150e48339815191526044820152701b9bdd081c195b991a5b99c81859191959607a1b60648201526084016104bc565b5f868152600686016020908152604091829020805460ff19166004908117808355845161010080820187529281529190046001600160a01b031692810183905260018201549381019390935260028101546001600160401b0380821660608601819052600160401b830482166080870152600160801b8304821660a0870152600160c01b909204811660c086015260039092015490911660e0840152610f8291611f56565b826001600160401b031684887f52e9b1eaef84d46cda83ccb9d427267bc4d04f756b4a32c8302722b79e5c65ab60405160405180910390a45050505050505050565b5f610fd0833384612746565b9392505050565b5f610fe0612b44565b610feb848484612b7b565b9050610fd060015f8051602061512483398151915255565b5f805160206151048339815191525f61101b83611f8c565b90505f8061102c8360400151612db4565b915091508061108e5760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016104bc565b5f828152600785016020526040812080546110a890614a76565b90501180156110da575060015f83815260088601602052604090205460ff1660058111156110d8576110d8614808565b145b6110f65760405162461bcd60e51b81526004016104bc90614aae565b5f828152600785016020526040812061110e916145bb565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408082208151610100810190925280545f805160206150c483398151915293929190829060ff16600481111561122157611221614808565b600481111561123257611232614808565b8152815461010090046001600160a01b03166020820152600180830154604083015260028301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e090910152909150815160048111156112b9576112b9614808565b14806112d757506003815160048111156112d5576112d5614808565b145b61132b5760405162461bcd60e51b815260206004820152603260248201525f805160206150e4833981519152604482015271737461747573206e6f742070656e64696e6760701b60648201526084016104bc565b5f611339826040015161155a565b905080608001516001600160401b03165f036113bd5760405162461bcd60e51b815260206004820152603f60248201527f506f5356616c696461746f724d616e616765723a20636f756c64206e6f74206660448201527f696e642076616c696461746f7220666f722064656c65676174696f6e2049440060648201526084016104bc565b6005600160991b016001600160a01b031663ee5b48eb6113ea846040015184608001518560a001516119ac565b6040518263ffffffff1660e01b8152600401611406919061494c565b6020604051808303815f875af1158015611422573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dae919061497e565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f8051602061510483398151915292919061148e90614a76565b90501180156114c0575060015f83815260088301602052604090205460ff1660058111156114be576114be614808565b145b6114dc5760405162461bcd60e51b81526004016104bc90614aae565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916115159190600401614af5565b6020604051808303815f875af1158015611531573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611555919061497e565b505050565b6115626145f2565b5f8281525f805160206151448339815191526020526040908190208151610100810190925280545f80516020615104833981519152929190829060ff1660058111156115b0576115b0614808565b60058111156115c1576115c1614808565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015611684573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116ab9190810190614bf6565b915091508061170e5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016104bc565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611751573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611775919061497e565b8251146117d95760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016104bc565b60208201516001600160a01b03161561184f5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016104bc565b5f8061185e8460400151612f55565b915091508187146118cb5760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016104bc565b9695505050505050565b5f8181525f805160206151448339815191526020526040812060030180545f80516020615104833981519152916001600160401b03909116908361191883614cde565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b611961815f61312d565b50565b5f9182525f80516020615144833981519152602052604090912060030180546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611a25576119e5816001614d03565b6119f0906008614a3f565b5081515f90839083908110611a0757611a07614d16565b60200101906001600160f81b03191690815f1a9053506001016119d1565b505f5b6004811015611a8857611a3c816003614d03565b611a47906008614a3f565b6001901c60f81b82611a5a836002614d2a565b81518110611a6a57611a6a614d16565b60200101906001600160f81b03191690815f1a905350600101611a28565b505f5b6020811015611aea57611a9f81601f614d03565b611aaa906008614a3f565b86901c60f81b82611abc836006614d2a565b81518110611acc57611acc614d16565b60200101906001600160f81b03191690815f1a905350600101611a8b565b505f5b6008811015611b5557611b01816007614d03565b611b0c906008614a3f565b6001600160401b038616901c60f81b82611b27836026614d2a565b81518110611b3757611b37614d16565b60200101906001600160f81b03191690815f1a905350600101611aed565b505f5b6008811015611bc057611b6c816007614d03565b611b77906008614a3f565b6001600160401b038516901c60f81b82611b9283602e614d2a565b81518110611ba257611ba2614d16565b60200101906001600160f81b03191690815f1a905350600101611b58565b50949350505050565b611bd1613387565b611bda826133d2565b610ad48161343e565b611beb6145f2565b5f805160206151048339815191525f611c0384611f8c565b90505f80611c148360400151612db4565b915091508015611c795760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016104bc565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115611cab57611cab614808565b6005811115611cbc57611cbc614808565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115611d4357611d43614808565b1480611d615750600182516005811115611d5f57611d5f614808565b145b611dc05760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016104bc565b600382516005811115611dd557611dd5614808565b03611de257506004611de6565b5060055b6020808301515f90815260098801909152604081205581816005811115611e0f57611e0f614808565b90816005811115611e2257611e22614808565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115611e5657611e56614808565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115611f2157611f21614808565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab0054610ad4906001600160a01b031682846134f2565b60408051606080820183525f8083526020830181905292820152905f805160206151048339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612001573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120289190810190614bf6565b915091508061208f5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016104bc565b82548251146120f25760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016104bc565b60208201516001600160a01b0316156121655760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016104bc565b509392505050565b5f805f83516036146121915760405162461bcd60e51b81526004016104bc90614d3d565b5f805b60028110156121e0576121a8816001614d03565b6121b3906008614a3f565b61ffff168682815181106121c9576121c9614d16565b016020015160f81c901b9190911790600101612194565b5061ffff8116156122035760405162461bcd60e51b81526004016104bc90614d86565b5f805b600481101561225e5761221a816003614d03565b612225906008614a3f565b63ffffffff1687612237836002614d2a565b8151811061224757612247614d16565b016020015160f81c901b9190911790600101612206565b5063ffffffff81166003146122855760405162461bcd60e51b81526004016104bc90614dc9565b5f805b60208110156122da5761229c81601f614d03565b6122a7906008614a3f565b886122b3836006614d2a565b815181106122c3576122c3614d16565b016020015160f81c901b9190911790600101612288565b505f805b6008811015612339576122f2816007614d03565b6122fd906008614a3f565b6001600160401b031689612312836026614d2a565b8151811061232257612322614d16565b016020015160f81c901b91909117906001016122de565b505f805b600881101561239857612351816007614d03565b61235c906008614a3f565b6001600160401b03168a61237183602e614d2a565b8151811061238157612381614d16565b016020015160f81c901b919091179060010161233d565b5091989097509095509350505050565b5f8181525f8051602061514483398151915260205260408082208151610100810190925280545f8051602061510483398151915293929190829060ff1660058111156123f6576123f6614808565b600581111561240757612407614808565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e0909101529091508151600581111561248f5761248f614808565b146124eb5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016104bc565b60408101516001600160a01b0316336001600160a01b0316146125655760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016104bc565b6125728160a00151611957565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff191660018360058111156125b6576125b6614808565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f6126828461267c816118d5565b5f6119ac565b60405163ee5b48eb60e01b81529091505f906005600160991b019063ee5b48eb906126b190859060040161494c565b6020604051808303815f875af11580156126cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126f1919061497e565b60a0840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b5f61274f612b44565b5f805160206150c48339815191525f61276a6101e285613551565b90505f6127768761155a565b905060028151600581111561278d5761278d614808565b146127ec5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a2076616c696461746f72206e6044820152686f742061637469766560b81b60648201526084016104bc565b6127f582613587565b5f828260a001516128069190614a56565b60048501546060840151919250612828916001600160401b0390911690614e10565b6001600160401b0316816001600160401b031611156128a75760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a206d6178696d756d2076616c6044820152741a59185d1bdc881dd95a59da1d081c995858da1959605a1b60648201526084016104bc565b6128b18882611964565b5f6128bb896118d5565b90505f89826040516020016128e792919091825260c01b6001600160c01b031916602082015260280190565b6040516020818303038152906040528051906020012090505f6005600160991b016001600160a01b031663ee5b48eb6129218d86886119ac565b6040518263ffffffff1660e01b815260040161293d919061494c565b6020604051808303815f875af1158015612959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061297d919061497e565b60408051610100810190915290915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905260a0850181905290881660c085015260e090930183905285835260068b01909152902081518154829060ff19166001836004811115612a0557612a05614808565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002860180546080808a015160a08b015160c08c01516001600160401b039687166001600160801b031990951694909417600160401b92871692909202919091176001600160801b0316600160801b918616919091026001600160c01b031617600160c01b928516929092029190911790915560e0909701516003909601805467ffffffffffffffff191696821696909617909555815189861681528a861694810194909452938b1690830152918101849052908c16918d9185917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a45095505050505050610fd060015f8051602061512483398151915255565b5f80516020615124833981519152805460011901612b7557604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f805160206150c4833981519152906001600160401b0316612bc7604086016020870161476c565b6001600160401b03161015612c365760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d696e60448201526e1039ba30b5b290323ab930ba34b7b760891b60648201526084016104bc565b6003810154612c486020860186614e4a565b61ffff1610158015612c6c5750612710612c656020860186614e4a565b61ffff1611155b612c885760405162461bcd60e51b81526004016104bc90614e65565b8054831015612ceb5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152687420746f6f206c6f7760b81b60648201526084016104bc565b8060010154831115612d525760405162461bcd60e51b815260206004820152602a60248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152690e840e8dede40d0d2ced60b31b60648201526084016104bc565b5f612d5c84613551565b90505f612d68826109b8565b90505f612d758883613592565b5f81815260058601602052604090209091508790612d938282614eb0565b509098975050505050505050565b60015f8051602061512483398151915255565b5f808251602714612dd75760405162461bcd60e51b81526004016104bc90614d3d565b5f805b6002811015612e2657612dee816001614d03565b612df9906008614a3f565b61ffff16858281518110612e0f57612e0f614d16565b016020015160f81c901b9190911790600101612dda565b5061ffff811615612e495760405162461bcd60e51b81526004016104bc90614d86565b5f805b6004811015612ea457612e60816003614d03565b612e6b906008614a3f565b63ffffffff1686612e7d836002614d2a565b81518110612e8d57612e8d614d16565b016020015160f81c901b9190911790600101612e4c565b5063ffffffff8116600214612ecb5760405162461bcd60e51b81526004016104bc90614dc9565b5f805b6020811015612f2057612ee281601f614d03565b612eed906008614a3f565b87612ef9836006614d2a565b81518110612f0957612f09614d16565b016020015160f81c901b9190911790600101612ece565b505f86602681518110612f3557612f35614d16565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e14612f785760405162461bcd60e51b81526004016104bc90614d3d565b5f805b6002811015612fc757612f8f816001614d03565b612f9a906008614a3f565b61ffff16858281518110612fb057612fb0614d16565b016020015160f81c901b9190911790600101612f7b565b5061ffff811615612fea5760405162461bcd60e51b81526004016104bc90614d86565b5f805b600481101561304557613001816003614d03565b61300c906008614a3f565b63ffffffff168661301e836002614d2a565b8151811061302e5761302e614d16565b016020015160f81c901b9190911790600101612fed565b5063ffffffff811660041461306c5760405162461bcd60e51b81526004016104bc90614dc9565b5f805b60208110156130c15761308381601f614d03565b61308e906008614a3f565b8761309a836006614d2a565b815181106130aa576130aa614d16565b016020015160f81c901b919091179060010161306f565b505f805b6008811015613120576130d9816007614d03565b6130e4906008614a3f565b6001600160401b0316886130f9836026614d2a565b8151811061310957613109614d16565b016020015160f81c901b91909117906001016130c5565b5090969095509350505050565b604080516080810182527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb03548082527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb045460208301527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0554928201929092527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06546001600160401b031660608201525f8051602061510483398151915291429190158061321357506002830154815161320f916001600160401b031690614d2a565b8210155b15613239576001600160401b038516606082015281815260408101516020820152613258565b848160600181815161324b9190614a56565b6001600160401b03169052505b6060810151613268906064614e10565b602082015160028501546001600160401b0392909216916132939190600160401b900460ff16614a3f565b10156132f75760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016104bc565b831561332057846001600160401b0316816040018181516133189190614d2a565b90525061333f565b846001600160401b03168160400181815161333b9190614d03565b9052505b805160038401556020810151600484015560408101516005840155606001516006909201805467ffffffffffffffff19166001600160401b0390931692909217909155505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166133d057604051631afcd79f60e31b815260040160405180910390fd5b565b6133da613387565b6133e381613acc565b611961608082013560a083013561340060e0850160c0860161476c565b613411610100860160e08701614e4a565b61ffff1661342761012087016101008801614f06565b61343961014088016101208901614f26565b613aed565b613446613387565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab006001600160a01b0382166134d25760405162461bcd60e51b815260206004820152602c60248201527f4552433230546f6b656e5374616b696e674d616e616765723a207a65726f207460448201526b6f6b656e206164647265737360a01b60648201526084016104bc565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b0383811660248301526044820183905261155591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613d31565b5f6109c8827f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00546001600160a01b031690613d92565b61196181600161312d565b5f5f80516020615104833981519152426135b2604086016020870161476c565b6001600160401b0316116136245760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016104bc565b613634604085016020860161476c565b6001600160401b031661364a6202a30042614d2a565b116136bd5760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016104bc565b83356137155760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016104bc565b83355f908152600982016020526040902054156137855760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016104bc565b6137926040850185614f41565b90506030146137f95760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016104bc565b61380283613587565b5f8061389c6040518060a0016040528085600101548152602001885f01358152602001876001600160401b03168152602001886020016020810190613847919061476c565b6001600160401b0316815260200161386260408a018a614f41565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250613ef4565b5f828152600786016020526040902091935091506138ba8282614fce565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906138e790859060040161494c565b6020604051808303815f875af1158015613903573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613927919061497e565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff191660018360058111156139a9576139a9614808565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b91613a9e91908e01908e0161476c565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b613ad4613387565b613adc614299565b613ae46142a9565b611961816142b1565b613af5613387565b5f805160206150c483398151915283613b615760405162461bcd60e51b815260206004820152602860248201527f506f5356616c696461746f724d616e616765723a207a65726f2064656c65676160448201526774696f6e2066656560c01b60648201526084016104bc565b612710841115613b835760405162461bcd60e51b81526004016104bc90614e65565b85871115613beb5760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642073746160448201526e6b6520616d6f756e742072616e676560881b60648201526084016104bc565b5f8360ff1611613c585760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a207a65726f206d6178696d75604482015271369039ba30b5b29036bab63a34b83634b2b960711b60648201526084016104bc565b600a60ff84161115613cca5760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d617860448201527434b6bab69039ba30b5b29036bab63a34b83634b2b960591b60648201526084016104bc565b95865560018601949094556002850180546001600160401b0390941667ffffffffffffffff19909416939093179092556003840155600490920180546001600160a01b03909216600160401b026001600160e01b031990921660ff90931692909217179055565b5f613d456001600160a01b0384168361445e565b905080515f14158015613d69575080806020019051810190613d67919061508d565b155b1561155557604051635274afe760e01b81526001600160a01b03841660048201526024016104bc565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015613dd8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dfc919061497e565b9050613e136001600160a01b03851633308661446b565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015613e57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e7b919061497e565b9050818111613ee15760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104bc565b613eeb8282614d03565b95945050505050565b5f6060826080015151603014613f5e5760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016104bc565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613fd557613f95816001614d03565b613fa0906008614a3f565b5081515f90839083908110613fb757613fb7614d16565b60200101906001600160f81b03191690815f1a905350600101613f81565b505f5b600481101561403357613fec816003614d03565b613ff7906008614a3f565b505f82614005836002614d2a565b8151811061401557614015614d16565b60200101906001600160f81b03191690815f1a905350600101613fd8565b505f5b6020811015614090578451816020811061405257614052614d16565b1a60f81b82614062836006614d2a565b8151811061407257614072614d16565b60200101906001600160f81b03191690815f1a905350600101614036565b505f5b60208110156140f057846020015181602081106140b2576140b2614d16565b1a60f81b826140c2836026614d2a565b815181106140d2576140d2614d16565b60200101906001600160f81b03191690815f1a905350600101614093565b505f5b600881101561416457614107816007614d03565b614112906008614a3f565b60ff1685604001516001600160401b0316901c60f81b828260466141369190614d2a565b8151811061414657614146614d16565b60200101906001600160f81b03191690815f1a9053506001016140f3565b505f5b60308110156141cf578460800151818151811061418657614186614d16565b01602001516001600160f81b031916826141a183604e614d2a565b815181106141b1576141b1614d16565b60200101906001600160f81b03191690815f1a905350600101614167565b505f5b6008811015614241576141e6816007614d03565b6141f1906008614a3f565b60608601516001600160401b0390811691161c60f81b8261421383607e614d2a565b8151811061422357614223614d16565b60200101906001600160f81b03191690815f1a9053506001016141d2565b5060028160405161425291906150a8565b602060405180830381855afa15801561426d573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190614290919061497e565b94909350915050565b6142a1613387565b6133d06144a4565b6133d0613387565b6142b9613387565b80355f8051602061510483398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb015560146143056080840160608501614f06565b60ff1611156143725760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016104bc565b5f6143836080840160608501614f06565b60ff16116143eb5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016104bc565b6143fb6080830160608401614f06565b60028201805460ff92909216600160401b0260ff60401b1990921691909117905561442c606083016040840161476c565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b6060610fd083835f6144ac565b6040516001600160a01b0384811660248301528381166044830152606482018390526109b29186918216906323b872dd9060840161351f565b612da1613387565b6060814710156144d15760405163cd78605960e01b81523060048201526024016104bc565b5f80856001600160a01b031684866040516144ec91906150a8565b5f6040518083038185875af1925050503d805f8114614526576040519150601f19603f3d011682016040523d82523d5f602084013e61452b565b606091505b50915091506118cb86838360608261454b5761454682614592565b610fd0565b815115801561456257506001600160a01b0384163b155b1561458b57604051639996b31560e01b81526001600160a01b03851660048201526024016104bc565b5080610fd0565b8051156145a25780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5080546145c790614a76565b5f825580601f106145d6575050565b601f0160209004905f5260205f20908101906119619190614636565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561464a575f8155600101614637565b5090565b8015158114611961575f80fd5b803563ffffffff8116811461466e575f80fd5b919050565b5f805f60608486031215614685575f80fd5b8335925060208401356146978161464e565b91506146a56040850161465b565b90509250925092565b5f602082840312156146be575f80fd5b5035919050565b6001600160a01b0381168114611961575f80fd5b5f808284036101608112156146ec575f80fd5b610140808212156146fb575f80fd5b849350830135905061470c816146c5565b809150509250929050565b5f60208284031215614727575f80fd5b610fd08261465b565b5f8060408385031215614741575f80fd5b61474a8361465b565b946020939093013593505050565b6001600160401b0381168114611961575f80fd5b5f6020828403121561477c575f80fd5b8135610fd081614758565b5f8060408385031215614798575f80fd5b50508035926020909101359150565b5f805f83850360808112156147ba575f80fd5b84356001600160401b038111156147cf575f80fd5b8501606081880312156147e0575f80fd5b93506040601f19820112156147f3575f80fd5b50602084019150606084013590509250925092565b634e487b7160e01b5f52602160045260245ffd5b81516101008201906006811061484057634e487b7160e01b5f52602160045260245ffd5b8083525060208301516020830152604083015161486860408401826001600160a01b03169052565b50606083015161488360608401826001600160401b03169052565b50608083015161489e60808401826001600160401b03169052565b5060a08301516148b960a08401826001600160401b03169052565b5060c08301516148d460c08401826001600160401b03169052565b5060e08301516148ef60e08401826001600160401b03169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038281168282160390808211156148ef576148ef6148f6565b5f5b8381101561494457818101518382015260200161492c565b50505f910152565b602081525f825180602084015261496a81604085016020870161492a565b601f01601f19169190910160400192915050565b5f6020828403121561498e575f80fd5b5051919050565b5f826149af57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b80820281158282048414176109c8576109c86148f6565b6001600160401b038181168382160190808211156148ef576148ef6148f6565b600181811c90821680614a8a57607f821691505b602082108103614aa857634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f8454614b0781614a76565b806020870152604060018084165f8114614b285760018114614b4457614b71565b60ff19851660408a0152604084151560051b8a01019550614b71565b895f5260205f205f5b85811015614b685781548b8201860152908301908801614b4d565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614bb557614bb5614b7f565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614be357614be3614b7f565b604052919050565b805161466e8161464e565b5f8060408385031215614c07575f80fd5b82516001600160401b0380821115614c1d575f80fd5b9084019060608287031215614c30575f80fd5b614c38614b93565b82518152602080840151614c4b816146c5565b82820152604084015183811115614c60575f80fd5b80850194505087601f850112614c74575f80fd5b835183811115614c8657614c86614b7f565b614c98601f8201601f19168301614bbb565b93508084528882828701011115614cad575f80fd5b614cbc8183860184880161492a565b50826040830152819550614cd1818801614beb565b9450505050509250929050565b5f6001600160401b03808316818103614cf957614cf96148f6565b6001019392505050565b818103818111156109c8576109c86148f6565b634e487b7160e01b5f52603260045260245ffd5b808201808211156109c8576109c86148f6565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b6001600160401b03818116838216028082169190828114614e3357614e336148f6565b505092915050565b61ffff81168114611961575f80fd5b5f60208284031215614e5a575f80fd5b8135610fd081614e3b565b6020808252602b908201527f506f5356616c696461746f724d616e616765723a20696e76616c69642064656c60408201526a65676174696f6e2066656560a81b606082015260800190565b8135614ebb81614e3b565b61ffff8116905081548161ffff1982161783556020840135614edc81614758565b69ffffffffffffffff00008160101b168369ffffffffffffffffffff198416171784555050505050565b5f60208284031215614f16575f80fd5b813560ff81168114610fd0575f80fd5b5f60208284031215614f36575f80fd5b8135610fd0816146c5565b5f808335601e19843603018112614f56575f80fd5b8301803591506001600160401b03821115614f6f575f80fd5b602001915036819003821315614f83575f80fd5b9250929050565b601f82111561155557805f5260205f20601f840160051c81016020851015614faf5750805b601f840160051c820191505b81811015610dae575f8155600101614fbb565b81516001600160401b03811115614fe757614fe7614b7f565b614ffb81614ff58454614a76565b84614f8a565b602080601f83116001811461502e575f84156150175750858301515b5f19600386901b1c1916600185901b178555615085565b5f85815260208120601f198616915b8281101561505c5788860151825594840194600190910190840161503d565b508582101561507957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f6020828403121561509d575f80fd5b8151610fd08161464e565b5f82516150b981846020870161492a565b919091019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00506f5356616c696461746f724d616e616765723a2064656c65676174696f6e20e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", + 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: "0x608060405234801561000f575f80fd5b506040516152dc3803806152dc83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b61518f8061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061013d575f3560e01c806376f78621116100b4578063b771b3bc11610079578063b771b3bc146102d9578063ba3a4b97146102ff578063bee0a03f14610312578063c974d1b614610325578063d5f20ff61461032d578063df93d8de1461034d575f80fd5b806376f786211461027a57806398f3e2b41461028d5780639e1bc4ef146102a0578063a13fd29d146102b3578063a3a65e48146102c6575f80fd5b8063330a0a3a11610105578063330a0a3a146101ff57806335455ded14610212578063467ef06f1461022e5780635297fae614610241578063620658561461025457806366435abf14610267575f80fd5b80630118acc4146101415780630322ed98146101565780630cdd098514610169578063151d30d1146101ba5780632e2194d8146101d4575b5f80fd5b61015461014f366004614692565b610357565b005b6101546101643660046146cd565b610807565b6101a76101773660046146cd565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b6101c2600a81565b60405160ff90911681526020016101b1565b6101e76101e23660046146cd565b6109d7565b6040516001600160401b0390911681526020016101b1565b61015461020d3660046146f8565b6109ed565b61021b61271081565b60405161ffff90911681526020016101b1565b61015461023c366004614736565b610acc565b61015461024f36600461474f565b610af7565b6101a761026236600461478b565b610cc7565b6101e76102753660046146cd565b610ce0565b610154610288366004614692565b610cf4565b61015461029b36600461474f565b610dd4565b6101a76102ae3660046147a6565b610fe3565b6101a76102c13660046147c6565b610ff6565b6101546102d4366004614736565b611022565b6102e76005600160991b0181565b6040516001600160a01b0390911681526020016101b1565b61015461030d3660046146cd565b6111df565b6101546103203660046146cd565b611465565b6101c2601481565b61034061033b3660046146cd565b611579565b6040516101b1919061483b565b6101e76202a30081565b5f8381527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408120600101545f805160206150e38339815191529184156103a9576103a68285611658565b90505b5f868152600684016020526040808220815161010081019092528054829060ff1660048111156103db576103db614827565b60048111156103ec576103ec614827565b8152815461010090046001600160a01b031660208201526001820154604082015260028201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b909104811660c083015260039092015490911660e09091015290505f61046884611579565b905060028251600481111561047f5761047f614827565b146104d15760405162461bcd60e51b815260206004820152602a60248201525f805160206151038339815191526044820152696e6f742061637469766560b01b60648201526084015b60405180910390fd5b60208201516001600160a01b031633146105365760405162461bcd60e51b815260206004820152603360248201525f805160206151038339815191526044820152723737ba1037bbb732b210313c9039b2b73232b960691b60648201526084016104c8565b600382528051600290600581111561055057610550614827565b0361068d5761056282606001516118f4565b61056b84611901565b6001600160401b0390811660e0840152421660a0808401919091526060830151908201515f9161059a91614929565b90506105a68582611983565b5f6005600160991b016001600160a01b031663ee5b48eb6105cc888760e00151866119cb565b6040518263ffffffff1660e01b81526004016105e8919061496b565b6020604051808303815f875af1158015610604573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610628919061499d565b90508360e001516001600160401b0316867f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df848460405161067e9291906001600160401b03929092168252602082015260400190565b60405180910390a350506106b0565b60808101516001600160401b0390811660e0808501919091528201511660a08301525b5f88815260068601602052604090208251815484929190829060ff191660018360048111156106e1576106e1614827565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b031990911617815560408083015160018301556060830151600283018054608086015160a08088015160c08901516001600160401b03908116600160c01b026001600160c01b03928216600160801b02929092166001600160801b03948216600160401b026001600160801b0319909616978216979097179490941792909216949094171790915560e090940151600390930180549390941667ffffffffffffffff199390931692909217909255830151905185918a917f5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69916107f5916001600160401b0391909116815260200190565b60405180910390a35050505050505050565b5f8181525f8051602061516383398151915260205260408082208151610100810190925280545f8051602061512383398151915293929190829060ff16600581111561085557610855614827565b600581111561086657610866614827565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e090910152909150815160058111156108eb576108eb614827565b146109505760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016104c8565b6005600160991b016001600160a01b031663ee5b48eb6109758584608001515f6119cb565b6040518263ffffffff1660e01b8152600401610991919061496b565b6020604051808303815f875af11580156109ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d1919061499d565b50505050565b5f6109e764e8d4a51000836149b4565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a36575080546001600160401b03808416911610155b15610a545760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a7f8484611be8565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f610ad682611c02565b9050610af381606001516001600160401b03168260400151611f75565b5050565b5f805160206150e38339815191525f610b0f84611fab565b90505f80610b20836040015161218c565b50915091505f610b2f83611579565b9050816001600160401b031681608001516001600160401b03161015610b675760405162461bcd60e51b81526004016104c8906149d3565b5f8681526006860160205260409020600201546001600160401b03808416600160c01b909204161115610bac5760405162461bcd60e51b81526004016104c890614a15565b60015f87815260068701602052604090205460ff166004811115610bd257610bd2614827565b14610c3b5760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a2064656c65676174696f6e4960448201527211081b9bdd081c195b991a5b99c81859191959606a1b60648201526084016104c8565b5f868152600686016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092179092559251928352841691859189917f245fc69b36e168426e0306fc8d8300661b9af297c7958820dbf804f9f63e7064910160405180910390a450505050505050565b5f6109e76001600160401b03831664e8d4a51000614a5e565b5f610cea82611579565b60a0015192915050565b5f805160206150e38339815191525f610d0c85611579565b5f86815260058401602052604090205460c0820151919250610d3e91620100009091046001600160401b031690614a75565b6001600160401b0316421015610db25760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a206d696e696d756d207374616044820152721ad948191d5c985d1a5bdb881b9bdd081b595d606a1b60648201526084016104c8565b8315610dc457610dc28584611658565b505b610dcd856123c7565b5050505050565b5f805160206150e38339815191525f610dec84611fab565b90505f80610dfd836040015161218c565b50915091505f610e0c83611579565b9050816001600160401b031681608001516001600160401b03161015610e445760405162461bcd60e51b81526004016104c8906149d3565b5f8681526006860160205260409020600301546001600160401b0380841691161115610e825760405162461bcd60e51b81526004016104c890614a15565b60035f87815260068701602052604090205460ff166004811115610ea857610ea8614827565b14610efc5760405162461bcd60e51b815260206004820152603160248201525f805160206151038339815191526044820152701b9bdd081c195b991a5b99c81859191959607a1b60648201526084016104c8565b5f868152600686016020908152604091829020805460ff19166004908117808355845161010080820187529281529190046001600160a01b031692810183905260018201549381019390935260028101546001600160401b0380821660608601819052600160401b830482166080870152600160801b8304821660a0870152600160c01b909204811660c086015260039092015490911660e0840152610fa191611f75565b826001600160401b031684887f52e9b1eaef84d46cda83ccb9d427267bc4d04f756b4a32c8302722b79e5c65ab60405160405180910390a45050505050505050565b5f610fef833384612765565b9392505050565b5f610fff612b63565b61100a848484612b9a565b9050610fef60015f8051602061514383398151915255565b5f805160206151238339815191525f61103a83611fab565b90505f8061104b8360400151612dd3565b91509150806110ad5760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016104c8565b5f828152600785016020526040812080546110c790614a95565b90501180156110f9575060015f83815260088601602052604090205460ff1660058111156110f7576110f7614827565b145b6111155760405162461bcd60e51b81526004016104c890614acd565b5f828152600785016020526040812061112d916145da565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408082208151610100810190925280545f805160206150e383398151915293929190829060ff16600481111561124057611240614827565b600481111561125157611251614827565b8152815461010090046001600160a01b03166020820152600180830154604083015260028301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e090910152909150815160048111156112d8576112d8614827565b14806112f657506003815160048111156112f4576112f4614827565b145b61134a5760405162461bcd60e51b815260206004820152603260248201525f80516020615103833981519152604482015271737461747573206e6f742070656e64696e6760701b60648201526084016104c8565b5f6113588260400151611579565b905080608001516001600160401b03165f036113dc5760405162461bcd60e51b815260206004820152603f60248201527f506f5356616c696461746f724d616e616765723a20636f756c64206e6f74206660448201527f696e642076616c696461746f7220666f722064656c65676174696f6e2049440060648201526084016104c8565b6005600160991b016001600160a01b031663ee5b48eb611409846040015184608001518560a001516119cb565b6040518263ffffffff1660e01b8152600401611425919061496b565b6020604051808303815f875af1158015611441573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dcd919061499d565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f805160206151238339815191529291906114ad90614a95565b90501180156114df575060015f83815260088301602052604090205460ff1660058111156114dd576114dd614827565b145b6114fb5760405162461bcd60e51b81526004016104c890614acd565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916115349190600401614b14565b6020604051808303815f875af1158015611550573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611574919061499d565b505050565b611581614611565b5f8281525f805160206151638339815191526020526040908190208151610100810190925280545f80516020615123833981519152929190829060ff1660058111156115cf576115cf614827565b60058111156115e0576115e0614827565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156116a3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116ca9190810190614c15565b915091508061172d5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016104c8565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611770573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611794919061499d565b8251146117f85760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016104c8565b60208201516001600160a01b03161561186e5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016104c8565b5f8061187d8460400151612f74565b915091508187146118ea5760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016104c8565b9695505050505050565b6118fe815f61314c565b50565b5f8181525f805160206151638339815191526020526040812060030180545f80516020615123833981519152916001600160401b03909116908361194483614cfd565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b5f9182525f80516020615163833981519152602052604090912060030180546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611a4457611a04816001614d22565b611a0f906008614a5e565b5081515f90839083908110611a2657611a26614d35565b60200101906001600160f81b03191690815f1a9053506001016119f0565b505f5b6004811015611aa757611a5b816003614d22565b611a66906008614a5e565b6001901c60f81b82611a79836002614d49565b81518110611a8957611a89614d35565b60200101906001600160f81b03191690815f1a905350600101611a47565b505f5b6020811015611b0957611abe81601f614d22565b611ac9906008614a5e565b86901c60f81b82611adb836006614d49565b81518110611aeb57611aeb614d35565b60200101906001600160f81b03191690815f1a905350600101611aaa565b505f5b6008811015611b7457611b20816007614d22565b611b2b906008614a5e565b6001600160401b038616901c60f81b82611b46836026614d49565b81518110611b5657611b56614d35565b60200101906001600160f81b03191690815f1a905350600101611b0c565b505f5b6008811015611bdf57611b8b816007614d22565b611b96906008614a5e565b6001600160401b038516901c60f81b82611bb183602e614d49565b81518110611bc157611bc1614d35565b60200101906001600160f81b03191690815f1a905350600101611b77565b50949350505050565b611bf06133a6565b611bf9826133f1565b610af38161345d565b611c0a614611565b5f805160206151238339815191525f611c2284611fab565b90505f80611c338360400151612dd3565b915091508015611c985760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016104c8565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115611cca57611cca614827565b6005811115611cdb57611cdb614827565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115611d6257611d62614827565b1480611d805750600182516005811115611d7e57611d7e614827565b145b611ddf5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016104c8565b600382516005811115611df457611df4614827565b03611e0157506004611e05565b5060055b6020808301515f90815260098801909152604081205581816005811115611e2e57611e2e614827565b90816005811115611e4157611e41614827565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115611e7557611e75614827565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115611f4057611f40614827565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab0054610af3906001600160a01b03168284613511565b60408051606080820183525f8083526020830181905292820152905f805160206151238339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612020573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120479190810190614c15565b91509150806120ae5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016104c8565b82548251146121115760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016104c8565b60208201516001600160a01b0316156121845760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016104c8565b509392505050565b5f805f83516036146121b05760405162461bcd60e51b81526004016104c890614d5c565b5f805b60028110156121ff576121c7816001614d22565b6121d2906008614a5e565b61ffff168682815181106121e8576121e8614d35565b016020015160f81c901b91909117906001016121b3565b5061ffff8116156122225760405162461bcd60e51b81526004016104c890614da5565b5f805b600481101561227d57612239816003614d22565b612244906008614a5e565b63ffffffff1687612256836002614d49565b8151811061226657612266614d35565b016020015160f81c901b9190911790600101612225565b5063ffffffff81166003146122a45760405162461bcd60e51b81526004016104c890614de8565b5f805b60208110156122f9576122bb81601f614d22565b6122c6906008614a5e565b886122d2836006614d49565b815181106122e2576122e2614d35565b016020015160f81c901b91909117906001016122a7565b505f805b600881101561235857612311816007614d22565b61231c906008614a5e565b6001600160401b031689612331836026614d49565b8151811061234157612341614d35565b016020015160f81c901b91909117906001016122fd565b505f805b60088110156123b757612370816007614d22565b61237b906008614a5e565b6001600160401b03168a61239083602e614d49565b815181106123a0576123a0614d35565b016020015160f81c901b919091179060010161235c565b5091989097509095509350505050565b5f8181525f8051602061516383398151915260205260408082208151610100810190925280545f8051602061512383398151915293929190829060ff16600581111561241557612415614827565b600581111561242657612426614827565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e090910152909150815160058111156124ae576124ae614827565b1461250a5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016104c8565b60408101516001600160a01b0316336001600160a01b0316146125845760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016104c8565b6125918160a001516118f4565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff191660018360058111156125d5576125d5614827565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f6126a18461269b81611901565b5f6119cb565b60405163ee5b48eb60e01b81529091505f906005600160991b019063ee5b48eb906126d090859060040161496b565b6020604051808303815f875af11580156126ec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612710919061499d565b60a0840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b5f61276e612b63565b5f805160206150e38339815191525f6127896101e285613570565b90505f61279587611579565b90506002815160058111156127ac576127ac614827565b1461280b5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a2076616c696461746f72206e6044820152686f742061637469766560b81b60648201526084016104c8565b612814826135a6565b5f828260a001516128259190614a75565b60048501546060840151919250612847916001600160401b0390911690614e2f565b6001600160401b0316816001600160401b031611156128c65760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a206d6178696d756d2076616c6044820152741a59185d1bdc881dd95a59da1d081c995858da1959605a1b60648201526084016104c8565b6128d08882611983565b5f6128da89611901565b90505f898260405160200161290692919091825260c01b6001600160c01b031916602082015260280190565b6040516020818303038152906040528051906020012090505f6005600160991b016001600160a01b031663ee5b48eb6129408d86886119cb565b6040518263ffffffff1660e01b815260040161295c919061496b565b6020604051808303815f875af1158015612978573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299c919061499d565b60408051610100810190915290915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905260a0850181905290881660c085015260e090930183905285835260068b01909152902081518154829060ff19166001836004811115612a2457612a24614827565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002860180546080808a015160a08b015160c08c01516001600160401b039687166001600160801b031990951694909417600160401b92871692909202919091176001600160801b0316600160801b918616919091026001600160c01b031617600160c01b928516929092029190911790915560e0909701516003909601805467ffffffffffffffff191696821696909617909555815189861681528a861694810194909452938b1690830152918101849052908c16918d9185917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a45095505050505050610fef60015f8051602061514383398151915255565b5f80516020615143833981519152805460011901612b9457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f805160206150e3833981519152906001600160401b0316612be6604086016020870161478b565b6001600160401b03161015612c555760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d696e60448201526e1039ba30b5b290323ab930ba34b7b760891b60648201526084016104c8565b6003810154612c676020860186614e69565b61ffff1610158015612c8b5750612710612c846020860186614e69565b61ffff1611155b612ca75760405162461bcd60e51b81526004016104c890614e84565b8054831015612d0a5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152687420746f6f206c6f7760b81b60648201526084016104c8565b8060010154831115612d715760405162461bcd60e51b815260206004820152602a60248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152690e840e8dede40d0d2ced60b31b60648201526084016104c8565b5f612d7b84613570565b90505f612d87826109d7565b90505f612d9488836135b1565b5f81815260058601602052604090209091508790612db28282614ecf565b509098975050505050505050565b60015f8051602061514383398151915255565b5f808251602714612df65760405162461bcd60e51b81526004016104c890614d5c565b5f805b6002811015612e4557612e0d816001614d22565b612e18906008614a5e565b61ffff16858281518110612e2e57612e2e614d35565b016020015160f81c901b9190911790600101612df9565b5061ffff811615612e685760405162461bcd60e51b81526004016104c890614da5565b5f805b6004811015612ec357612e7f816003614d22565b612e8a906008614a5e565b63ffffffff1686612e9c836002614d49565b81518110612eac57612eac614d35565b016020015160f81c901b9190911790600101612e6b565b5063ffffffff8116600214612eea5760405162461bcd60e51b81526004016104c890614de8565b5f805b6020811015612f3f57612f0181601f614d22565b612f0c906008614a5e565b87612f18836006614d49565b81518110612f2857612f28614d35565b016020015160f81c901b9190911790600101612eed565b505f86602681518110612f5457612f54614d35565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e14612f975760405162461bcd60e51b81526004016104c890614d5c565b5f805b6002811015612fe657612fae816001614d22565b612fb9906008614a5e565b61ffff16858281518110612fcf57612fcf614d35565b016020015160f81c901b9190911790600101612f9a565b5061ffff8116156130095760405162461bcd60e51b81526004016104c890614da5565b5f805b600481101561306457613020816003614d22565b61302b906008614a5e565b63ffffffff168661303d836002614d49565b8151811061304d5761304d614d35565b016020015160f81c901b919091179060010161300c565b5063ffffffff811660041461308b5760405162461bcd60e51b81526004016104c890614de8565b5f805b60208110156130e0576130a281601f614d22565b6130ad906008614a5e565b876130b9836006614d49565b815181106130c9576130c9614d35565b016020015160f81c901b919091179060010161308e565b505f805b600881101561313f576130f8816007614d22565b613103906008614a5e565b6001600160401b031688613118836026614d49565b8151811061312857613128614d35565b016020015160f81c901b91909117906001016130e4565b5090969095509350505050565b604080516080810182527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb03548082527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb045460208301527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0554928201929092527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06546001600160401b031660608201525f8051602061512383398151915291429190158061323257506002830154815161322e916001600160401b031690614d49565b8210155b15613258576001600160401b038516606082015281815260408101516020820152613277565b848160600181815161326a9190614a75565b6001600160401b03169052505b6060810151613287906064614e2f565b602082015160028501546001600160401b0392909216916132b29190600160401b900460ff16614a5e565b10156133165760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016104c8565b831561333f57846001600160401b0316816040018181516133379190614d49565b90525061335e565b846001600160401b03168160400181815161335a9190614d22565b9052505b805160038401556020810151600484015560408101516005840155606001516006909201805467ffffffffffffffff19166001600160401b0390931692909217909155505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166133ef57604051631afcd79f60e31b815260040160405180910390fd5b565b6133f96133a6565b61340281613aeb565b6118fe608082013560a083013561341f60e0850160c0860161478b565b613430610100860160e08701614e69565b61ffff1661344661012087016101008801614f25565b61345861014088016101208901614f45565b613b0c565b6134656133a6565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab006001600160a01b0382166134f15760405162461bcd60e51b815260206004820152602c60248201527f4552433230546f6b656e5374616b696e674d616e616765723a207a65726f207460448201526b6f6b656e206164647265737360a01b60648201526084016104c8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b0383811660248301526044820183905261157491859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613d50565b5f6109e7827f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00546001600160a01b031690613db1565b6118fe81600161314c565b5f5f80516020615123833981519152426135d1604086016020870161478b565b6001600160401b0316116136435760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016104c8565b613653604085016020860161478b565b6001600160401b03166136696202a30042614d49565b116136dc5760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016104c8565b83356137345760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016104c8565b83355f908152600982016020526040902054156137a45760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016104c8565b6137b16040850185614f60565b90506030146138185760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016104c8565b613821836135a6565b5f806138bb6040518060a0016040528085600101548152602001885f01358152602001876001600160401b03168152602001886020016020810190613866919061478b565b6001600160401b0316815260200161388160408a018a614f60565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250613f13565b5f828152600786016020526040902091935091506138d98282614fed565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061390690859060040161496b565b6020604051808303815f875af1158015613922573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613946919061499d565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff191660018360058111156139c8576139c8614827565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b91613abd91908e01908e0161478b565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b613af36133a6565b613afb6142b8565b613b036142c8565b6118fe816142d0565b613b146133a6565b5f805160206150e383398151915283613b805760405162461bcd60e51b815260206004820152602860248201527f506f5356616c696461746f724d616e616765723a207a65726f2064656c65676160448201526774696f6e2066656560c01b60648201526084016104c8565b612710841115613ba25760405162461bcd60e51b81526004016104c890614e84565b85871115613c0a5760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642073746160448201526e6b6520616d6f756e742072616e676560881b60648201526084016104c8565b5f8360ff1611613c775760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a207a65726f206d6178696d75604482015271369039ba30b5b29036bab63a34b83634b2b960711b60648201526084016104c8565b600a60ff84161115613ce95760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d617860448201527434b6bab69039ba30b5b29036bab63a34b83634b2b960591b60648201526084016104c8565b95865560018601949094556002850180546001600160401b0390941667ffffffffffffffff19909416939093179092556003840155600490920180546001600160a01b03909216600160401b026001600160e01b031990921660ff90931692909217179055565b5f613d646001600160a01b0384168361447d565b905080515f14158015613d88575080806020019051810190613d8691906150ac565b155b1561157457604051635274afe760e01b81526001600160a01b03841660048201526024016104c8565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015613df7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e1b919061499d565b9050613e326001600160a01b03851633308661448a565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015613e76573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e9a919061499d565b9050818111613f005760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104c8565b613f0a8282614d22565b95945050505050565b5f6060826080015151603014613f7d5760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016104c8565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613ff457613fb4816001614d22565b613fbf906008614a5e565b5081515f90839083908110613fd657613fd6614d35565b60200101906001600160f81b03191690815f1a905350600101613fa0565b505f5b60048110156140525761400b816003614d22565b614016906008614a5e565b505f82614024836002614d49565b8151811061403457614034614d35565b60200101906001600160f81b03191690815f1a905350600101613ff7565b505f5b60208110156140af578451816020811061407157614071614d35565b1a60f81b82614081836006614d49565b8151811061409157614091614d35565b60200101906001600160f81b03191690815f1a905350600101614055565b505f5b602081101561410f57846020015181602081106140d1576140d1614d35565b1a60f81b826140e1836026614d49565b815181106140f1576140f1614d35565b60200101906001600160f81b03191690815f1a9053506001016140b2565b505f5b600881101561418357614126816007614d22565b614131906008614a5e565b60ff1685604001516001600160401b0316901c60f81b828260466141559190614d49565b8151811061416557614165614d35565b60200101906001600160f81b03191690815f1a905350600101614112565b505f5b60308110156141ee57846080015181815181106141a5576141a5614d35565b01602001516001600160f81b031916826141c083604e614d49565b815181106141d0576141d0614d35565b60200101906001600160f81b03191690815f1a905350600101614186565b505f5b600881101561426057614205816007614d22565b614210906008614a5e565b60608601516001600160401b0390811691161c60f81b8261423283607e614d49565b8151811061424257614242614d35565b60200101906001600160f81b03191690815f1a9053506001016141f1565b5060028160405161427191906150c7565b602060405180830381855afa15801561428c573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906142af919061499d565b94909350915050565b6142c06133a6565b6133ef6144c3565b6133ef6133a6565b6142d86133a6565b80355f8051602061512383398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb015560146143246080840160608501614f25565b60ff1611156143915760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016104c8565b5f6143a26080840160608501614f25565b60ff161161440a5760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016104c8565b61441a6080830160608401614f25565b60028201805460ff92909216600160401b0260ff60401b1990921691909117905561444b606083016040840161478b565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b6060610fef83835f6144cb565b6040516001600160a01b0384811660248301528381166044830152606482018390526109d19186918216906323b872dd9060840161353e565b612dc06133a6565b6060814710156144f05760405163cd78605960e01b81523060048201526024016104c8565b5f80856001600160a01b0316848660405161450b91906150c7565b5f6040518083038185875af1925050503d805f8114614545576040519150601f19603f3d011682016040523d82523d5f602084013e61454a565b606091505b50915091506118ea86838360608261456a57614565826145b1565b610fef565b815115801561458157506001600160a01b0384163b155b156145aa57604051639996b31560e01b81526001600160a01b03851660048201526024016104c8565b5080610fef565b8051156145c15780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5080546145e690614a95565b5f825580601f106145f5575050565b601f0160209004905f5260205f20908101906118fe9190614655565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614669575f8155600101614656565b5090565b80151581146118fe575f80fd5b803563ffffffff8116811461468d575f80fd5b919050565b5f805f606084860312156146a4575f80fd5b8335925060208401356146b68161466d565b91506146c46040850161467a565b90509250925092565b5f602082840312156146dd575f80fd5b5035919050565b6001600160a01b03811681146118fe575f80fd5b5f8082840361016081121561470b575f80fd5b6101408082121561471a575f80fd5b849350830135905061472b816146e4565b809150509250929050565b5f60208284031215614746575f80fd5b610fef8261467a565b5f8060408385031215614760575f80fd5b6147698361467a565b946020939093013593505050565b6001600160401b03811681146118fe575f80fd5b5f6020828403121561479b575f80fd5b8135610fef81614777565b5f80604083850312156147b7575f80fd5b50508035926020909101359150565b5f805f83850360808112156147d9575f80fd5b84356001600160401b038111156147ee575f80fd5b8501606081880312156147ff575f80fd5b93506040601f1982011215614812575f80fd5b50602084019150606084013590509250925092565b634e487b7160e01b5f52602160045260245ffd5b81516101008201906006811061485f57634e487b7160e01b5f52602160045260245ffd5b8083525060208301516020830152604083015161488760408401826001600160a01b03169052565b5060608301516148a260608401826001600160401b03169052565b5060808301516148bd60808401826001600160401b03169052565b5060a08301516148d860a08401826001600160401b03169052565b5060c08301516148f360c08401826001600160401b03169052565b5060e083015161490e60e08401826001600160401b03169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0382811682821603908082111561490e5761490e614915565b5f5b8381101561496357818101518382015260200161494b565b50505f910152565b602081525f8251806020840152614989816040850160208701614949565b601f01601f19169190910160400192915050565b5f602082840312156149ad575f80fd5b5051919050565b5f826149ce57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b80820281158282048414176109e7576109e7614915565b6001600160401b0381811683821601908082111561490e5761490e614915565b600181811c90821680614aa957607f821691505b602082108103614ac757634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f8454614b2681614a95565b806020870152604060018084165f8114614b475760018114614b6357614b90565b60ff19851660408a0152604084151560051b8a01019550614b90565b895f5260205f205f5b85811015614b875781548b8201860152908301908801614b6c565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614bd457614bd4614b9e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614c0257614c02614b9e565b604052919050565b805161468d8161466d565b5f8060408385031215614c26575f80fd5b82516001600160401b0380821115614c3c575f80fd5b9084019060608287031215614c4f575f80fd5b614c57614bb2565b82518152602080840151614c6a816146e4565b82820152604084015183811115614c7f575f80fd5b80850194505087601f850112614c93575f80fd5b835183811115614ca557614ca5614b9e565b614cb7601f8201601f19168301614bda565b93508084528882828701011115614ccc575f80fd5b614cdb81838601848801614949565b50826040830152819550614cf0818801614c0a565b9450505050509250929050565b5f6001600160401b03808316818103614d1857614d18614915565b6001019392505050565b818103818111156109e7576109e7614915565b634e487b7160e01b5f52603260045260245ffd5b808201808211156109e7576109e7614915565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b6001600160401b03818116838216028082169190828114614e5257614e52614915565b505092915050565b61ffff811681146118fe575f80fd5b5f60208284031215614e79575f80fd5b8135610fef81614e5a565b6020808252602b908201527f506f5356616c696461746f724d616e616765723a20696e76616c69642064656c60408201526a65676174696f6e2066656560a81b606082015260800190565b8135614eda81614e5a565b61ffff8116905081548161ffff1982161783556020840135614efb81614777565b69ffffffffffffffff00008160101b168369ffffffffffffffffffff198416171784555050505050565b5f60208284031215614f35575f80fd5b813560ff81168114610fef575f80fd5b5f60208284031215614f55575f80fd5b8135610fef816146e4565b5f808335601e19843603018112614f75575f80fd5b8301803591506001600160401b03821115614f8e575f80fd5b602001915036819003821315614fa2575f80fd5b9250929050565b601f82111561157457805f5260205f20601f840160051c81016020851015614fce5750805b601f840160051c820191505b81811015610dcd575f8155600101614fda565b81516001600160401b0381111561500657615006614b9e565b61501a816150148454614a95565b84614fa9565b602080601f83116001811461504d575f84156150365750858301515b5f19600386901b1c1916600185901b1785556150a4565b5f85815260208120601f198616915b8281101561507b5788860151825594840194600190910190840161505c565b508582101561509857878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f602082840312156150bc575f80fd5b8151610fef8161466d565b5f82516150d8818460208701614949565b919091019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00506f5356616c696461746f724d616e616765723a2064656c65676174696f6e20e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -1368,19 +1368,16 @@ func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Close() e // ERC20TokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the ERC20TokenStakingManager contract. type ERC20TokenStakingManagerDelegatorRemovalInitialized struct { - DelegationID [32]byte - ValidationID [32]byte - Nonce uint64 - ValidatorWeight uint64 - EndTime *big.Int - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos + DelegationID [32]byte + ValidationID [32]byte + EndTime *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x5318ab4d7cdf77056db2db5b539a08fe7d1a63d6885ecee8236a0dbda2843b4e. +// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID, uint64 indexed nonce, uint64 validatorWeight, uint256 endTime, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, nonce []uint64) (*ERC20TokenStakingManagerDelegatorRemovalInitializedIterator, error) { +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 endTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegatorRemovalInitializedIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1390,22 +1387,18 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegat for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule, nonceRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) if err != nil { return nil, err } return &ERC20TokenStakingManagerDelegatorRemovalInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil } -// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x5318ab4d7cdf77056db2db5b539a08fe7d1a63d6885ecee8236a0dbda2843b4e. +// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID, uint64 indexed nonce, uint64 validatorWeight, uint256 endTime, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegatorRemovalInitialized, delegationID [][32]byte, validationID [][32]byte, nonce []uint64) (event.Subscription, error) { +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 endTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegatorRemovalInitialized, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1415,12 +1408,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule, nonceRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1452,9 +1441,9 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato }), nil } -// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x5318ab4d7cdf77056db2db5b539a08fe7d1a63d6885ecee8236a0dbda2843b4e. +// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID, uint64 indexed nonce, uint64 validatorWeight, uint256 endTime, bytes32 setWeightMessageID) +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 endTime) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegatorRemovalInitialized(log types.Log) (*ERC20TokenStakingManagerDelegatorRemovalInitialized, error) { event := new(ERC20TokenStakingManagerDelegatorRemovalInitialized) if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { @@ -2215,3 +2204,158 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidato event.Raw = log return event, nil } + +// ERC20TokenStakingManagerValidatorWeightUpdateIterator is returned from FilterValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for ValidatorWeightUpdate events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerValidatorWeightUpdateIterator struct { + Event *ERC20TokenStakingManagerValidatorWeightUpdate // 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 *ERC20TokenStakingManagerValidatorWeightUpdateIterator) 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(ERC20TokenStakingManagerValidatorWeightUpdate) + 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(ERC20TokenStakingManagerValidatorWeightUpdate) + 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 *ERC20TokenStakingManagerValidatorWeightUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20TokenStakingManagerValidatorWeightUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20TokenStakingManagerValidatorWeightUpdate represents a ValidatorWeightUpdate event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerValidatorWeightUpdate 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 (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte, nonce []uint64) (*ERC20TokenStakingManagerValidatorWeightUpdateIterator, 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 := _ERC20TokenStakingManager.contract.FilterLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) + if err != nil { + return nil, err + } + return &ERC20TokenStakingManagerValidatorWeightUpdateIterator{contract: _ERC20TokenStakingManager.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 (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerValidatorWeightUpdate, 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 := _ERC20TokenStakingManager.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(ERC20TokenStakingManagerValidatorWeightUpdate) + if err := _ERC20TokenStakingManager.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 (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidatorWeightUpdate(log types.Log) (*ERC20TokenStakingManagerValidatorWeightUpdate, error) { + event := new(ERC20TokenStakingManagerValidatorWeightUpdate) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go index dba7a22cc..b10c1df9f 100644 --- a/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/staking/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -75,8 +75,8 @@ 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\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"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\":\"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: "0x608060405234801561000f575f80fd5b50604051614f22380380614f2283398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b614dd58061014d5f395ff3fe608060405260043610610131575f3560e01c806376f78621116100a8578063ba3a4b971161006d578063ba3a4b9714610394578063bee0a03f146103b3578063c599e24f146103d2578063c974d1b6146103e5578063d5f20ff6146103f9578063df93d8de14610425575f80fd5b806376f78621146102f257806380a8ad941461031157806398f3e2b414610324578063a3a65e4814610343578063b771b3bc14610362575f80fd5b80632e2194d8116100f95780632e2194d81461021757806335455ded1461024e578063467ef06f146102765780635297fae61461029557806362065856146102b457806366435abf146102d3575f80fd5b80630118acc4146101355780630322ed98146101565780630cdd098514610175578063151d30d1146101d25780631f7a9d8f146101f8575b5f80fd5b348015610140575f80fd5b5061015461014f366004614348565b61043b565b005b348015610161575f80fd5b50610154610170366004614383565b6108cc565b348015610180575f80fd5b506101bf61018f366004614383565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b3480156101dd575f80fd5b506101e6600a81565b60405160ff90911681526020016101c9565b348015610203575f80fd5b5061015461021236600461439a565b610a9c565b348015610222575f80fd5b50610236610231366004614383565b610b79565b6040516001600160401b0390911681526020016101c9565b348015610259575f80fd5b5061026361271081565b60405161ffff90911681526020016101c9565b348015610281575f80fd5b506101546102903660046143b1565b610b8f565b3480156102a0575f80fd5b506101546102af3660046143ca565b610bba565b3480156102bf575f80fd5b506101bf6102ce366004614406565b610d8a565b3480156102de575f80fd5b506102366102ed366004614383565b610da3565b3480156102fd575f80fd5b5061015461030c366004614348565b610db7565b6101bf61031f366004614421565b610e97565b34801561032f575f80fd5b5061015461033e3660046143ca565b610ec3565b34801561034e575f80fd5b5061015461035d3660046143b1565b6110d2565b34801561036d575f80fd5b5061037c6005600160991b0181565b6040516001600160a01b0390911681526020016101c9565b34801561039f575f80fd5b506101546103ae366004614383565b61128f565b3480156103be575f80fd5b506101546103cd366004614383565b611515565b6101bf6103e0366004614383565b611629565b3480156103f0575f80fd5b506101e6601481565b348015610404575f80fd5b50610418610413366004614383565b611635565b6040516101c9919061448e565b348015610430575f80fd5b506102366202a30081565b5f8381527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408120600101545f80516020614d2983398151915291841561048d5761048a8285611714565b90505b5f868152600684016020526040808220815161010081019092528054829060ff1660048111156104bf576104bf61447a565b60048111156104d0576104d061447a565b8152815461010090046001600160a01b03166020820152600182015460408201526002808301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e090910152909150815160048111156105575761055761447a565b146105a95760405162461bcd60e51b815260206004820152602a60248201525f80516020614d498339815191526044820152696e6f742061637469766560b01b60648201526084015b60405180910390fd5b60208101516001600160a01b0316331461060e5760405162461bcd60e51b815260206004820152603360248201525f80516020614d498339815191526044820152723737ba1037bbb732b210313c9039b2b73232b960691b60648201526084016105a0565b5f610618846119b0565b600383526001600160401b0342811660a0850152811660e08401525f8981526006870160205260409020835181549293508492829060ff191660018360048111156106655761066561447a565b021790555060208201518154610100600160a81b0319166101006001600160a01b0390921691909102178155604082015160018201556060820151600282018054608085015160a086015160c08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560e0909201516003909101805467ffffffffffffffff1916919092161790555f61073785611635565b905082606001516001600160401b03168160a001516001600160401b0316116107ae5760405162461bcd60e51b815260206004820152602360248201527f506f5356616c696461746f724d616e616765723a20496e76616c69642077656960448201526219da1d60ea1b60648201526084016105a0565b6002815160058111156107c3576107c361447a565b036107d5576107d58360600151611a32565b5f83606001518260a001516107ea919061457c565b90506107f68682611a3f565b5f6005600160991b0163ee5b48eb61080f898786611a87565b6040518263ffffffff1660e01b815260040161082b91906145be565b6020604051808303815f875af1158015610847573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086b91906145f0565b604080516001600160401b03858116825242602083015291810183905291925085169088908d907f5318ab4d7cdf77056db2db5b539a08fe7d1a63d6885ecee8236a0dbda2843b4e9060600160405180910390a45050505050505050505050565b5f8181525f80516020614da983398151915260205260408082208151610100810190925280545f80516020614d6983398151915293929190829060ff16600581111561091a5761091a61447a565b600581111561092b5761092b61447a565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e090910152909150815160058111156109b0576109b061447a565b14610a155760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016105a0565b6005600160991b016001600160a01b031663ee5b48eb610a3a8584608001515f611a87565b6040518263ffffffff1660e01b8152600401610a5691906145be565b6020604051808303815f875af1158015610a72573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9691906145f0565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610ae5575080546001600160401b03808416911610155b15610b035760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610b2d83611ca6565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f610b8964e8d4a5100083614607565b92915050565b5f610b9982611cb7565b9050610bb681606001516001600160401b0316826040015161202a565b5050565b5f80516020614d298339815191525f610bd28461203d565b90505f80610be3836040015161221e565b50915091505f610bf283611635565b9050816001600160401b031681608001516001600160401b03161015610c2a5760405162461bcd60e51b81526004016105a090614626565b5f8681526006860160205260409020600201546001600160401b03808416600160c01b909204161115610c6f5760405162461bcd60e51b81526004016105a090614668565b60015f87815260068701602052604090205460ff166004811115610c9557610c9561447a565b14610cfe5760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a2064656c65676174696f6e4960448201527211081b9bdd081c195b991a5b99c81859191959606a1b60648201526084016105a0565b5f868152600686016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092179092559251928352841691859189917f245fc69b36e168426e0306fc8d8300661b9af297c7958820dbf804f9f63e7064910160405180910390a450505050505050565b5f610b896001600160401b03831664e8d4a510006146b1565b5f610dad82611635565b60a0015192915050565b5f80516020614d298339815191525f610dcf85611635565b5f86815260058401602052604090205460c0820151919250610e0191620100009091046001600160401b0316906146c8565b6001600160401b0316421015610e755760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a206d696e696d756d207374616044820152721ad948191d5c985d1a5bdb881b9bdd081b595d606a1b60648201526084016105a0565b8315610e8757610e858584611714565b505b610e9085612459565b5050505050565b5f610ea06127f7565b610eab83833461282e565b9050610b8960015f80516020614d8983398151915255565b5f80516020614d298339815191525f610edb8461203d565b90505f80610eec836040015161221e565b50915091505f610efb83611635565b9050816001600160401b031681608001516001600160401b03161015610f335760405162461bcd60e51b81526004016105a090614626565b5f8681526006860160205260409020600301546001600160401b0380841691161115610f715760405162461bcd60e51b81526004016105a090614668565b60035f87815260068701602052604090205460ff166004811115610f9757610f9761447a565b14610feb5760405162461bcd60e51b815260206004820152603160248201525f80516020614d498339815191526044820152701b9bdd081c195b991a5b99c81859191959607a1b60648201526084016105a0565b5f868152600686016020908152604091829020805460ff19166004908117808355845161010080820187529281529190046001600160a01b031692810183905260018201549381019390935260028101546001600160401b0380821660608601819052600160401b830482166080870152600160801b8304821660a0870152600160c01b909204811660c086015260039092015490911660e08401526110909161202a565b826001600160401b031684887f52e9b1eaef84d46cda83ccb9d427267bc4d04f756b4a32c8302722b79e5c65ab60405160405180910390a45050505050505050565b5f80516020614d698339815191525f6110ea8361203d565b90505f806110fb8360400151612a5c565b915091508061115d5760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016105a0565b5f82815260078501602052604081208054611177906146e8565b90501180156111a9575060015f83815260088601602052604090205460ff1660058111156111a7576111a761447a565b145b6111c55760405162461bcd60e51b81526004016105a09061471a565b5f82815260078501602052604081206111dd91614290565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408082208151610100810190925280545f80516020614d2983398151915293929190829060ff1660048111156112f0576112f061447a565b60048111156113015761130161447a565b8152815461010090046001600160a01b03166020820152600180830154604083015260028301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e090910152909150815160048111156113885761138861447a565b14806113a657506003815160048111156113a4576113a461447a565b145b6113fa5760405162461bcd60e51b815260206004820152603260248201525f80516020614d49833981519152604482015271737461747573206e6f742070656e64696e6760701b60648201526084016105a0565b5f6114088260400151611635565b905080608001516001600160401b03165f0361148c5760405162461bcd60e51b815260206004820152603f60248201527f506f5356616c696461746f724d616e616765723a20636f756c64206e6f74206660448201527f696e642076616c696461746f7220666f722064656c65676174696f6e2049440060648201526084016105a0565b6005600160991b016001600160a01b031663ee5b48eb6114b9846040015184608001518560a00151611a87565b6040518263ffffffff1660e01b81526004016114d591906145be565b6020604051808303815f875af11580156114f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9091906145f0565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f80516020614d6983398151915292919061155d906146e8565b905011801561158f575060015f83815260088301602052604090205460ff16600581111561158d5761158d61447a565b145b6115ab5760405162461bcd60e51b81526004016105a09061471a565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916115e49190600401614761565b6020604051808303815f875af1158015611600573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061162491906145f0565b505050565b5f610b89823334612bfd565b61163d6142c7565b5f8281525f80516020614da98339815191526020526040908190208151610100810190925280545f80516020614d69833981519152929190829060ff16600581111561168b5761168b61447a565b600581111561169c5761169c61447a565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561175f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526117869190810190614876565b91509150806117e95760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016105a0565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185091906145f0565b8251146118b45760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016105a0565b60208201516001600160a01b03161561192a5760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016105a0565b5f806119398460400151612ff8565b915091508187146119a65760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016105a0565b9695505050505050565b5f8181525f80516020614da98339815191526020526040812060030180545f80516020614d69833981519152916001600160401b0390911690836119f38361495e565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b611a3c815f6131d0565b50565b5f9182525f80516020614da9833981519152602052604090912060030180546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611b0057611ac0816001614983565b611acb9060086146b1565b5081515f90839083908110611ae257611ae2614996565b60200101906001600160f81b03191690815f1a905350600101611aac565b505f5b6004811015611b6357611b17816003614983565b611b229060086146b1565b6001901c60f81b82611b358360026149aa565b81518110611b4557611b45614996565b60200101906001600160f81b03191690815f1a905350600101611b03565b505f5b6020811015611bc557611b7a81601f614983565b611b859060086146b1565b86901c60f81b82611b978360066149aa565b81518110611ba757611ba7614996565b60200101906001600160f81b03191690815f1a905350600101611b66565b505f5b6008811015611c3057611bdc816007614983565b611be79060086146b1565b6001600160401b038616901c60f81b82611c028360266149aa565b81518110611c1257611c12614996565b60200101906001600160f81b03191690815f1a905350600101611bc8565b505f5b6008811015611c9b57611c47816007614983565b611c529060086146b1565b6001600160401b038516901c60f81b82611c6d83602e6149aa565b81518110611c7d57611c7d614996565b60200101906001600160f81b03191690815f1a905350600101611c33565b5090505b9392505050565b611cae61342a565b611a3c81613475565b611cbf6142c7565b5f80516020614d698339815191525f611cd78461203d565b90505f80611ce88360400151612a5c565b915091508015611d4d5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016105a0565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115611d7f57611d7f61447a565b6005811115611d9057611d9061447a565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115611e1757611e1761447a565b1480611e355750600182516005811115611e3357611e3361447a565b145b611e945760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016105a0565b600382516005811115611ea957611ea961447a565b03611eb657506004611eba565b5060055b6020808301515f90815260098801909152604081205581816005811115611ee357611ee361447a565b90816005811115611ef657611ef661447a565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115611f2a57611f2a61447a565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b0319909316959094169490941717929092161791909117905581516005811115611ff557611ff561447a565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b610bb66001600160a01b038216836134e1565b60408051606080820183525f8083526020830181905292820152905f80516020614d698339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156120b2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120d99190810190614876565b91509150806121405760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016105a0565b82548251146121a35760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016105a0565b60208201516001600160a01b0316156122165760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016105a0565b509392505050565b5f805f83516036146122425760405162461bcd60e51b81526004016105a0906149bd565b5f805b600281101561229157612259816001614983565b6122649060086146b1565b61ffff1686828151811061227a5761227a614996565b016020015160f81c901b9190911790600101612245565b5061ffff8116156122b45760405162461bcd60e51b81526004016105a090614a06565b5f805b600481101561230f576122cb816003614983565b6122d69060086146b1565b63ffffffff16876122e88360026149aa565b815181106122f8576122f8614996565b016020015160f81c901b91909117906001016122b7565b5063ffffffff81166003146123365760405162461bcd60e51b81526004016105a090614a49565b5f805b602081101561238b5761234d81601f614983565b6123589060086146b1565b886123648360066149aa565b8151811061237457612374614996565b016020015160f81c901b9190911790600101612339565b505f805b60088110156123ea576123a3816007614983565b6123ae9060086146b1565b6001600160401b0316896123c38360266149aa565b815181106123d3576123d3614996565b016020015160f81c901b919091179060010161238f565b505f805b600881101561244957612402816007614983565b61240d9060086146b1565b6001600160401b03168a61242283602e6149aa565b8151811061243257612432614996565b016020015160f81c901b91909117906001016123ee565b5091989097509095509350505050565b5f8181525f80516020614da983398151915260205260408082208151610100810190925280545f80516020614d6983398151915293929190829060ff1660058111156124a7576124a761447a565b60058111156124b8576124b861447a565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e090910152909150815160058111156125405761254061447a565b1461259c5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016105a0565b60408101516001600160a01b0316336001600160a01b0316146126165760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016105a0565b6126238160a00151611a32565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff191660018360058111156126675761266761447a565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f6127338461272d816119b0565b5f611a87565b60405163ee5b48eb60e01b81529091505f906005600160991b019063ee5b48eb906127629085906004016145be565b6020604051808303815f875af115801561277e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127a291906145f0565b60a0840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b5f80516020614d8983398151915280546001190161282857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020614d29833981519152906001600160401b031661287a6040860160208701614406565b6001600160401b031610156128e95760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d696e60448201526e1039ba30b5b290323ab930ba34b7b760891b60648201526084016105a0565b60038101546128fb6020860186614a9f565b61ffff161015801561291f57506127106129186020860186614a9f565b61ffff1611155b61293b5760405162461bcd60e51b81526004016105a090614aba565b805483101561299e5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152687420746f6f206c6f7760b81b60648201526084016105a0565b8060010154831115612a055760405162461bcd60e51b815260206004820152602a60248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152690e840e8dede40d0d2ced60b31b60648201526084016105a0565b825f612a1082610b79565b90505f612a1d8883613574565b5f81815260058601602052604090209091508790612a3b8282614b05565b509098975050505050505050565b60015f80516020614d8983398151915255565b5f808251602714612a7f5760405162461bcd60e51b81526004016105a0906149bd565b5f805b6002811015612ace57612a96816001614983565b612aa19060086146b1565b61ffff16858281518110612ab757612ab7614996565b016020015160f81c901b9190911790600101612a82565b5061ffff811615612af15760405162461bcd60e51b81526004016105a090614a06565b5f805b6004811015612b4c57612b08816003614983565b612b139060086146b1565b63ffffffff1686612b258360026149aa565b81518110612b3557612b35614996565b016020015160f81c901b9190911790600101612af4565b5063ffffffff8116600214612b735760405162461bcd60e51b81526004016105a090614a49565b5f805b6020811015612bc857612b8a81601f614983565b612b959060086146b1565b87612ba18360066149aa565b81518110612bb157612bb1614996565b016020015160f81c901b9190911790600101612b76565b505f86602681518110612bdd57612bdd614996565b016020015191976001600160f81b03199092161515965090945050505050565b5f612c066127f7565b5f80516020614d298339815191525f612c1e84610b79565b90505f612c2a87611635565b9050600281516005811115612c4157612c4161447a565b14612ca05760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a2076616c696461746f72206e6044820152686f742061637469766560b81b60648201526084016105a0565b612ca982613aae565b5f828260a00151612cba91906146c8565b60048501546060840151919250612cdc916001600160401b0390911690614b5b565b6001600160401b0316816001600160401b03161115612d5b5760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a206d6178696d756d2076616c6044820152741a59185d1bdc881dd95a59da1d081c995858da1959605a1b60648201526084016105a0565b612d658882611a3f565b5f612d6f896119b0565b90505f8982604051602001612d9b92919091825260c01b6001600160c01b031916602082015260280190565b6040516020818303038152906040528051906020012090505f6005600160991b016001600160a01b031663ee5b48eb612dd58d8688611a87565b6040518263ffffffff1660e01b8152600401612df191906145be565b6020604051808303815f875af1158015612e0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e3191906145f0565b60408051610100810190915290915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905260a0850181905290881660c085015260e090930183905285835260068b01909152902081518154829060ff19166001836004811115612eb957612eb961447a565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002860180546080808a015160a08b015160c08c01516001600160401b039687166001600160801b031990951694909417600160401b92871692909202919091176001600160801b0316600160801b918616919091026001600160c01b031617600160c01b928516929092029190911790915560e0909701516003909601805467ffffffffffffffff191696821696909617909555815189861681528a861694810194909452938b1690830152918101849052908c16918d9185917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a45095505050505050611c9f60015f80516020614d8983398151915255565b5f808251602e1461301b5760405162461bcd60e51b81526004016105a0906149bd565b5f805b600281101561306a57613032816001614983565b61303d9060086146b1565b61ffff1685828151811061305357613053614996565b016020015160f81c901b919091179060010161301e565b5061ffff81161561308d5760405162461bcd60e51b81526004016105a090614a06565b5f805b60048110156130e8576130a4816003614983565b6130af9060086146b1565b63ffffffff16866130c18360026149aa565b815181106130d1576130d1614996565b016020015160f81c901b9190911790600101613090565b5063ffffffff811660041461310f5760405162461bcd60e51b81526004016105a090614a49565b5f805b60208110156131645761312681601f614983565b6131319060086146b1565b8761313d8360066149aa565b8151811061314d5761314d614996565b016020015160f81c901b9190911790600101613112565b505f805b60088110156131c35761317c816007614983565b6131879060086146b1565b6001600160401b03168861319c8360266149aa565b815181106131ac576131ac614996565b016020015160f81c901b9190911790600101613168565b5090969095509350505050565b604080516080810182527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb03548082527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb045460208301527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0554928201929092527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06546001600160401b031660608201525f80516020614d698339815191529142919015806132b65750600283015481516132b2916001600160401b0316906149aa565b8210155b156132dc576001600160401b0385166060820152818152604081015160208201526132fb565b84816060018181516132ee91906146c8565b6001600160401b03169052505b606081015161330b906064614b5b565b602082015160028501546001600160401b0392909216916133369190600160401b900460ff166146b1565b101561339a5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016105a0565b83156133c357846001600160401b0316816040018181516133bb91906149aa565b9052506133e2565b846001600160401b0316816040018181516133de9190614983565b9052505b805160038401556020810151600484015560408101516005840155606001516006909201805467ffffffffffffffff19166001600160401b0390931692909217909155505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661347357604051631afcd79f60e31b815260040160405180910390fd5b565b61347d61342a565b61348681613ab9565b611a3c608082013560a08301356134a360e0850160c08601614406565b6134b4610100860160e08701614a9f565b61ffff166134ca61012087016101008801614b86565b6134dc61014088016101208901614ba6565b613ada565b804710156135045760405163cd78605960e01b81523060048201526024016105a0565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461354d576040519150601f19603f3d011682016040523d82523d5f602084013e613552565b606091505b505090508061162457604051630a12f52160e11b815260040160405180910390fd5b5f5f80516020614d69833981519152426135946040860160208701614406565b6001600160401b0316116136065760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016105a0565b6136166040850160208601614406565b6001600160401b031661362c6202a300426149aa565b1161369f5760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016105a0565b83356136f75760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016105a0565b83355f908152600982016020526040902054156137675760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016105a0565b6137746040850185614bc1565b90506030146137db5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016105a0565b6137e483613aae565b5f8061387e6040518060a0016040528085600101548152602001885f01358152602001876001600160401b031681526020018860200160208101906138299190614406565b6001600160401b0316815260200161384460408a018a614bc1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250613d1e565b5f8281526007860160205260409020919350915061389c8282614c4e565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906138c99085906004016145be565b6020604051808303815f875af11580156138e5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061390991906145f0565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff1916600183600581111561398b5761398b61447a565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b91613a8091908e01908e01614406565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b611a3c8160016131d0565b613ac161342a565b613ac96140c3565b613ad16140d3565b611a3c816140db565b613ae261342a565b5f80516020614d2983398151915283613b4e5760405162461bcd60e51b815260206004820152602860248201527f506f5356616c696461746f724d616e616765723a207a65726f2064656c65676160448201526774696f6e2066656560c01b60648201526084016105a0565b612710841115613b705760405162461bcd60e51b81526004016105a090614aba565b85871115613bd85760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642073746160448201526e6b6520616d6f756e742072616e676560881b60648201526084016105a0565b5f8360ff1611613c455760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a207a65726f206d6178696d75604482015271369039ba30b5b29036bab63a34b83634b2b960711b60648201526084016105a0565b600a60ff84161115613cb75760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d617860448201527434b6bab69039ba30b5b29036bab63a34b83634b2b960591b60648201526084016105a0565b95865560018601949094556002850180546001600160401b0390941667ffffffffffffffff19909416939093179092556003840155600490920180546001600160a01b03909216600160401b026001600160e01b031990921660ff90931692909217179055565b5f6060826080015151603014613d885760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016105a0565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613dff57613dbf816001614983565b613dca9060086146b1565b5081515f90839083908110613de157613de1614996565b60200101906001600160f81b03191690815f1a905350600101613dab565b505f5b6004811015613e5d57613e16816003614983565b613e219060086146b1565b505f82613e2f8360026149aa565b81518110613e3f57613e3f614996565b60200101906001600160f81b03191690815f1a905350600101613e02565b505f5b6020811015613eba5784518160208110613e7c57613e7c614996565b1a60f81b82613e8c8360066149aa565b81518110613e9c57613e9c614996565b60200101906001600160f81b03191690815f1a905350600101613e60565b505f5b6020811015613f1a5784602001518160208110613edc57613edc614996565b1a60f81b82613eec8360266149aa565b81518110613efc57613efc614996565b60200101906001600160f81b03191690815f1a905350600101613ebd565b505f5b6008811015613f8e57613f31816007614983565b613f3c9060086146b1565b60ff1685604001516001600160401b0316901c60f81b82826046613f6091906149aa565b81518110613f7057613f70614996565b60200101906001600160f81b03191690815f1a905350600101613f1d565b505f5b6030811015613ff95784608001518181518110613fb057613fb0614996565b01602001516001600160f81b03191682613fcb83604e6149aa565b81518110613fdb57613fdb614996565b60200101906001600160f81b03191690815f1a905350600101613f91565b505f5b600881101561406b57614010816007614983565b61401b9060086146b1565b60608601516001600160401b0390811691161c60f81b8261403d83607e6149aa565b8151811061404d5761404d614996565b60200101906001600160f81b03191690815f1a905350600101613ffc565b5060028160405161407c9190614d0d565b602060405180830381855afa158015614097573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906140ba91906145f0565b94909350915050565b6140cb61342a565b613473614288565b61347361342a565b6140e361342a565b80355f80516020614d6983398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0155601461412f6080840160608501614b86565b60ff16111561419c5760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016105a0565b5f6141ad6080840160608501614b86565b60ff16116142155760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016105a0565b6142256080830160608401614b86565b60028201805460ff92909216600160401b0260ff60401b199092169190911790556142566060830160408401614406565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b612a4961342a565b50805461429c906146e8565b5f825580601f106142ab575050565b601f0160209004905f5260205f2090810190611a3c919061430b565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561431f575f815560010161430c565b5090565b8015158114611a3c575f80fd5b803563ffffffff81168114614343575f80fd5b919050565b5f805f6060848603121561435a575f80fd5b83359250602084013561436c81614323565b915061437a60408501614330565b90509250925092565b5f60208284031215614393575f80fd5b5035919050565b5f61014082840312156143ab575f80fd5b50919050565b5f602082840312156143c1575f80fd5b611c9f82614330565b5f80604083850312156143db575f80fd5b6143e483614330565b946020939093013593505050565b6001600160401b0381168114611a3c575f80fd5b5f60208284031215614416575f80fd5b8135611c9f816143f2565b5f808284036060811215614433575f80fd5b83356001600160401b03811115614448575f80fd5b840160608187031215614459575f80fd5b92506040601f198201121561446c575f80fd5b506020830190509250929050565b634e487b7160e01b5f52602160045260245ffd5b8151610100820190600681106144b257634e487b7160e01b5f52602160045260245ffd5b808352506020830151602083015260408301516144da60408401826001600160a01b03169052565b5060608301516144f560608401826001600160401b03169052565b50608083015161451060808401826001600160401b03169052565b5060a083015161452b60a08401826001600160401b03169052565b5060c083015161454660c08401826001600160401b03169052565b5060e083015161456160e08401826001600160401b03169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0382811682821603908082111561456157614561614568565b5f5b838110156145b657818101518382015260200161459e565b50505f910152565b602081525f82518060208401526145dc81604085016020870161459c565b601f01601f19169190910160400192915050565b5f60208284031215614600575f80fd5b5051919050565b5f8261462157634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b8082028115828204841417610b8957610b89614568565b6001600160401b0381811683821601908082111561456157614561614568565b600181811c908216806146fc57607f821691505b6020821081036143ab57634e487b7160e01b5f52602260045260245ffd5b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f8454614773816146e8565b806020870152604060018084165f811461479457600181146147b0576147dd565b60ff19851660408a0152604084151560051b8a010195506147dd565b895f5260205f205f5b858110156147d45781548b82018601529083019088016147b9565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614821576148216147eb565b60405290565b604051601f8201601f191681016001600160401b038111828210171561484f5761484f6147eb565b604052919050565b6001600160a01b0381168114611a3c575f80fd5b805161434381614323565b5f8060408385031215614887575f80fd5b82516001600160401b038082111561489d575f80fd5b90840190606082870312156148b0575f80fd5b6148b86147ff565b825181526020808401516148cb81614857565b828201526040840151838111156148e0575f80fd5b80850194505087601f8501126148f4575f80fd5b835183811115614906576149066147eb565b614918601f8201601f19168301614827565b9350808452888282870101111561492d575f80fd5b61493c8183860184880161459c565b5082604083015281955061495181880161486b565b9450505050509250929050565b5f6001600160401b0380831681810361497957614979614568565b6001019392505050565b81810381811115610b8957610b89614568565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610b8957610b89614568565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b61ffff81168114611a3c575f80fd5b5f60208284031215614aaf575f80fd5b8135611c9f81614a90565b6020808252602b908201527f506f5356616c696461746f724d616e616765723a20696e76616c69642064656c60408201526a65676174696f6e2066656560a81b606082015260800190565b8135614b1081614a90565b61ffff8116905081548161ffff1982161783556020840135614b31816143f2565b69ffffffffffffffff00008160101b168369ffffffffffffffffffff198416171784555050505050565b6001600160401b03818116838216028082169190828114614b7e57614b7e614568565b505092915050565b5f60208284031215614b96575f80fd5b813560ff81168114611c9f575f80fd5b5f60208284031215614bb6575f80fd5b8135611c9f81614857565b5f808335601e19843603018112614bd6575f80fd5b8301803591506001600160401b03821115614bef575f80fd5b602001915036819003821315614c03575f80fd5b9250929050565b601f82111561162457805f5260205f20601f840160051c81016020851015614c2f5750805b601f840160051c820191505b81811015610e90575f8155600101614c3b565b81516001600160401b03811115614c6757614c676147eb565b614c7b81614c7584546146e8565b84614c0a565b602080601f831160018114614cae575f8415614c975750858301515b5f19600386901b1c1916600185901b178555614d05565b5f85815260208120601f198616915b82811015614cdc57888601518255948401946001909101908401614cbd565b5085821015614cf957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251614d1e81846020870161459c565b919091019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00506f5356616c696461746f724d616e616765723a2064656c65676174696f6e20e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", + 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: "0x608060405234801561000f575f80fd5b50604051614f41380380614f4183398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b614df48061014d5f395ff3fe608060405260043610610131575f3560e01c806376f78621116100a8578063ba3a4b971161006d578063ba3a4b9714610394578063bee0a03f146103b3578063c599e24f146103d2578063c974d1b6146103e5578063d5f20ff6146103f9578063df93d8de14610425575f80fd5b806376f78621146102f257806380a8ad941461031157806398f3e2b414610324578063a3a65e4814610343578063b771b3bc14610362575f80fd5b80632e2194d8116100f95780632e2194d81461021757806335455ded1461024e578063467ef06f146102765780635297fae61461029557806362065856146102b457806366435abf146102d3575f80fd5b80630118acc4146101355780630322ed98146101565780630cdd098514610175578063151d30d1146101d25780631f7a9d8f146101f8575b5f80fd5b348015610140575f80fd5b5061015461014f366004614367565b61043b565b005b348015610161575f80fd5b506101546101703660046143a2565b6108eb565b348015610180575f80fd5b506101bf61018f3660046143a2565b5f9081527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09602052604090205490565b6040519081526020015b60405180910390f35b3480156101dd575f80fd5b506101e6600a81565b60405160ff90911681526020016101c9565b348015610203575f80fd5b506101546102123660046143b9565b610abb565b348015610222575f80fd5b506102366102313660046143a2565b610b98565b6040516001600160401b0390911681526020016101c9565b348015610259575f80fd5b5061026361271081565b60405161ffff90911681526020016101c9565b348015610281575f80fd5b506101546102903660046143d0565b610bae565b3480156102a0575f80fd5b506101546102af3660046143e9565b610bd9565b3480156102bf575f80fd5b506101bf6102ce366004614425565b610da9565b3480156102de575f80fd5b506102366102ed3660046143a2565b610dc2565b3480156102fd575f80fd5b5061015461030c366004614367565b610dd6565b6101bf61031f366004614440565b610eb6565b34801561032f575f80fd5b5061015461033e3660046143e9565b610ee2565b34801561034e575f80fd5b5061015461035d3660046143d0565b6110f1565b34801561036d575f80fd5b5061037c6005600160991b0181565b6040516001600160a01b0390911681526020016101c9565b34801561039f575f80fd5b506101546103ae3660046143a2565b6112ae565b3480156103be575f80fd5b506101546103cd3660046143a2565b611534565b6101bf6103e03660046143a2565b611648565b3480156103f0575f80fd5b506101e6601481565b348015610404575f80fd5b506104186104133660046143a2565b611654565b6040516101c991906144ad565b348015610430575f80fd5b506102366202a30081565b5f8381527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408120600101545f80516020614d4883398151915291841561048d5761048a8285611733565b90505b5f868152600684016020526040808220815161010081019092528054829060ff1660048111156104bf576104bf614499565b60048111156104d0576104d0614499565b8152815461010090046001600160a01b031660208201526001820154604082015260028201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b909104811660c083015260039092015490911660e09091015290505f61054c84611654565b905060028251600481111561056357610563614499565b146105b55760405162461bcd60e51b815260206004820152602a60248201525f80516020614d688339815191526044820152696e6f742061637469766560b01b60648201526084015b60405180910390fd5b60208201516001600160a01b0316331461061a5760405162461bcd60e51b815260206004820152603360248201525f80516020614d688339815191526044820152723737ba1037bbb732b210313c9039b2b73232b960691b60648201526084016105ac565b600382528051600290600581111561063457610634614499565b036107715761064682606001516119cf565b61064f846119dc565b6001600160401b0390811660e0840152421660a0808401919091526060830151908201515f9161067e9161459b565b905061068a8582611a5e565b5f6005600160991b016001600160a01b031663ee5b48eb6106b0888760e0015186611aa6565b6040518263ffffffff1660e01b81526004016106cc91906145dd565b6020604051808303815f875af11580156106e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070c919061460f565b90508360e001516001600160401b0316867f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df84846040516107629291906001600160401b03929092168252602082015260400190565b60405180910390a35050610794565b60808101516001600160401b0390811660e0808501919091528201511660a08301525b5f88815260068601602052604090208251815484929190829060ff191660018360048111156107c5576107c5614499565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b031990911617815560408083015160018301556060830151600283018054608086015160a08088015160c08901516001600160401b03908116600160c01b026001600160c01b03928216600160801b02929092166001600160801b03948216600160401b026001600160801b0319909616978216979097179490941792909216949094171790915560e090940151600390930180549390941667ffffffffffffffff199390931692909217909255830151905185918a917f5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69916108d9916001600160401b0391909116815260200190565b60405180910390a35050505050505050565b5f8181525f80516020614dc883398151915260205260408082208151610100810190925280545f80516020614d8883398151915293929190829060ff16600581111561093957610939614499565b600581111561094a5761094a614499565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e090910152909150815160058111156109cf576109cf614499565b14610a345760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a2056616c696461746f72206e6f742060448201526e1c195b991a5b99c81c995b5bdd985b608a1b60648201526084016105ac565b6005600160991b016001600160a01b031663ee5b48eb610a598584608001515f611aa6565b6040518263ffffffff1660e01b8152600401610a7591906145dd565b6020604051808303815f875af1158015610a91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab5919061460f565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610b04575080546001600160401b03808416911610155b15610b225760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610b4c83611cc5565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f610ba864e8d4a5100083614626565b92915050565b5f610bb882611cd6565b9050610bd581606001516001600160401b03168260400151612049565b5050565b5f80516020614d488339815191525f610bf18461205c565b90505f80610c02836040015161223d565b50915091505f610c1183611654565b9050816001600160401b031681608001516001600160401b03161015610c495760405162461bcd60e51b81526004016105ac90614645565b5f8681526006860160205260409020600201546001600160401b03808416600160c01b909204161115610c8e5760405162461bcd60e51b81526004016105ac90614687565b60015f87815260068701602052604090205460ff166004811115610cb457610cb4614499565b14610d1d5760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a2064656c65676174696f6e4960448201527211081b9bdd081c195b991a5b99c81859191959606a1b60648201526084016105ac565b5f868152600686016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160401b0267ffffffffffffffff60401b19909316929092179092559251928352841691859189917f245fc69b36e168426e0306fc8d8300661b9af297c7958820dbf804f9f63e7064910160405180910390a450505050505050565b5f610ba86001600160401b03831664e8d4a510006146d0565b5f610dcc82611654565b60a0015192915050565b5f80516020614d488339815191525f610dee85611654565b5f86815260058401602052604090205460c0820151919250610e2091620100009091046001600160401b0316906146e7565b6001600160401b0316421015610e945760405162461bcd60e51b815260206004820152603360248201527f506f5356616c696461746f724d616e616765723a206d696e696d756d207374616044820152721ad948191d5c985d1a5bdb881b9bdd081b595d606a1b60648201526084016105ac565b8315610ea657610ea48584611733565b505b610eaf85612478565b5050505050565b5f610ebf612816565b610eca83833461284d565b9050610ba860015f80516020614da883398151915255565b5f80516020614d488339815191525f610efa8461205c565b90505f80610f0b836040015161223d565b50915091505f610f1a83611654565b9050816001600160401b031681608001516001600160401b03161015610f525760405162461bcd60e51b81526004016105ac90614645565b5f8681526006860160205260409020600301546001600160401b0380841691161115610f905760405162461bcd60e51b81526004016105ac90614687565b60035f87815260068701602052604090205460ff166004811115610fb657610fb6614499565b1461100a5760405162461bcd60e51b815260206004820152603160248201525f80516020614d688339815191526044820152701b9bdd081c195b991a5b99c81859191959607a1b60648201526084016105ac565b5f868152600686016020908152604091829020805460ff19166004908117808355845161010080820187529281529190046001600160a01b031692810183905260018201549381019390935260028101546001600160401b0380821660608601819052600160401b830482166080870152600160801b8304821660a0870152600160c01b909204811660c086015260039092015490911660e08401526110af91612049565b826001600160401b031684887f52e9b1eaef84d46cda83ccb9d427267bc4d04f756b4a32c8302722b79e5c65ab60405160405180910390a45050505050505050565b5f80516020614d888339815191525f6111098361205c565b90505f8061111a8360400151612a7b565b915091508061117c5760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a20526567697374726174696f6e206e6044820152671bdd081d985b1a5960c21b60648201526084016105ac565b5f8281526007850160205260408120805461119690614707565b90501180156111c8575060015f83815260088601602052604090205460ff1660058111156111c6576111c6614499565b145b6111e45760405162461bcd60e51b81526004016105ac90614739565b5f82815260078501602052604081206111fc916142af565b5f8281526008850160208181526040808420805460ff191660021781556003810180546001600160401b0342818116600160801b0267ffffffffffffffff60801b19909316929092178355600190930154875260098b0185528387208990559588905293835292548151600160401b90910490931683529082019290925283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a25050505050565b5f8181527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0660205260408082208151610100810190925280545f80516020614d4883398151915293929190829060ff16600481111561130f5761130f614499565b600481111561132057611320614499565b8152815461010090046001600160a01b03166020820152600180830154604083015260028301546001600160401b038082166060850152600160401b820481166080850152600160801b8204811660a0850152600160c01b909104811660c084015260039093015490921660e090910152909150815160048111156113a7576113a7614499565b14806113c557506003815160048111156113c3576113c3614499565b145b6114195760405162461bcd60e51b815260206004820152603260248201525f80516020614d68833981519152604482015271737461747573206e6f742070656e64696e6760701b60648201526084016105ac565b5f6114278260400151611654565b905080608001516001600160401b03165f036114ab5760405162461bcd60e51b815260206004820152603f60248201527f506f5356616c696461746f724d616e616765723a20636f756c64206e6f74206660448201527f696e642076616c696461746f7220666f722064656c65676174696f6e2049440060648201526084016105ac565b6005600160991b016001600160a01b031663ee5b48eb6114d8846040015184608001518560a00151611aa6565b6040518263ffffffff1660e01b81526004016114f491906145dd565b6020604051808303815f875af1158015611510573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eaf919061460f565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb076020526040812080545f80516020614d8883398151915292919061157c90614707565b90501180156115ae575060015f83815260088301602052604090205460ff1660058111156115ac576115ac614499565b145b6115ca5760405162461bcd60e51b81526004016105ac90614739565b5f82815260078201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916116039190600401614780565b6020604051808303815f875af115801561161f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611643919061460f565b505050565b5f610ba8823334612c1c565b61165c6142e6565b5f8281525f80516020614dc88339815191526020526040908190208151610100810190925280545f80516020614d88833981519152929190829060ff1660058111156116aa576116aa614499565b60058111156116bb576116bb614499565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003909201548083166080830152600160401b8104831660a0830152600160801b8104831660c0830152600160c01b900490911660e0909101529392505050565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561177e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526117a59190810190614895565b91509150806118085760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642077617260448201526870206d65737361676560b81b60648201526084016105ac565b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561184b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061186f919061460f565b8251146118d35760405162461bcd60e51b815260206004820152602c60248201527f506f5356616c696461746f724d616e616765723a20696e76616c696420736f7560448201526b1c98d94818da185a5b88125160a21b60648201526084016105ac565b60208201516001600160a01b0316156119495760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206f726960448201527167696e2073656e646572206164647265737360701b60648201526084016105ac565b5f806119588460400151613017565b915091508187146119c55760405162461bcd60e51b815260206004820152603160248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964207570746044820152701a5b59481d985b1a59185d1a5bdb881251607a1b60648201526084016105ac565b9695505050505050565b6119d9815f6131ef565b50565b5f8181525f80516020614dc88339815191526020526040812060030180545f80516020614d88833981519152916001600160401b039091169083611a1f8361497d565b82546101009290920a6001600160401b038181021990931691831602179091555f94855260089290920160205250604090922060030154909116919050565b5f9182525f80516020614dc8833981519152602052604090912060030180546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b60408051603680825260608281019093525f91906020820181803683370190505090505f5b6002811015611b1f57611adf8160016149a2565b611aea9060086146d0565b5081515f90839083908110611b0157611b016149b5565b60200101906001600160f81b03191690815f1a905350600101611acb565b505f5b6004811015611b8257611b368160036149a2565b611b419060086146d0565b6001901c60f81b82611b548360026149c9565b81518110611b6457611b646149b5565b60200101906001600160f81b03191690815f1a905350600101611b22565b505f5b6020811015611be457611b9981601f6149a2565b611ba49060086146d0565b86901c60f81b82611bb68360066149c9565b81518110611bc657611bc66149b5565b60200101906001600160f81b03191690815f1a905350600101611b85565b505f5b6008811015611c4f57611bfb8160076149a2565b611c069060086146d0565b6001600160401b038616901c60f81b82611c218360266149c9565b81518110611c3157611c316149b5565b60200101906001600160f81b03191690815f1a905350600101611be7565b505f5b6008811015611cba57611c668160076149a2565b611c719060086146d0565b6001600160401b038516901c60f81b82611c8c83602e6149c9565b81518110611c9c57611c9c6149b5565b60200101906001600160f81b03191690815f1a905350600101611c52565b5090505b9392505050565b611ccd613449565b6119d981613494565b611cde6142e6565b5f80516020614d888339815191525f611cf68461205c565b90505f80611d078360400151612a7b565b915091508015611d6c5760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20736044820152691d1a5b1b081d985b1a5960b21b60648201526084016105ac565b5f828152600885016020526040808220815161010081019092528054829060ff166005811115611d9e57611d9e614499565b6005811115611daf57611daf614499565b81526001820154602082015260028201546001600160a01b03811660408301526001600160401b03600160a01b909104811660608301526003928301548082166080840152600160401b8104821660a0840152600160801b8104821660c0840152600160c01b90041660e0909101529091505f9082516005811115611e3657611e36614499565b1480611e545750600182516005811115611e5257611e52614499565b145b611eb35760405162461bcd60e51b815260206004820152602a60248201527f56616c696461746f724d616e616765723a20696e76616c69642076616c696461604482015269746f722073746174757360b01b60648201526084016105ac565b600382516005811115611ec857611ec8614499565b03611ed557506004611ed9565b5060055b6020808301515f90815260098801909152604081205581816005811115611f0257611f02614499565b90816005811115611f1557611f15614499565b9052505f84815260088701602052604090208251815484929190829060ff19166001836005811115611f4957611f49614499565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790558151600581111561201457612014614499565b60405185907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a3509695505050505050565b610bd56001600160a01b03821683613500565b60408051606080820183525f8083526020830181905292820152905f80516020614d888339815191526040516306f8253560e41b815263ffffffff851660048201529091505f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156120d1573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120f89190810190614895565b915091508061215f5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20496e76696e76616c6964616c696460448201526c2077617270206d65737361676560981b60648201526084016105ac565b82548251146121c25760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f724d616e616765723a20696e76616c696420736f757263656044820152680818da185a5b88125160ba1b60648201526084016105ac565b60208201516001600160a01b0316156122355760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a20696e76616c6964206f726967696e60448201526e2073656e646572206164647265737360881b60648201526084016105ac565b509392505050565b5f805f83516036146122615760405162461bcd60e51b81526004016105ac906149dc565b5f805b60028110156122b0576122788160016149a2565b6122839060086146d0565b61ffff16868281518110612299576122996149b5565b016020015160f81c901b9190911790600101612264565b5061ffff8116156122d35760405162461bcd60e51b81526004016105ac90614a25565b5f805b600481101561232e576122ea8160036149a2565b6122f59060086146d0565b63ffffffff16876123078360026149c9565b81518110612317576123176149b5565b016020015160f81c901b91909117906001016122d6565b5063ffffffff81166003146123555760405162461bcd60e51b81526004016105ac90614a68565b5f805b60208110156123aa5761236c81601f6149a2565b6123779060086146d0565b886123838360066149c9565b81518110612393576123936149b5565b016020015160f81c901b9190911790600101612358565b505f805b6008811015612409576123c28160076149a2565b6123cd9060086146d0565b6001600160401b0316896123e28360266149c9565b815181106123f2576123f26149b5565b016020015160f81c901b91909117906001016123ae565b505f805b6008811015612468576124218160076149a2565b61242c9060086146d0565b6001600160401b03168a61244183602e6149c9565b81518110612451576124516149b5565b016020015160f81c901b919091179060010161240d565b5091989097509095509350505050565b5f8181525f80516020614dc883398151915260205260408082208151610100810190925280545f80516020614d8883398151915293929190829060ff1660058111156124c6576124c6614499565b60058111156124d7576124d7614499565b8152600182015460208201526002808301546001600160a01b03811660408401526001600160401b03600160a01b909104811660608401526003909301548084166080840152600160401b8104841660a0840152600160801b8104841660c0840152600160c01b900490921660e0909101529091508151600581111561255f5761255f614499565b146125bb5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f724d616e616765723a2076616c696461746f72206e6f742060448201526561637469766560d01b60648201526084016105ac565b60408101516001600160a01b0316336001600160a01b0316146126355760405162461bcd60e51b815260206004820152602c60248201527f56616c696461746f724d616e616765723a2073656e646572206e6f742076616c60448201526b34b230ba37b91037bbb732b960a11b60648201526084016105ac565b6126428160a001516119cf565b60038152426001600160401b031660e08201525f83815260088301602052604090208151815483929190829060ff1916600183600581111561268657612686614499565b021790555060208201516001820155604082015160028201805460608501516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808301516003909201805460a085015160c086015160e0909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03918516600160401b026001600160801b031990931695909416949094171792909216179190911790555f6127528461274c816119dc565b5f611aa6565b60405163ee5b48eb60e01b81529091505f906005600160991b019063ee5b48eb906127819085906004016145dd565b6020604051808303815f875af115801561279d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127c1919061460f565b60a0840151604080516001600160401b039092168252426020830152919250829187917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a35050505050565b5f80516020614da883398151915280546001190161284757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020614d48833981519152906001600160401b03166128996040860160208701614425565b6001600160401b031610156129085760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d696e60448201526e1039ba30b5b290323ab930ba34b7b760891b60648201526084016105ac565b600381015461291a6020860186614abe565b61ffff161015801561293e57506127106129376020860186614abe565b61ffff1611155b61295a5760405162461bcd60e51b81526004016105ac90614ad9565b80548310156129bd5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152687420746f6f206c6f7760b81b60648201526084016105ac565b8060010154831115612a245760405162461bcd60e51b815260206004820152602a60248201527f506f5356616c696461746f724d616e616765723a207374616b6520616d6f756e6044820152690e840e8dede40d0d2ced60b31b60648201526084016105ac565b825f612a2f82610b98565b90505f612a3c8883613593565b5f81815260058601602052604090209091508790612a5a8282614b24565b509098975050505050505050565b60015f80516020614da883398151915255565b5f808251602714612a9e5760405162461bcd60e51b81526004016105ac906149dc565b5f805b6002811015612aed57612ab58160016149a2565b612ac09060086146d0565b61ffff16858281518110612ad657612ad66149b5565b016020015160f81c901b9190911790600101612aa1565b5061ffff811615612b105760405162461bcd60e51b81526004016105ac90614a25565b5f805b6004811015612b6b57612b278160036149a2565b612b329060086146d0565b63ffffffff1686612b448360026149c9565b81518110612b5457612b546149b5565b016020015160f81c901b9190911790600101612b13565b5063ffffffff8116600214612b925760405162461bcd60e51b81526004016105ac90614a68565b5f805b6020811015612be757612ba981601f6149a2565b612bb49060086146d0565b87612bc08360066149c9565b81518110612bd057612bd06149b5565b016020015160f81c901b9190911790600101612b95565b505f86602681518110612bfc57612bfc6149b5565b016020015191976001600160f81b03199092161515965090945050505050565b5f612c25612816565b5f80516020614d488339815191525f612c3d84610b98565b90505f612c4987611654565b9050600281516005811115612c6057612c60614499565b14612cbf5760405162461bcd60e51b815260206004820152602960248201527f506f5356616c696461746f724d616e616765723a2076616c696461746f72206e6044820152686f742061637469766560b81b60648201526084016105ac565b612cc882613acd565b5f828260a00151612cd991906146e7565b60048501546060840151919250612cfb916001600160401b0390911690614b7a565b6001600160401b0316816001600160401b03161115612d7a5760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a206d6178696d756d2076616c6044820152741a59185d1bdc881dd95a59da1d081c995858da1959605a1b60648201526084016105ac565b612d848882611a5e565b5f612d8e896119dc565b90505f8982604051602001612dba92919091825260c01b6001600160c01b031916602082015260280190565b6040516020818303038152906040528051906020012090505f6005600160991b016001600160a01b031663ee5b48eb612df48d8688611aa6565b6040518263ffffffff1660e01b8152600401612e1091906145dd565b6020604051808303815f875af1158015612e2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e50919061460f565b60408051610100810190915290915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905260a0850181905290881660c085015260e090930183905285835260068b01909152902081518154829060ff19166001836004811115612ed857612ed8614499565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002860180546080808a015160a08b015160c08c01516001600160401b039687166001600160801b031990951694909417600160401b92871692909202919091176001600160801b0316600160801b918616919091026001600160c01b031617600160c01b928516929092029190911790915560e0909701516003909601805467ffffffffffffffff191696821696909617909555815189861681528a861694810194909452938b1690830152918101849052908c16918d9185917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a45095505050505050611cbe60015f80516020614da883398151915255565b5f808251602e1461303a5760405162461bcd60e51b81526004016105ac906149dc565b5f805b6002811015613089576130518160016149a2565b61305c9060086146d0565b61ffff16858281518110613072576130726149b5565b016020015160f81c901b919091179060010161303d565b5061ffff8116156130ac5760405162461bcd60e51b81526004016105ac90614a25565b5f805b6004811015613107576130c38160036149a2565b6130ce9060086146d0565b63ffffffff16866130e08360026149c9565b815181106130f0576130f06149b5565b016020015160f81c901b91909117906001016130af565b5063ffffffff811660041461312e5760405162461bcd60e51b81526004016105ac90614a68565b5f805b60208110156131835761314581601f6149a2565b6131509060086146d0565b8761315c8360066149c9565b8151811061316c5761316c6149b5565b016020015160f81c901b9190911790600101613131565b505f805b60088110156131e25761319b8160076149a2565b6131a69060086146d0565b6001600160401b0316886131bb8360266149c9565b815181106131cb576131cb6149b5565b016020015160f81c901b9190911790600101613187565b5090969095509350505050565b604080516080810182527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb03548082527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb045460208301527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0554928201929092527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06546001600160401b031660608201525f80516020614d888339815191529142919015806132d55750600283015481516132d1916001600160401b0316906149c9565b8210155b156132fb576001600160401b03851660608201528181526040810151602082015261331a565b848160600181815161330d91906146e7565b6001600160401b03169052505b606081015161332a906064614b7a565b602082015160028501546001600160401b0392909216916133559190600160401b900460ff166146d0565b10156133b95760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e2060448201526c1c985d1948195e18d959591959609a1b60648201526084016105ac565b83156133e257846001600160401b0316816040018181516133da91906149c9565b905250613401565b846001600160401b0316816040018181516133fd91906149a2565b9052505b805160038401556020810151600484015560408101516005840155606001516006909201805467ffffffffffffffff19166001600160401b0390931692909217909155505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661349257604051631afcd79f60e31b815260040160405180910390fd5b565b61349c613449565b6134a581613ad8565b6119d9608082013560a08301356134c260e0850160c08601614425565b6134d3610100860160e08701614abe565b61ffff166134e961012087016101008801614ba5565b6134fb61014088016101208901614bc5565b613af9565b804710156135235760405163cd78605960e01b81523060048201526024016105ac565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461356c576040519150601f19603f3d011682016040523d82523d5f602084013e613571565b606091505b505090508061164357604051630a12f52160e11b815260040160405180910390fd5b5f5f80516020614d88833981519152426135b36040860160208701614425565b6001600160401b0316116136255760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e20656044820152727870697279206e6f7420696e2066757475726560681b60648201526084016105ac565b6136356040850160208601614425565b6001600160401b031661364b6202a300426149c9565b116136be5760405162461bcd60e51b815260206004820152603760248201527f56616c696461746f724d616e616765723a20726567697374726174696f6e206560448201527f787069727920746f6f2066617220696e2066757475726500000000000000000060648201526084016105ac565b83356137165760405162461bcd60e51b815260206004820152602160248201527f56616c696461746f724d616e616765723a20696e76616c6964206e6f646520496044820152601160fa1b60648201526084016105ac565b83355f908152600982016020526040902054156137865760405162461bcd60e51b815260206004820152602860248201527f56616c696461746f724d616e616765723a206e6f646520494420616c72656164604482015267792061637469766560c01b60648201526084016105ac565b6137936040850185614be0565b90506030146137fa5760405162461bcd60e51b815260206004820152602d60248201527f56616c696461746f724d616e616765723a20696e76616c696420626c7350756260448201526c0d8d2c696caf240d8cadccee8d609b1b60648201526084016105ac565b61380383613acd565b5f8061389d6040518060a0016040528085600101548152602001885f01358152602001876001600160401b031681526020018860200160208101906138489190614425565b6001600160401b0316815260200161386360408a018a614be0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250613d3d565b5f828152600786016020526040902091935091506138bb8282614c6d565b5060405163ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906138e89085906004016145dd565b6020604051808303815f875af1158015613904573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613928919061460f565b604080516101008101825260018152893560208201529192508101336001600160a01b031681526001600160401b03881660208083018290525f604080850182905260608501939093526080840181905260a0909301839052868352600888019052902081518154829060ff191660018360058111156139aa576139aa614499565b0217905550602082810151600183015560408084015160028401805460608701516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b039094169390931717905560808501516003909401805460a087015160c088015160e0909801518416600160c01b026001600160c01b03988516600160801b02989098166001600160801b03918516600160401b026001600160801b0319909316979094169690961717949094161793909317909155829189359186917f79b81620b81daf2c08cd5bb3dbb79e75d2d7a87f52171fde5aadc8c47823026e918b91613a9f91908e01908e01614425565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b6119d98160016131ef565b613ae0613449565b613ae86140e2565b613af06140f2565b6119d9816140fa565b613b01613449565b5f80516020614d4883398151915283613b6d5760405162461bcd60e51b815260206004820152602860248201527f506f5356616c696461746f724d616e616765723a207a65726f2064656c65676160448201526774696f6e2066656560c01b60648201526084016105ac565b612710841115613b8f5760405162461bcd60e51b81526004016105ac90614ad9565b85871115613bf75760405162461bcd60e51b815260206004820152602f60248201527f506f5356616c696461746f724d616e616765723a20696e76616c69642073746160448201526e6b6520616d6f756e742072616e676560881b60648201526084016105ac565b5f8360ff1611613c645760405162461bcd60e51b815260206004820152603260248201527f506f5356616c696461746f724d616e616765723a207a65726f206d6178696d75604482015271369039ba30b5b29036bab63a34b83634b2b960711b60648201526084016105ac565b600a60ff84161115613cd65760405162461bcd60e51b815260206004820152603560248201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206d617860448201527434b6bab69039ba30b5b29036bab63a34b83634b2b960591b60648201526084016105ac565b95865560018601949094556002850180546001600160401b0390941667ffffffffffffffff19909416939093179092556003840155600490920180546001600160a01b03909216600160401b026001600160e01b031990921660ff90931692909217179055565b5f6060826080015151603014613da75760405162461bcd60e51b815260206004820152602960248201527f5374616b696e674d657373616765733a20696e76616c6964207369676e6174756044820152680e4ca40d8cadccee8d60bb1b60648201526084016105ac565b60408051608680825260c082019092525f916020820181803683370190505090505f5b6002811015613e1e57613dde8160016149a2565b613de99060086146d0565b5081515f90839083908110613e0057613e006149b5565b60200101906001600160f81b03191690815f1a905350600101613dca565b505f5b6004811015613e7c57613e358160036149a2565b613e409060086146d0565b505f82613e4e8360026149c9565b81518110613e5e57613e5e6149b5565b60200101906001600160f81b03191690815f1a905350600101613e21565b505f5b6020811015613ed95784518160208110613e9b57613e9b6149b5565b1a60f81b82613eab8360066149c9565b81518110613ebb57613ebb6149b5565b60200101906001600160f81b03191690815f1a905350600101613e7f565b505f5b6020811015613f395784602001518160208110613efb57613efb6149b5565b1a60f81b82613f0b8360266149c9565b81518110613f1b57613f1b6149b5565b60200101906001600160f81b03191690815f1a905350600101613edc565b505f5b6008811015613fad57613f508160076149a2565b613f5b9060086146d0565b60ff1685604001516001600160401b0316901c60f81b82826046613f7f91906149c9565b81518110613f8f57613f8f6149b5565b60200101906001600160f81b03191690815f1a905350600101613f3c565b505f5b60308110156140185784608001518181518110613fcf57613fcf6149b5565b01602001516001600160f81b03191682613fea83604e6149c9565b81518110613ffa57613ffa6149b5565b60200101906001600160f81b03191690815f1a905350600101613fb0565b505f5b600881101561408a5761402f8160076149a2565b61403a9060086146d0565b60608601516001600160401b0390811691161c60f81b8261405c83607e6149c9565b8151811061406c5761406c6149b5565b60200101906001600160f81b03191690815f1a90535060010161401b565b5060028160405161409b9190614d2c565b602060405180830381855afa1580156140b6573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906140d9919061460f565b94909350915050565b6140ea613449565b6134926142a7565b613492613449565b614102613449565b80355f80516020614d8883398151915290815560208201357fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0155601461414e6080840160608501614ba5565b60ff1611156141bb5760405162461bcd60e51b815260206004820152603360248201527f56616c696461746f724d616e616765723a206d6178696d756d20636875726e206044820152720e0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b60648201526084016105ac565b5f6141cc6080840160608501614ba5565b60ff16116142345760405162461bcd60e51b815260206004820152602f60248201527f56616c696461746f724d616e616765723a207a65726f206d6178696d756d206360448201526e6875726e2070657263656e7461676560881b60648201526084016105ac565b6142446080830160608401614ba5565b60028201805460ff92909216600160401b0260ff60401b199092169190911790556142756060830160408401614425565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556402540be40060059091015550565b612a68613449565b5080546142bb90614707565b5f825580601f106142ca575050565b601f0160209004905f5260205f20908101906119d9919061432a565b604080516101008101909152805f81525f6020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561433e575f815560010161432b565b5090565b80151581146119d9575f80fd5b803563ffffffff81168114614362575f80fd5b919050565b5f805f60608486031215614379575f80fd5b83359250602084013561438b81614342565b91506143996040850161434f565b90509250925092565b5f602082840312156143b2575f80fd5b5035919050565b5f61014082840312156143ca575f80fd5b50919050565b5f602082840312156143e0575f80fd5b611cbe8261434f565b5f80604083850312156143fa575f80fd5b6144038361434f565b946020939093013593505050565b6001600160401b03811681146119d9575f80fd5b5f60208284031215614435575f80fd5b8135611cbe81614411565b5f808284036060811215614452575f80fd5b83356001600160401b03811115614467575f80fd5b840160608187031215614478575f80fd5b92506040601f198201121561448b575f80fd5b506020830190509250929050565b634e487b7160e01b5f52602160045260245ffd5b8151610100820190600681106144d157634e487b7160e01b5f52602160045260245ffd5b808352506020830151602083015260408301516144f960408401826001600160a01b03169052565b50606083015161451460608401826001600160401b03169052565b50608083015161452f60808401826001600160401b03169052565b5060a083015161454a60a08401826001600160401b03169052565b5060c083015161456560c08401826001600160401b03169052565b5060e083015161458060e08401826001600160401b03169052565b5092915050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0382811682821603908082111561458057614580614587565b5f5b838110156145d55781810151838201526020016145bd565b50505f910152565b602081525f82518060208401526145fb8160408501602087016145bb565b601f01601f19169190910160400192915050565b5f6020828403121561461f575f80fd5b5051919050565b5f8261464057634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526022908201527f506f5356616c696461746f724d616e616765723a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526029908201527f506f5356616c696461746f724d616e616765723a206e6f6e636520646f6573206040820152680dcdee840dac2e8c6d60bb1b606082015260800190565b8082028115828204841417610ba857610ba8614587565b6001600160401b0381811683821601908082111561458057614580614587565b600181811c9082168061471b57607f821691505b6020821081036143ca57634e487b7160e01b5f52602260045260245ffd5b60208082526027908201527f56616c696461746f724d616e616765723a20696e76616c69642076616c6964616040820152661d1a5bdb88125160ca1b606082015260800190565b5f60208083525f845461479281614707565b806020870152604060018084165f81146147b357600181146147cf576147fc565b60ff19851660408a0152604084151560051b8a010195506147fc565b895f5260205f205f5b858110156147f35781548b82018601529083019088016147d8565b8a016040019650505b509398975050505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156148405761484061480a565b60405290565b604051601f8201601f191681016001600160401b038111828210171561486e5761486e61480a565b604052919050565b6001600160a01b03811681146119d9575f80fd5b805161436281614342565b5f80604083850312156148a6575f80fd5b82516001600160401b03808211156148bc575f80fd5b90840190606082870312156148cf575f80fd5b6148d761481e565b825181526020808401516148ea81614876565b828201526040840151838111156148ff575f80fd5b80850194505087601f850112614913575f80fd5b8351838111156149255761492561480a565b614937601f8201601f19168301614846565b9350808452888282870101111561494c575f80fd5b61495b818386018488016145bb565b5082604083015281955061497081880161488a565b9450505050509250929050565b5f6001600160401b0380831681810361499857614998614587565b6001019392505050565b81810381811115610ba857610ba8614587565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610ba857610ba8614587565b60208082526029908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152680ceca40d8cadccee8d60bb1b606082015260800190565b60208082526023908201527f56616c696461746f724d657373616765733a20696e76616c696420636f64656360408201526208125160ea1b606082015260800190565b60208082526027908201527f56616c696461746f724d657373616765733a20696e76616c6964206d657373616040820152666765207479706560c81b606082015260800190565b61ffff811681146119d9575f80fd5b5f60208284031215614ace575f80fd5b8135611cbe81614aaf565b6020808252602b908201527f506f5356616c696461746f724d616e616765723a20696e76616c69642064656c60408201526a65676174696f6e2066656560a81b606082015260800190565b8135614b2f81614aaf565b61ffff8116905081548161ffff1982161783556020840135614b5081614411565b69ffffffffffffffff00008160101b168369ffffffffffffffffffff198416171784555050505050565b6001600160401b03818116838216028082169190828114614b9d57614b9d614587565b505092915050565b5f60208284031215614bb5575f80fd5b813560ff81168114611cbe575f80fd5b5f60208284031215614bd5575f80fd5b8135611cbe81614876565b5f808335601e19843603018112614bf5575f80fd5b8301803591506001600160401b03821115614c0e575f80fd5b602001915036819003821315614c22575f80fd5b9250929050565b601f82111561164357805f5260205f20601f840160051c81016020851015614c4e5750805b601f840160051c820191505b81811015610eaf575f8155600101614c5a565b81516001600160401b03811115614c8657614c8661480a565b614c9a81614c948454614707565b84614c29565b602080601f831160018114614ccd575f8415614cb65750858301515b5f19600386901b1c1916600185901b178555614d24565b5f85815260208120601f198616915b82811015614cfb57888601518255948401946001909101908401614cdc565b5085821015614d1857878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251614d3d8184602087016145bb565b919091019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00506f5356616c696461746f724d616e616765723a2064656c65676174696f6e20e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08a164736f6c6343000819000a", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -1368,19 +1368,16 @@ func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Close() // NativeTokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the NativeTokenStakingManager contract. type NativeTokenStakingManagerDelegatorRemovalInitialized struct { - DelegationID [32]byte - ValidationID [32]byte - Nonce uint64 - ValidatorWeight uint64 - EndTime *big.Int - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos + DelegationID [32]byte + ValidationID [32]byte + EndTime *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x5318ab4d7cdf77056db2db5b539a08fe7d1a63d6885ecee8236a0dbda2843b4e. +// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID, uint64 indexed nonce, uint64 validatorWeight, uint256 endTime, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, nonce []uint64) (*NativeTokenStakingManagerDelegatorRemovalInitializedIterator, error) { +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 endTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegatorRemovalInitializedIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1390,22 +1387,18 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDeleg for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule, nonceRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) if err != nil { return nil, err } return &NativeTokenStakingManagerDelegatorRemovalInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil } -// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x5318ab4d7cdf77056db2db5b539a08fe7d1a63d6885ecee8236a0dbda2843b4e. +// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID, uint64 indexed nonce, uint64 validatorWeight, uint256 endTime, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegatorRemovalInitialized, delegationID [][32]byte, validationID [][32]byte, nonce []uint64) (event.Subscription, error) { +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 endTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegatorRemovalInitialized, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1415,12 +1408,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule, nonceRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1452,9 +1441,9 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x5318ab4d7cdf77056db2db5b539a08fe7d1a63d6885ecee8236a0dbda2843b4e. +// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x5cd7ff518ea5cf079cc34b155d074410ae8c095910ebea921240641508658c69. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID, uint64 indexed nonce, uint64 validatorWeight, uint256 endTime, bytes32 setWeightMessageID) +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 endTime) func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegatorRemovalInitialized(log types.Log) (*NativeTokenStakingManagerDelegatorRemovalInitialized, error) { event := new(NativeTokenStakingManagerDelegatorRemovalInitialized) if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { @@ -2215,3 +2204,158 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValida event.Raw = log return event, nil } + +// NativeTokenStakingManagerValidatorWeightUpdateIterator is returned from FilterValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for ValidatorWeightUpdate events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerValidatorWeightUpdateIterator struct { + Event *NativeTokenStakingManagerValidatorWeightUpdate // 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 *NativeTokenStakingManagerValidatorWeightUpdateIterator) 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(NativeTokenStakingManagerValidatorWeightUpdate) + 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(NativeTokenStakingManagerValidatorWeightUpdate) + 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 *NativeTokenStakingManagerValidatorWeightUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *NativeTokenStakingManagerValidatorWeightUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// NativeTokenStakingManagerValidatorWeightUpdate represents a ValidatorWeightUpdate event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerValidatorWeightUpdate 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 (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte, nonce []uint64) (*NativeTokenStakingManagerValidatorWeightUpdateIterator, 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 := _NativeTokenStakingManager.contract.FilterLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) + if err != nil { + return nil, err + } + return &NativeTokenStakingManagerValidatorWeightUpdateIterator{contract: _NativeTokenStakingManager.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 (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerValidatorWeightUpdate, 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 := _NativeTokenStakingManager.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(NativeTokenStakingManagerValidatorWeightUpdate) + if err := _NativeTokenStakingManager.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 (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValidatorWeightUpdate(log types.Log) (*NativeTokenStakingManagerValidatorWeightUpdate, error) { + event := new(NativeTokenStakingManagerValidatorWeightUpdate) + if err := _NativeTokenStakingManager.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 d339f6a68..4a8d8d41d 100644 --- a/contracts/staking/PoSValidatorManager.sol +++ b/contracts/staking/PoSValidatorManager.sol @@ -337,6 +337,7 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager // Ensure the delegator is active Delegator memory delegator = $._delegatorStakes[delegationID]; + Validator memory validator = getValidator(validationID); require( delegator.status == DelegatorStatus.Active, "PoSValidatorManager: delegation not active" ); @@ -344,45 +345,49 @@ abstract contract PoSValidatorManager is IPoSValidatorManager, ValidatorManager require( delegator.owner == _msgSender(), "PoSValidatorManager: delegation not owned by sender" ); - uint64 nonce = _incrementAndGetNonce(validationID); // Set the delegator status to pending removed, so that it can be properly removed in // the complete step, even if the delivered nonce is greater than the nonce used to // initialize the removal. delegator.status = DelegatorStatus.PendingRemoved; - delegator.endedAt = uint64(block.timestamp); - delegator.endingNonce = nonce; - - $._delegatorStakes[delegationID] = delegator; - - Validator memory validator = getValidator(validationID); - require(validator.weight > delegator.weight, "PoSValidatorManager: Invalid weight"); - // 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. 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; - _setValidatorWeight(validationID, newValidatorWeight); + delegator.endingNonce = _incrementAndGetNonce(validationID); + delegator.endedAt = uint64(block.timestamp); + + uint64 newValidatorWeight = validator.weight - delegator.weight; + _setValidatorWeight(validationID, newValidatorWeight); + + // Submit the message to the Warp precompile. + bytes32 messageID = WARP_MESSENGER.sendWarpMessage( + ValidatorMessages.packSetSubnetValidatorWeightMessage( + validationID, delegator.endingNonce, newValidatorWeight + ) + ); + + emit ValidatorWeightUpdate({ + validationID: validationID, + nonce: delegator.endingNonce, + validatorWeight: newValidatorWeight, + setWeightMessageID: messageID + }); + } else { + delegator.endingNonce = validator.messageNonce; + delegator.endedAt = validator.endedAt; + } - // Submit the message to the Warp precompile. - bytes32 messageID = WARP_MESSENGER.sendWarpMessage( - ValidatorMessages.packSetSubnetValidatorWeightMessage( - validationID, nonce, newValidatorWeight - ) - ); + $._delegatorStakes[delegationID] = delegator; emit DelegatorRemovalInitialized({ delegationID: delegationID, validationID: validationID, - nonce: nonce, - validatorWeight: newValidatorWeight, - endTime: block.timestamp, - setWeightMessageID: messageID + endTime: delegator.endedAt }); } diff --git a/contracts/staking/interfaces/IPoSValidatorManager.sol b/contracts/staking/interfaces/IPoSValidatorManager.sol index 849326023..d2b990c06 100644 --- a/contracts/staking/interfaces/IPoSValidatorManager.sol +++ b/contracts/staking/interfaces/IPoSValidatorManager.sol @@ -67,6 +67,7 @@ interface IPoSValidatorManager is IValidatorManager { /** * @notice Event emitted when a delegator registration is completed * @param delegationID The ID of the delegation + * @param validationID The ID of the validation period * @param nonce The message nonce used to update the validator weight, as returned by the P-Chain * @param startTime The time at which the registration was completed */ @@ -80,17 +81,24 @@ interface IPoSValidatorManager is IValidatorManager { /** * @notice Event emitted when delegator removal is initiated * @param delegationID The ID of the delegation + * @param validationID The ID of the validation period + * @param endTime The time at which the removal was initiated + */ + event DelegatorRemovalInitialized( + bytes32 indexed delegationID, bytes32 indexed validationID, uint256 endTime + ); + + /** + * @notice Event emitted when delegator removal is initiated + * @param validationID The ID of the validation period * @param nonce The message nonce used to update the validator weight * @param validatorWeight The updated validator weight that is sent to the P-Chain - * @param endTime The time at which the removal was initiated * @param setWeightMessageID The ID of the Warp message that updates the validator's weight on the P-Chain */ - event DelegatorRemovalInitialized( - bytes32 indexed delegationID, + event ValidatorWeightUpdate( bytes32 indexed validationID, uint64 indexed nonce, uint64 validatorWeight, - uint256 endTime, bytes32 setWeightMessageID ); diff --git a/contracts/staking/tests/PoSValidatorManagerTests.t.sol b/contracts/staking/tests/PoSValidatorManagerTests.t.sol index 69eec67db..5c5c57e1b 100644 --- a/contracts/staking/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/staking/tests/PoSValidatorManagerTests.t.sol @@ -52,11 +52,13 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); event DelegatorRemovalInitialized( - bytes32 indexed delegationID, + bytes32 indexed delegationID, bytes32 indexed validationID, uint256 endTime + ); + + event ValidatorWeightUpdate( bytes32 indexed validationID, uint64 indexed nonce, uint64 validatorWeight, - uint256 endTime, bytes32 setWeightMessageID ); @@ -791,14 +793,19 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockSendWarpMessage(setValidatorWeightPayload, bytes32(0)); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit DelegatorRemovalInitialized({ - delegationID: delegationID, + emit ValidatorWeightUpdate({ validationID: validationID, nonce: expectedNonce, validatorWeight: expectedValidatorWeight, - endTime: endDelegationTimestamp, setWeightMessageID: bytes32(0) }); + vm.expectEmit(true, true, true, true, address(posValidatorManager)); + emit DelegatorRemovalInitialized({ + delegationID: delegationID, + validationID: validationID, + endTime: endDelegationTimestamp + }); + vm.prank(delegatorAddress); posValidatorManager.initializeEndDelegation(delegationID, false, 0); return delegationID;