From 4ed02ad82870f918b77821397969cb2dda0616fc Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Fri, 10 Jan 2025 13:25:30 -0600 Subject: [PATCH 01/29] source contracts building --- contracts/validator-manager/ACP99Manager.sol | 212 ++++++++++++++++++ .../ExampleRewardCalculator.sol | 2 +- .../validator-manager/PoAValidatorManager.sol | 16 +- .../validator-manager/PoSValidatorManager.sol | 107 +++++---- .../validator-manager/ValidatorManager.sol | 149 +++++++----- .../interfaces/IPoSValidatorManager.sol | 2 +- .../interfaces/IValidatorManager.sol | 86 +------ 7 files changed, 379 insertions(+), 195 deletions(-) create mode 100644 contracts/validator-manager/ACP99Manager.sol diff --git a/contracts/validator-manager/ACP99Manager.sol b/contracts/validator-manager/ACP99Manager.sol new file mode 100644 index 000000000..80b5e2d74 --- /dev/null +++ b/contracts/validator-manager/ACP99Manager.sol @@ -0,0 +1,212 @@ +// (c) 2025, Ava Labs, Inc. All rights reserved. +// See the file LICENSE for licensing terms. + +// SPDX-License-Identifier: Ecosystem + +pragma solidity 0.8.25; + +/** + * @notice Description of the conversion data used to convert + * a subnet to an L1 on the P-Chain. + * This data is the pre-image of a hash that is authenticated by the P-Chain + * and verified by the Validator Manager. + */ +struct ConversionData { + bytes32 subnetID; + bytes32 validatorManagerBlockchainID; + address validatorManagerAddress; + InitialValidator[] initialValidators; +} + +/// @notice Specifies an initial validator, used in the conversion data. +struct InitialValidator { + bytes nodeID; + bytes blsPublicKey; + uint64 weight; +} + +/// @notice L1 validator status +enum ValidatorStatus { + Unknown, + PendingAdded, + Active, + PendingRemoved, + Completed, + Invalidated +} + +/** + * @notice Specifies the owner of a validator's remaining balance or disable owner on the P-Chain. + * P-Chain addresses are also 20-bytes, so we use the address type to represent them. + */ +struct PChainOwner { + uint32 threshold; + address[] addresses; +} + +/** + * @notice Contains the active state of a Validator + * @param status The validator status + * @param nodeID The NodeID of the validator + * @param startingWeight The weight of the validator at the time of registration + * @param messageNonce The current weight update nonce + * @param weight The current weight of the validator + * @param startTime The start time of the validator + * @param endTime The end time of the validator + */ +struct Validator { + ValidatorStatus status; + bytes nodeID; + uint64 startingWeight; + uint64 sentNonce; + uint64 receivedNonce; + uint64 weightChangedAt; + uint64 weight; + uint64 startTime; + uint64 endTime; +} + +/* + * @title ACP99Manager + * @notice The ACP99Manager interface represents the functionality for sovereign L1 + * validator management, as specified in ACP-77 + */ +abstract contract ACP99Manager { + /// @notice Emitted when an initial validator is registered + event RegisteredInitialValidator( + bytes32 indexed nodeID, bytes32 indexed validationID, uint64 weight + ); + /// @notice Emitted when a validator registration to the L1 is initiated + event InitiatedValidatorRegistration( + bytes32 indexed nodeID, + bytes32 indexed validationID, + bytes32 registrationMessageID, + uint64 registrationExpiry, + uint64 weight + ); + /// @notice Emitted when a validator registration to the L1 is completed + event CompletedValidatorRegistration( + bytes32 indexed nodeID, bytes32 indexed validationID, uint64 weight + ); + /// @notice Emitted when a validator weight update is initiated + event InitiatedValidatorWeightUpdate( + bytes32 indexed nodeID, + bytes32 indexed validationID, + bytes32 weightUpdateMessageID, + uint64 weight + ); + /// @notice Emitted when a validator weight update is completed + event CompletedValidatorWeightUpdate( + bytes32 indexed nodeID, bytes32 indexed validationID, uint64 nonce, uint64 weight + ); + + /** + * @notice Verifies and sets the initial validator set for the chain through a P-Chain + * SubnetToL1ConversionMessage. + * + * Emits a {RegisteredInitialValidator} event for each initial validator in {conversionData}. + * + * @param conversionData The Subnet conversion message data used to recompute and verify against the ConversionID. + * @param messsageIndex The index that contains the SubnetToL1ConversionMessage Warp message containing the ConversionID to be verified against the provided {conversionData} + */ + function initializeValidatorSet( + ConversionData calldata conversionData, + uint32 messsageIndex + ) virtual public; + + /** + * @notice Completes the validator registration process by returning an acknowledgement of the registration of a + * validationID from the P-Chain. The validator should not be considered active until this method is successfully called. + * + * Emits a {CompletedValidatorRegistration} event on success. + * + * @param messageIndex The index of the Warp message to be received providing the acknowledgement. + */ + function completeValidatorRegistration( + uint32 messageIndex + ) virtual public returns (bytes32); + + /** + * @notice Initiates validator removal by issuing a L1ValidatorWeightMessage with the weight set to zero. + * The validator should be considered inactive as soon as this function is called. + * + * Emits an {InitiatedValidatorRemoval} on success. + * + * @param validationID The ID of the validator to remove. + */ + function _initiateValidatorRemoval( + bytes32 validationID + ) virtual internal; + + /** + * @notice Completes validator removal by consuming an RegisterL1ValidatorMessage from the P-Chain acknowledging + * that the validator has been removed. + * + * Emits a {CompletedValidatorRemoval} on success. + * + * @param messageIndex The index of the RegisterL1ValidatorMessage. + */ + function completeValidatorRemoval( + uint32 messageIndex + ) virtual public returns (bytes32 validationID); + + /** + * @notice Completes the validator weight update process by returning an acknowledgement of the weight update of a + * validationID from the P-Chain. The validator weight change should not have any effect until this method is successfully called. + * + * Emits a {CompletedValidatorWeightUpdate} event on success + * + * @param messageIndex The index of the Warp message to be received providing the acknowledgement. + */ + function completeValidatorWeightUpdate( + uint32 messageIndex + ) virtual public returns (bytes32); + + /// @notice Returns the ID of the Subnet tied to this manager + function subnetID() virtual public view returns (bytes32); + + /// @notice Returns the validation details for a given validation ID + function getValidator( + bytes32 validationID + ) virtual public view returns (Validator memory); + + /// @notice Returns the total weight of the current L1 validator set + function l1TotalWeight() virtual public view returns (uint64); + + /** + * @notice Initiate a validator registration by issuing a RegisterL1ValidatorTx Warp message. The validator should + * not be considered active until completeValidatorRegistration is called. + * + * Emits an {InitiatedValidatorRegistration} event on success. + * + * @param nodeID The ID of the node to add to the L1 + * @param blsPublicKey The BLS public key of the validator + * @param registrationExpiry The time after which this message is invalid + * @param remainingBalanceOwner The remaining balance owner of the validator + * @param disableOwner The disable owner of the validator + * @param weight The weight of the node on the L1 + */ + function _initiateValidatorRegistration( + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, + uint64 weight + ) virtual internal returns (bytes32); + + /** + * @notice Initiate a validator weight update by issuing a SetL1ValidatorWeightTx Warp message. + * If the weight is 0, this initiates the removal of the validator from the L1. The validator weight change + * should not have any effect until completeValidatorWeightUpdate is successfully called. + * + * Emits an {InitiatedValidatorWeightUpdate} event on success. + * + * @param validationID The ID of the validation period to modify + * @param weight The new weight of the validation + */ + function _initiateValidatorWeightUpdate( + bytes32 validationID, + uint64 weight + ) virtual internal returns (uint64, bytes32); +} \ No newline at end of file diff --git a/contracts/validator-manager/ExampleRewardCalculator.sol b/contracts/validator-manager/ExampleRewardCalculator.sol index 856158350..7ef351e62 100644 --- a/contracts/validator-manager/ExampleRewardCalculator.sol +++ b/contracts/validator-manager/ExampleRewardCalculator.sol @@ -31,7 +31,7 @@ contract ExampleRewardCalculator is IRewardCalculator { uint64 stakingEndTime, uint64 uptimeSeconds ) external view returns (uint256) { - // Equivalent to uptimeSeconds/(validator.endedAt - validator.startedAt) < UPTIME_REWARDS_THRESHOLD_PERCENTAGE/100 + // Equivalent to uptimeSeconds/(validator.endTime - validator.startTime) < UPTIME_REWARDS_THRESHOLD_PERCENTAGE/100 // Rearranged to prevent integer division truncation. if ( uptimeSeconds * 100 diff --git a/contracts/validator-manager/PoAValidatorManager.sol b/contracts/validator-manager/PoAValidatorManager.sol index b62a30557..6544f64fd 100644 --- a/contracts/validator-manager/PoAValidatorManager.sol +++ b/contracts/validator-manager/PoAValidatorManager.sol @@ -55,7 +55,14 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU ValidatorRegistrationInput calldata registrationInput, uint64 weight ) external onlyOwner returns (bytes32 validationID) { - return _initializeValidatorRegistration(registrationInput, weight); + return _initiateValidatorRegistration({ + nodeID: registrationInput.nodeID, + blsPublicKey: registrationInput.blsPublicKey, + registrationExpiry: registrationInput.registrationExpiry, + remainingBalanceOwner: registrationInput.remainingBalanceOwner, + disableOwner: registrationInput.disableOwner, + weight: weight + }); } // solhint-enable ordering @@ -63,13 +70,14 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU * @notice See {IPoAValidatorManager-initializeEndValidation}. */ function initializeEndValidation(bytes32 validationID) external override onlyOwner { - _initializeEndValidation(validationID); + _initiateValidatorRemoval(validationID); } /** * @notice See {IValidatorManager-completeEndValidation}. */ - function completeEndValidation(uint32 messageIndex) external { - _completeEndValidation(messageIndex); + function completeValidatorRemoval(uint32 messageIndex) virtual override public returns (bytes32) { + (bytes32 validationID,) = _completeEndValidation(messageIndex); + return validationID; } } diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 22ebc6120..0a1e2f5b5 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -14,11 +14,13 @@ import { PoSValidatorInfo, PoSValidatorManagerSettings } from "./interfaces/IPoSValidatorManager.sol"; +import { + ValidatorRegistrationInput +} from "./interfaces/IValidatorManager.sol"; import { Validator, - ValidatorRegistrationInput, ValidatorStatus -} from "./interfaces/IValidatorManager.sol"; +} from "./ACP99Manager.sol"; import {IRewardCalculator} from "./interfaces/IRewardCalculator.sol"; import {WarpMessage} from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/IWarpMessenger.sol"; @@ -85,7 +87,6 @@ abstract contract PoSValidatorManager is error InvalidDelegationFee(uint16 delegationFeeBips); error InvalidDelegationID(bytes32 delegationID); error InvalidDelegatorStatus(DelegatorStatus status); - error InvalidNonce(uint64 nonce); error InvalidRewardRecipient(address rewardRecipient); error InvalidStakeAmount(uint256 stakeAmount); error InvalidMinStakeDuration(uint64 minStakeDuration); @@ -327,7 +328,8 @@ abstract contract PoSValidatorManager is ) internal returns (bool) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); - Validator memory validator = _initializeEndValidation(validationID); + Validator memory validator = getValidator(validationID); + _initiateValidatorRemoval(validationID); // Non-PoS validators are required to boostrap the network, but are not eligible for rewards. if (!_isPoSValidator(validationID)) { @@ -341,10 +343,10 @@ abstract contract PoSValidatorManager is // Check that minimum stake duration has passed. if ( - validator.endedAt - < validator.startedAt + $._posValidatorInfo[validationID].minStakeDuration + validator.endTime + < validator.startTime + $._posValidatorInfo[validationID].minStakeDuration ) { - revert MinStakeDurationNotPassed(validator.endedAt); + revert MinStakeDurationNotPassed(validator.endTime); } // Uptime proofs include the absolute number of seconds the validator has been active. @@ -357,9 +359,9 @@ abstract contract PoSValidatorManager is uint256 reward = $._rewardCalculator.calculateReward({ stakeAmount: weightToValue(validator.startingWeight), - validatorStartTime: validator.startedAt, - stakingStartTime: validator.startedAt, - stakingEndTime: validator.endedAt, + validatorStartTime: validator.startTime, + stakingStartTime: validator.startTime, + stakingEndTime: validator.endTime, uptimeSeconds: uptimeSeconds }); @@ -374,9 +376,9 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IValidatorManager-completeEndValidation}. + * @notice See {ACP99Manager-completeValidatorRemoval}. */ - function completeEndValidation(uint32 messageIndex) external nonReentrant { + function completeValidatorRemoval(uint32 messageIndex) virtual override public nonReentrant returns (bytes32) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); (bytes32 validationID, Validator memory validator) = _completeEndValidation(messageIndex); @@ -384,7 +386,7 @@ abstract contract PoSValidatorManager is // Return now if this was originally a PoA validator that was later migrated to this PoS manager, // or the validator was part of the initial validator set. if (!_isPoSValidator(validationID)) { - return; + return validationID; } address owner = $._posValidatorInfo[validationID].owner; @@ -403,6 +405,8 @@ abstract contract PoSValidatorManager is // The stake is unlocked whether the validation period is completed or invalidated. _unlock(owner, weightToValue(validator.startingWeight)); + + return validationID; } /** @@ -475,7 +479,14 @@ abstract contract PoSValidatorManager is uint256 lockedValue = _lock(stakeAmount); uint64 weight = valueToWeight(lockedValue); - bytes32 validationID = _initializeValidatorRegistration(registrationInput, weight); + bytes32 validationID = _initiateValidatorRegistration({ + nodeID: registrationInput.nodeID, + blsPublicKey: registrationInput.blsPublicKey, + registrationExpiry: registrationInput.registrationExpiry, + remainingBalanceOwner: registrationInput.remainingBalanceOwner, + disableOwner: registrationInput.disableOwner, + weight: weight + }); address owner = _msgSender(); @@ -545,7 +556,7 @@ abstract contract PoSValidatorManager is revert MaxWeightExceeded(newValidatorWeight); } - (uint64 nonce, bytes32 messageID) = _setValidatorWeight(validationID, newValidatorWeight); + (uint64 nonce, bytes32 messageID) = _initiateValidatorWeightUpdate(validationID, newValidatorWeight); bytes32 delegationID = keccak256(abi.encodePacked(validationID, nonce)); @@ -556,7 +567,7 @@ abstract contract PoSValidatorManager is $._delegatorStakes[delegationID].owner = delegatorAddress; $._delegatorStakes[delegationID].validationID = validationID; $._delegatorStakes[delegationID].weight = weight; - $._delegatorStakes[delegationID].startedAt = 0; + $._delegatorStakes[delegationID].startTime = 0; $._delegatorStakes[delegationID].startingNonce = nonce; $._delegatorStakes[delegationID].endingNonce = 0; @@ -595,25 +606,22 @@ abstract contract PoSValidatorManager is return _completeEndDelegation(delegationID); } - // Unpack the Warp message - (bytes32 messageValidationID, uint64 nonce,) = ValidatorMessages - .unpackL1ValidatorWeightMessage(_getPChainWarpMessage(messageIndex).payload); - - if (validationID != messageValidationID) { - revert InvalidValidationID(delegator.validationID); + // If we've already received a weight update with a nonce greater than the delegation's starting nonce, + // then there's no requirement to include an ICM message in this function call. + if (validator.receivedNonce < delegator.startingNonce) { + bytes32 messageValidationID = completeValidatorWeightUpdate(messageIndex); + if (validationID != messageValidationID) { + revert InvalidValidationID(delegator.validationID); + } + if (validator.receivedNonce < delegator.startingNonce) { + revert InvalidNonce(validator.receivedNonce); + } } - // The received nonce should be no greater than the highest sent nonce, and at least as high as - // the delegation's starting nonce. This allows a weight update using a higher nonce - // (which implicitly includes the delegation's weight update) to be used to complete delisting - // for an earlier delegation. This is necessary because the P-Chain is only willing to sign the latest weight update. - if (validator.messageNonce < nonce || delegator.startingNonce > nonce) { - revert InvalidNonce(nonce); - } // Update the delegation status $._delegatorStakes[delegationID].status = DelegatorStatus.Active; - $._delegatorStakes[delegationID].startedAt = uint64(block.timestamp); + $._delegatorStakes[delegationID].startTime = uint64(block.timestamp); emit DelegatorRegistered({ delegationID: delegationID, @@ -720,7 +728,7 @@ abstract contract PoSValidatorManager is if ( block.timestamp - < validator.startedAt + $._posValidatorInfo[validationID].minStakeDuration + < validator.startTime + $._posValidatorInfo[validationID].minStakeDuration ) { revert MinStakeDurationNotPassed(uint64(block.timestamp)); } @@ -728,7 +736,7 @@ abstract contract PoSValidatorManager is if (validator.status == ValidatorStatus.Active) { // Check that minimum stake duration has passed. - if (block.timestamp < delegator.startedAt + $._minimumStakeDuration) { + if (block.timestamp < delegator.startTime + $._minimumStakeDuration) { revert MinStakeDurationNotPassed(uint64(block.timestamp)); } @@ -743,7 +751,7 @@ abstract contract PoSValidatorManager is $._delegatorStakes[delegationID].status = DelegatorStatus.PendingRemoved; ($._delegatorStakes[delegationID].endingNonce,) = - _setValidatorWeight(validationID, validator.weight - delegator.weight); + _initiateValidatorWeightUpdate(validationID, validator.weight - delegator.weight); uint256 reward = _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); @@ -780,7 +788,7 @@ abstract contract PoSValidatorManager is validator.status == ValidatorStatus.PendingRemoved || validator.status == ValidatorStatus.Completed ) { - delegationEndTime = validator.endedAt; + delegationEndTime = validator.endTime; } else if (validator.status == ValidatorStatus.Active) { delegationEndTime = uint64(block.timestamp); } else { @@ -789,14 +797,14 @@ abstract contract PoSValidatorManager is } // Only give rewards in the case that the delegation started before the validator exited. - if (delegationEndTime <= delegator.startedAt) { + if (delegationEndTime <= delegator.startTime) { return 0; } uint256 reward = $._rewardCalculator.calculateReward({ stakeAmount: weightToValue(delegator.weight), - validatorStartTime: validator.startedAt, - stakingStartTime: delegator.startedAt, + validatorStartTime: validator.startTime, + stakingStartTime: delegator.startTime, stakingEndTime: delegationEndTime, uptimeSeconds: $._posValidatorInfo[delegator.validationID].uptimeSeconds }); @@ -827,7 +835,7 @@ abstract contract PoSValidatorManager is } Validator memory validator = getValidator(delegator.validationID); - if (validator.messageNonce == 0) { + if (validator.sentNonce == 0) { // Should be unreachable. revert InvalidDelegationID(delegationID); } @@ -835,7 +843,7 @@ abstract contract PoSValidatorManager is // Submit the message to the Warp precompile. WARP_MESSENGER.sendWarpMessage( ValidatorMessages.packL1ValidatorWeightMessage( - delegator.validationID, validator.messageNonce, validator.weight + delegator.validationID, validator.sentNonce, validator.weight ) ); } @@ -843,6 +851,9 @@ abstract contract PoSValidatorManager is /** * @notice See {IPoSValidatorManager-completeEndDelegation}. */ + // TODONOW: Rather than ending on a delegation by delegation basis, + // Can we instead track the highest acknowledged nonce, delivered via completeValidatorWeightChange? + // We'd still have a delegation specific collectDelegationRewards or similar, but that would check against this nonce. function completeEndDelegation( bytes32 delegationID, uint32 messageIndex @@ -856,23 +867,22 @@ abstract contract PoSValidatorManager is if (delegator.status != DelegatorStatus.PendingRemoved) { revert InvalidDelegatorStatus(delegator.status); } + Validator memory validator = getValidator(delegator.validationID); - if (getValidator(delegator.validationID).status != ValidatorStatus.Completed) { - // Unpack the Warp message - WarpMessage memory warpMessage = _getPChainWarpMessage(messageIndex); - (bytes32 validationID, uint64 nonce,) = - ValidatorMessages.unpackL1ValidatorWeightMessage(warpMessage.payload); - + // We only expect an ICM message if we haven't received a weight update with a nonce greater than the delegation's ending nonce + if (getValidator(delegator.validationID).status != ValidatorStatus.Completed && validator.receivedNonce < delegator.endingNonce) { + bytes32 validationID = completeValidatorWeightUpdate(messageIndex); if (delegator.validationID != validationID) { revert InvalidValidationID(validationID); } + // The received nonce should be at least as high as the delegation's ending nonce. This allows a weight // update using a higher nonce (which implicitly includes the delegation's weight update) to be used to // complete delisting for an earlier delegation. This is necessary because the P-Chain is only willing // to sign the latest weight update. - if (delegator.endingNonce > nonce) { - revert InvalidNonce(nonce); + if (delegator.endingNonce > validator.receivedNonce) { + revert InvalidNonce(validator.receivedNonce); } } @@ -887,7 +897,8 @@ abstract contract PoSValidatorManager is // To prevent churn tracker abuse, check that one full churn period has passed, // so a delegator may not stake twice in the same churn period. - if (block.timestamp < delegator.startedAt + _getChurnPeriodSeconds()) { + // TODONOW: Is it safe to move this to initializeEndDelegation? + if (block.timestamp < delegator.startTime + _getChurnPeriodSeconds()) { revert MinStakeDurationNotPassed(uint64(block.timestamp)); } diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index f7f39653f..3579cfd56 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -7,16 +7,19 @@ pragma solidity 0.8.25; import {ValidatorMessages} from "./ValidatorMessages.sol"; import { - InitialValidator, IValidatorManager, + ValidatorChurnPeriod, + ValidatorManagerSettings, + ValidatorRegistrationInput +} from "./interfaces/IValidatorManager.sol"; +import { + ACP99Manager, + InitialValidator, PChainOwner, ConversionData, Validator, - ValidatorChurnPeriod, - ValidatorManagerSettings, - ValidatorRegistrationInput, ValidatorStatus -} from "./interfaces/IValidatorManager.sol"; +} from "./ACP99Manager.sol"; import { IWarpMessenger, WarpMessage @@ -31,7 +34,7 @@ import {Initializable} from * * @custom:security-contact https://github.com/ava-labs/icm-contracts/blob/main/SECURITY.md */ -abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValidatorManager { +abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValidatorManager, ACP99Manager { // solhint-disable private-vars-leading-underscore /// @custom:storage-location erc7201:avalanche-icm.storage.ValidatorManager @@ -78,6 +81,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida error InvalidTotalWeight(uint64 weight); error InvalidValidationID(bytes32 validationID); error InvalidValidatorStatus(ValidatorStatus status); + error InvalidNonce(uint64 nonce); error InvalidWarpMessage(); error MaxChurnRateExceeded(uint64 churnAmount); error NodeAlreadyRegistered(bytes nodeID); @@ -144,12 +148,12 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida } /** - * @notice See {IValidatorManager-initializeValidatorSet}. + * @notice See {ACP99Manager-initializeValidatorSet}. */ function initializeValidatorSet( ConversionData calldata conversionData, uint32 messageIndex - ) external { + ) virtual public override { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); if ($._initializedValidatorSet) { revert InvalidInitializationStatus(); @@ -182,10 +186,10 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida $._validationPeriods[validationID].status = ValidatorStatus.Active; $._validationPeriods[validationID].nodeID = initialValidator.nodeID; $._validationPeriods[validationID].startingWeight = initialValidator.weight; - $._validationPeriods[validationID].messageNonce = 0; + $._validationPeriods[validationID].sentNonce = 0; $._validationPeriods[validationID].weight = initialValidator.weight; - $._validationPeriods[validationID].startedAt = uint64(block.timestamp); - $._validationPeriods[validationID].endedAt = 0; + $._validationPeriods[validationID].startTime = uint64(block.timestamp); + $._validationPeriods[validationID].endTime = 0; totalWeight += initialValidator.weight; emit InitialValidatorCreated( @@ -213,7 +217,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida $._initializedValidatorSet = true; } - function _validatePChainOwner(PChainOwner calldata pChainOwner) internal pure { + function _validatePChainOwner(PChainOwner memory pChainOwner) internal pure { // If threshold is 0, addresses must be empty. if (pChainOwner.threshold == 0 && pChainOwner.addresses.length != 0) { revert InvalidPChainOwnerThreshold(pChainOwner.threshold, pChainOwner.addresses.length); @@ -235,20 +239,23 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida * @notice Begins the validator registration process, and sets the initial weight for the validator. * This is the only method related to validator registration and removal that needs the initializedValidatorSet * modifier. All others are guarded by checking the validator status changes initialized in this function. - * @param input The inputs for a validator registration. * @param weight The weight of the validator being registered. */ - function _initializeValidatorRegistration( - ValidatorRegistrationInput calldata input, + function _initiateValidatorRegistration( + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight - ) internal virtual initializedValidatorSet returns (bytes32) { + ) virtual override internal initializedValidatorSet returns (bytes32) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); if ( - input.registrationExpiry <= block.timestamp - || input.registrationExpiry >= block.timestamp + MAXIMUM_REGISTRATION_EXPIRY_LENGTH + registrationExpiry <= block.timestamp + || registrationExpiry >= block.timestamp + MAXIMUM_REGISTRATION_EXPIRY_LENGTH ) { - revert InvalidRegistrationExpiry(input.registrationExpiry); + revert InvalidRegistrationExpiry(registrationExpiry); } // Ensure the new validator doesn't overflow the total weight @@ -256,19 +263,19 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida revert InvalidTotalWeight(weight); } - _validatePChainOwner(input.remainingBalanceOwner); - _validatePChainOwner(input.disableOwner); + _validatePChainOwner(remainingBalanceOwner); + _validatePChainOwner(disableOwner); // Ensure the nodeID is not the zero address, and is not already an active validator. - if (input.blsPublicKey.length != BLS_PUBLIC_KEY_LENGTH) { - revert InvalidBLSKeyLength(input.blsPublicKey.length); + if (blsPublicKey.length != BLS_PUBLIC_KEY_LENGTH) { + revert InvalidBLSKeyLength(blsPublicKey.length); } - if (input.nodeID.length == 0) { - revert InvalidNodeID(input.nodeID); + if (nodeID.length == 0) { + revert InvalidNodeID(nodeID); } - if ($._registeredValidators[input.nodeID] != bytes32(0)) { - revert NodeAlreadyRegistered(input.nodeID); + if ($._registeredValidators[nodeID] != bytes32(0)) { + revert NodeAlreadyRegistered(nodeID); } // Check that adding this validator would not exceed the maximum churn rate. @@ -278,29 +285,29 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida .packRegisterL1ValidatorMessage( ValidatorMessages.ValidationPeriod({ subnetID: $._subnetID, - nodeID: input.nodeID, - blsPublicKey: input.blsPublicKey, - remainingBalanceOwner: input.remainingBalanceOwner, - disableOwner: input.disableOwner, - registrationExpiry: input.registrationExpiry, + nodeID: nodeID, + blsPublicKey: blsPublicKey, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + registrationExpiry: registrationExpiry, weight: weight }) ); $._pendingRegisterValidationMessages[validationID] = registerL1ValidatorMessage; - $._registeredValidators[input.nodeID] = validationID; + $._registeredValidators[nodeID] = validationID; // Submit the message to the Warp precompile. bytes32 messageID = WARP_MESSENGER.sendWarpMessage(registerL1ValidatorMessage); $._validationPeriods[validationID].status = ValidatorStatus.PendingAdded; - $._validationPeriods[validationID].nodeID = input.nodeID; + $._validationPeriods[validationID].nodeID = nodeID; $._validationPeriods[validationID].startingWeight = weight; - $._validationPeriods[validationID].messageNonce = 0; + $._validationPeriods[validationID].sentNonce = 0; $._validationPeriods[validationID].weight = weight; - $._validationPeriods[validationID].startedAt = 0; // The validation period only starts once the registration is acknowledged. - $._validationPeriods[validationID].endedAt = 0; + $._validationPeriods[validationID].startTime = 0; // The validation period only starts once the registration is acknowledged. + $._validationPeriods[validationID].endTime = 0; emit ValidationPeriodCreated( - validationID, input.nodeID, messageID, weight, input.registrationExpiry + validationID, nodeID, messageID, weight, registrationExpiry ); return validationID; @@ -324,9 +331,9 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida } /** - * @notice See {IValidatorManager-completeValidatorRegistration}. + * @notice See {ACP99Manager-completeValidatorRegistration}. */ - function completeValidatorRegistration(uint32 messageIndex) external { + function completeValidatorRegistration(uint32 messageIndex) virtual public override returns (bytes32) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); (bytes32 validationID, bool validRegistration) = ValidatorMessages .unpackL1ValidatorRegistrationMessage(_getPChainWarpMessage(messageIndex).payload); @@ -344,10 +351,12 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida delete $._pendingRegisterValidationMessages[validationID]; $._validationPeriods[validationID].status = ValidatorStatus.Active; - $._validationPeriods[validationID].startedAt = uint64(block.timestamp); + $._validationPeriods[validationID].startTime = uint64(block.timestamp); emit ValidationPeriodRegistered( validationID, $._validationPeriods[validationID].weight, block.timestamp ); + + return validationID; } /** @@ -363,21 +372,49 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida * @notice Returns a validator registered to the given validationID * @param validationID ID of the validation period associated with the validator */ - function getValidator(bytes32 validationID) public view returns (Validator memory) { + function getValidator(bytes32 validationID) virtual override public view returns (Validator memory) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); return $._validationPeriods[validationID]; } + function l1TotalWeight() virtual override public view returns (uint64) { + return _getValidatorManagerStorage()._churnTracker.totalWeight; + } + + function subnetID() virtual override public view returns (bytes32) { + return _getValidatorManagerStorage()._subnetID; + } + + function completeValidatorWeightUpdate( + uint32 messageIndex + ) virtual override public returns (bytes32) { + WarpMessage memory warpMessage = _getPChainWarpMessage(messageIndex); + (bytes32 validationID, uint64 nonce,) = + ValidatorMessages.unpackL1ValidatorWeightMessage(warpMessage.payload); + + ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); + + // The received nonce should be no greater than the highest sent nonce to ensure + // that weight changes are only initiated by this contract. + if ($._validationPeriods[validationID].sentNonce < nonce) { + revert InvalidNonce(nonce); + } + + $._validationPeriods[validationID].receivedNonce = nonce; + + return validationID; + } + /** * @notice Begins the process of ending an active validation period. The validation period must have been previously * started by a successful call to {completeValidatorRegistration} with the given validationID. * Any rewards for this validation period will stop accruing when this function is called. * @param validationID The ID of the validation period being ended. */ - function _initializeEndValidation(bytes32 validationID) + function _initiateValidatorRemoval(bytes32 validationID) internal virtual - returns (Validator memory) + override { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); @@ -394,17 +431,15 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida // Set the end time of the validation period, since it is no longer known to be an active validator // on the P-Chain. - validator.endedAt = uint64(block.timestamp); + validator.endTime = uint64(block.timestamp); // Save the validator updates. $._validationPeriods[validationID] = validator; - (, bytes32 messageID) = _setValidatorWeight(validationID, 0); + (, bytes32 messageID) = _initiateValidatorWeightUpdate(validationID, 0); // Emit the event to signal the start of the validator removal process. emit ValidatorRemovalInitialized(validationID, messageID, validator.weight, block.timestamp); - - return validator; } /** @@ -420,7 +455,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida } WARP_MESSENGER.sendWarpMessage( - ValidatorMessages.packL1ValidatorWeightMessage(validationID, validator.messageNonce, 0) + ValidatorMessages.packL1ValidatorWeightMessage(validationID, validator.sentNonce, 0) ); } @@ -474,9 +509,9 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida return (validationID, validator); } - function _incrementAndGetNonce(bytes32 validationID) internal returns (uint64) { + function _incrementSentNonce(bytes32 validationID) internal returns (uint64) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); - return ++$._validationPeriods[validationID].messageNonce; + return ++$._validationPeriods[validationID].sentNonce; } function _getPChainWarpMessage(uint32 messageIndex) @@ -500,17 +535,17 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida return warpMessage; } - function _setValidatorWeight( + function _initiateValidatorWeightUpdate( bytes32 validationID, uint64 newWeight - ) internal returns (uint64, bytes32) { + ) virtual override internal returns (uint64, bytes32) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); uint64 validatorWeight = $._validationPeriods[validationID].weight; // Check that changing the validator weight would not exceed the maximum churn rate. _checkAndUpdateChurnTracker(newWeight, validatorWeight); - uint64 nonce = _incrementAndGetNonce(validationID); + uint64 nonce = _incrementSentNonce(validationID); $._validationPeriods[validationID].weight = newWeight; @@ -555,11 +590,11 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida ValidatorChurnPeriod memory churnTracker = $._churnTracker; if ( - churnTracker.startedAt == 0 - || currentTime >= churnTracker.startedAt + $._churnPeriodSeconds + churnTracker.startTime == 0 + || currentTime >= churnTracker.startTime + $._churnPeriodSeconds ) { churnTracker.churnAmount = weightChange; - churnTracker.startedAt = currentTime; + churnTracker.startTime = currentTime; churnTracker.initialWeight = churnTracker.totalWeight; } else { // Churn is always additive whether the weight is being added or removed. diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index 841f7d362..59cd0b311 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -52,7 +52,7 @@ struct Delegator { address owner; bytes32 validationID; uint64 weight; - uint64 startedAt; + uint64 startTime; uint64 startingNonce; uint64 endingNonce; } diff --git a/contracts/validator-manager/interfaces/IValidatorManager.sol b/contracts/validator-manager/interfaces/IValidatorManager.sol index 9ee1ed6ab..37001c44a 100644 --- a/contracts/validator-manager/interfaces/IValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IValidatorManager.sol @@ -5,45 +5,13 @@ pragma solidity 0.8.25; -/** - * @dev Validator status - */ -enum ValidatorStatus { - Unknown, - PendingAdded, - Active, - PendingRemoved, - Completed, - Invalidated -} - -/** - * @dev Specifies the owner of a validator's remaining balance or disable owner on the P-Chain. - * P-Chain addresses are also 20-bytes, so we use the address type to represent them. - */ -struct PChainOwner { - uint32 threshold; - address[] addresses; -} - -/** - * @dev Contains the active state of a Validator - */ -struct Validator { - ValidatorStatus status; - bytes nodeID; - uint64 startingWeight; - uint64 messageNonce; - uint64 weight; - uint64 startedAt; - uint64 endedAt; -} +import {ValidatorStatus, ConversionData, PChainOwner} from "../ACP99Manager.sol"; /** * @dev Describes the current churn period */ struct ValidatorChurnPeriod { - uint256 startedAt; + uint256 startTime; uint64 initialWeight; uint64 totalWeight; uint64 churnAmount; @@ -61,28 +29,6 @@ struct ValidatorManagerSettings { uint8 maximumChurnPercentage; } -/** - * @dev Description of the conversion data used to convert - * a subnet to an L1 on the P-Chain. - * This data is the pre-image of a hash that is authenticated by the P-Chain - * and verified by the Validator Manager. - */ -struct ConversionData { - bytes32 subnetID; - bytes32 validatorManagerBlockchainID; - address validatorManagerAddress; - InitialValidator[] initialValidators; -} - -/** - * @dev Specifies an initial validator, used in the conversion data. - */ -struct InitialValidator { - bytes nodeID; - bytes blsPublicKey; - uint64 weight; -} - /** * @dev Specifies a validator to register. */ @@ -171,16 +117,6 @@ interface IValidatorManager { bytes32 setWeightMessageID ); - /** - * @notice Verifies and sets the initial validator set for the chain through a P-Chain SubnetToL1ConversionMessage. - * @param conversionData The subnet conversion message data used to recompute and verify against the conversionID. - * @param messsageIndex The index that contains the SubnetToL1ConversionMessage ICM message containing the conversionID to be verified against the provided {ConversionData} - */ - function initializeValidatorSet( - ConversionData calldata conversionData, - uint32 messsageIndex - ) external; - /** * @notice Resubmits a validator registration message to be sent to the P-Chain. * Only necessary if the original message can't be delivered due to validator churn. @@ -188,28 +124,10 @@ interface IValidatorManager { */ function resendRegisterValidatorMessage(bytes32 validationID) external; - /** - * @notice Completes the validator registration process by returning an acknowledgement of the registration of a - * validationID from the P-Chain. - * @param messageIndex The index of the ICM message to be received providing the acknowledgement. - */ - function completeValidatorRegistration(uint32 messageIndex) external; - /** * @notice Resubmits a validator end message to be sent to the P-Chain. * Only necessary if the original message can't be delivered due to validator churn. * @param validationID The ID of the validation period being ended. */ function resendEndValidatorMessage(bytes32 validationID) external; - - /** - * @notice Completes the process of ending a validation period by receiving an acknowledgement from the P-Chain - * that the validation ID is not active and will never be active in the future. Returns the the stake associated - * with the validation. - * Note: This function can be used for successful validation periods that have been explicitly ended by calling - * {initializeEndValidation} or for validation periods that never began on the P-Chain due to the {registrationExpiry} being reached. - * @param messageIndex The index of the ICM message to be received providing the proof the validation is not active - * and never will be active on the P-Chain. - */ - function completeEndValidation(uint32 messageIndex) external; } From 7cd9742ec1ad793bb6f73003893f9fb8fc87f50d Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Fri, 10 Jan 2025 15:30:18 -0600 Subject: [PATCH 02/29] emit events --- contracts/validator-manager/ACP99Manager.sol | 145 ++++++++++-------- .../validator-manager/ValidatorManager.sol | 24 +-- .../interfaces/IValidatorManager.sol | 58 ------- 3 files changed, 93 insertions(+), 134 deletions(-) diff --git a/contracts/validator-manager/ACP99Manager.sol b/contracts/validator-manager/ACP99Manager.sol index 80b5e2d74..c430e353b 100644 --- a/contracts/validator-manager/ACP99Manager.sol +++ b/contracts/validator-manager/ACP99Manager.sol @@ -60,7 +60,6 @@ struct Validator { uint64 startingWeight; uint64 sentNonce; uint64 receivedNonce; - uint64 weightChangedAt; uint64 weight; uint64 startTime; uint64 endTime; @@ -72,59 +71,106 @@ struct Validator { * validator management, as specified in ACP-77 */ abstract contract ACP99Manager { - /// @notice Emitted when an initial validator is registered + /// @notice Emitted when an initial validator is registered. event RegisteredInitialValidator( - bytes32 indexed nodeID, bytes32 indexed validationID, uint64 weight + bytes32 indexed validationID, bytes nodeID, uint64 weight ); - /// @notice Emitted when a validator registration to the L1 is initiated + /// @notice Emitted when a validator registration to the L1 is initiated. event InitiatedValidatorRegistration( - bytes32 indexed nodeID, bytes32 indexed validationID, + bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight ); - /// @notice Emitted when a validator registration to the L1 is completed + /// @notice Emitted when a validator registration to the L1 is completed. event CompletedValidatorRegistration( - bytes32 indexed nodeID, bytes32 indexed validationID, uint64 weight + bytes32 indexed validationID, bytes nodeID, uint64 weight ); - /// @notice Emitted when a validator weight update is initiated + /// @notice Emitted when removal of an L1 validator is initiated. + event InitiatedValidatorRemoval( + bytes32 indexed validationID, + bytes32 validatorWeightMessageID, + uint64 weight, + uint64 endTime + ); + /// @notice Emitted when removal of an L1 validator is completed. + event CompletedValidatorRemoval( + bytes32 indexed validationID + ); + /// @notice Emitted when a validator weight update is initiated. event InitiatedValidatorWeightUpdate( - bytes32 indexed nodeID, bytes32 indexed validationID, + uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight ); - /// @notice Emitted when a validator weight update is completed + /// @notice Emitted when a validator weight update is completed. event CompletedValidatorWeightUpdate( - bytes32 indexed nodeID, bytes32 indexed validationID, uint64 nonce, uint64 weight + bytes32 indexed validationID, uint64 nonce, uint64 weight ); + /// @notice Returns the SubnetID of the L1 tied to this manager + function subnetID() virtual public view returns (bytes32 subnetID); + + /// @notice Returns the validator details for a given validation ID. + function getValidator( + bytes32 validationID + ) virtual public view returns (Validator memory validator); + + /// @notice Returns the total weight of the current L1 validator set. + function l1TotalWeight() virtual public view returns (uint64 weight); + /** - * @notice Verifies and sets the initial validator set for the chain through a P-Chain - * SubnetToL1ConversionMessage. + * @notice Verifies and sets the initial validator set for the chain by consuming a + * SubnetToL1ConversionMessage from the P-Chain. * * Emits a {RegisteredInitialValidator} event for each initial validator in {conversionData}. * * @param conversionData The Subnet conversion message data used to recompute and verify against the ConversionID. - * @param messsageIndex The index that contains the SubnetToL1ConversionMessage Warp message containing the ConversionID to be verified against the provided {conversionData} + * @param messsageIndex The index that contains the SubnetToL1ConversionMessage ICM message containing the + * ConversionID to be verified against the provided {conversionData}. */ function initializeValidatorSet( ConversionData calldata conversionData, uint32 messsageIndex ) virtual public; + /** + * @notice Initiates validator registration by issuing a RegisterL1ValidatorMessage. The validator should + * not be considered active until completeValidatorRegistration is called. + * + * Emits an {InitiatedValidatorRegistration} event on success. + * + * @param nodeID The ID of the node to add to the L1. + * @param blsPublicKey The BLS public key of the validator. + * @param registrationExpiry The time after which this message is invalid. + * @param remainingBalanceOwner The remaining balance owner of the validator. + * @param disableOwner The disable owner of the validator. + * @param weight The weight of the node on the L1. + * @return validationID The ID of the registered validator. + */ + function _initiateValidatorRegistration( + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, + uint64 weight + ) virtual internal returns (bytes32 validationID); + /** * @notice Completes the validator registration process by returning an acknowledgement of the registration of a * validationID from the P-Chain. The validator should not be considered active until this method is successfully called. * * Emits a {CompletedValidatorRegistration} event on success. * - * @param messageIndex The index of the Warp message to be received providing the acknowledgement. + * @param messageIndex The index of the L1ValidatorRegistrationMessage to be received providing the acknowledgement. + * @return validationID The ID of the registered validator. */ function completeValidatorRegistration( uint32 messageIndex - ) virtual public returns (bytes32); + ) virtual public returns (bytes32 validationID); /** * @notice Initiates validator removal by issuing a L1ValidatorWeightMessage with the weight set to zero. @@ -151,62 +197,31 @@ abstract contract ACP99Manager { ) virtual public returns (bytes32 validationID); /** - * @notice Completes the validator weight update process by returning an acknowledgement of the weight update of a - * validationID from the P-Chain. The validator weight change should not have any effect until this method is successfully called. - * - * Emits a {CompletedValidatorWeightUpdate} event on success - * - * @param messageIndex The index of the Warp message to be received providing the acknowledgement. - */ - function completeValidatorWeightUpdate( - uint32 messageIndex - ) virtual public returns (bytes32); - - /// @notice Returns the ID of the Subnet tied to this manager - function subnetID() virtual public view returns (bytes32); - - /// @notice Returns the validation details for a given validation ID - function getValidator( - bytes32 validationID - ) virtual public view returns (Validator memory); - - /// @notice Returns the total weight of the current L1 validator set - function l1TotalWeight() virtual public view returns (uint64); - - /** - * @notice Initiate a validator registration by issuing a RegisterL1ValidatorTx Warp message. The validator should - * not be considered active until completeValidatorRegistration is called. + * @notice Initiates validator weight update by issuing a L1ValidatorWeightMessage with a nonzero weight. + * The validator weight change should not have any effect until completeValidatorWeightUpdate is successfully called. * - * Emits an {InitiatedValidatorRegistration} event on success. + * Emits an {InitiatedValidatorWeightUpdate} event on success. * - * @param nodeID The ID of the node to add to the L1 - * @param blsPublicKey The BLS public key of the validator - * @param registrationExpiry The time after which this message is invalid - * @param remainingBalanceOwner The remaining balance owner of the validator - * @param disableOwner The disable owner of the validator - * @param weight The weight of the node on the L1 + * @param validationID The ID of the validator to modify. + * @param weight The new weight of the validator. + * @return nonce The validator nonce associated with the weight change. + * @return messageID The ID of the L1ValidatorWeightMessage used to update the validator's weight. */ - function _initiateValidatorRegistration( - bytes memory nodeID, - bytes memory blsPublicKey, - uint64 registrationExpiry, - PChainOwner memory remainingBalanceOwner, - PChainOwner memory disableOwner, + function _initiateValidatorWeightUpdate( + bytes32 validationID, uint64 weight - ) virtual internal returns (bytes32); + ) virtual internal returns (uint64 nonce, bytes32 messageID); /** - * @notice Initiate a validator weight update by issuing a SetL1ValidatorWeightTx Warp message. - * If the weight is 0, this initiates the removal of the validator from the L1. The validator weight change - * should not have any effect until completeValidatorWeightUpdate is successfully called. + * @notice Completes the validator weight update process by consuming a L1ValidatorWeightMessage from the P-Chain + * acknowledging the weight update. The validator weight change should not have any effect until this method is successfully called. * - * Emits an {InitiatedValidatorWeightUpdate} event on success. + * Emits a {CompletedValidatorWeightUpdate} event on success. * - * @param validationID The ID of the validation period to modify - * @param weight The new weight of the validation + * @param messageIndex The index of the L1ValidatorWeightMessage message to be received providing the acknowledgement. + * @return validationID The ID of the validator. */ - function _initiateValidatorWeightUpdate( - bytes32 validationID, - uint64 weight - ) virtual internal returns (uint64, bytes32); + function completeValidatorWeightUpdate( + uint32 messageIndex + ) virtual public returns (bytes32 validationID); } \ No newline at end of file diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 3579cfd56..e4a0e2393 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -192,7 +192,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida $._validationPeriods[validationID].endTime = 0; totalWeight += initialValidator.weight; - emit InitialValidatorCreated( + emit RegisteredInitialValidator( validationID, initialValidator.nodeID, initialValidator.weight ); } @@ -306,8 +306,8 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida $._validationPeriods[validationID].startTime = 0; // The validation period only starts once the registration is acknowledged. $._validationPeriods[validationID].endTime = 0; - emit ValidationPeriodCreated( - validationID, nodeID, messageID, weight, registrationExpiry + emit InitiatedValidatorRegistration( + validationID, nodeID, messageID, registrationExpiry, weight ); return validationID; @@ -352,8 +352,8 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida delete $._pendingRegisterValidationMessages[validationID]; $._validationPeriods[validationID].status = ValidatorStatus.Active; $._validationPeriods[validationID].startTime = uint64(block.timestamp); - emit ValidationPeriodRegistered( - validationID, $._validationPeriods[validationID].weight, block.timestamp + emit CompletedValidatorRegistration( + validationID, $._validationPeriods[validationID].nodeID, $._validationPeriods[validationID].weight ); return validationID; @@ -389,7 +389,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida uint32 messageIndex ) virtual override public returns (bytes32) { WarpMessage memory warpMessage = _getPChainWarpMessage(messageIndex); - (bytes32 validationID, uint64 nonce,) = + (bytes32 validationID, uint64 nonce, uint64 weight) = ValidatorMessages.unpackL1ValidatorWeightMessage(warpMessage.payload); ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); @@ -402,6 +402,8 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida $._validationPeriods[validationID].receivedNonce = nonce; + emit CompletedValidatorWeightUpdate(validationID, nonce, weight); + return validationID; } @@ -439,7 +441,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida (, bytes32 messageID) = _initiateValidatorWeightUpdate(validationID, 0); // Emit the event to signal the start of the validator removal process. - emit ValidatorRemovalInitialized(validationID, messageID, validator.weight, block.timestamp); + emit InitiatedValidatorRemoval(validationID, messageID, validator.weight, uint64(block.timestamp)); } /** @@ -504,7 +506,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida $._validationPeriods[validationID] = validator; // Emit event. - emit ValidationPeriodEnded(validationID, validator.status); + emit CompletedValidatorRemoval(validationID); return (validationID, validator); } @@ -554,11 +556,11 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida ValidatorMessages.packL1ValidatorWeightMessage(validationID, nonce, newWeight) ); - emit ValidatorWeightUpdate({ + emit InitiatedValidatorWeightUpdate({ validationID: validationID, nonce: nonce, - weight: newWeight, - setWeightMessageID: messageID + weightUpdateMessageID: messageID, + weight: newWeight }); return (nonce, messageID); diff --git a/contracts/validator-manager/interfaces/IValidatorManager.sol b/contracts/validator-manager/interfaces/IValidatorManager.sol index 37001c44a..414ab5e85 100644 --- a/contracts/validator-manager/interfaces/IValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IValidatorManager.sol @@ -44,64 +44,6 @@ struct ValidatorRegistrationInput { * @notice Interface for Validator Manager contracts that implement Subnet-only Validator management. */ interface IValidatorManager { - /** - * @notice Emitted when a new validation period is created by locking stake in the manager contract. - * Note: This event does not mean that the validation period has been successfully registered on the P-Chain, - * and rewards for this validation period will not begin accruing until the {ValidationPeriodRegistered} event is - * emitted. - * @param validationID The ID of the validation period being created. - * @param nodeID The node ID of the validator being registered. - * @param registerValidationMessageID The ID of the ICM message that will be sent to the P-Chain to register the - * validation period. - * @param weight The weight of the validator being registered. - * @param registrationExpiry The Unix timestamp after which the reigistration is no longer valid on the P-Chain. - */ - event ValidationPeriodCreated( - bytes32 indexed validationID, - bytes indexed nodeID, - bytes32 indexed registerValidationMessageID, - uint64 weight, - uint64 registrationExpiry - ); - - event InitialValidatorCreated( - bytes32 indexed validationID, bytes indexed nodeID, uint64 weight - ); - - /** - * @notice Emitted when the staking manager learns that the validation period has been successfully registered - * on the P-Chain. Rewards for this validation period will begin accruing when this event is emitted. - * @param validationID The ID of the validation period being registered. - * @param weight The weight of the validator being registered. - * @param timestamp The time at which the validation period was registered with the contract. - */ - event ValidationPeriodRegistered( - bytes32 indexed validationID, uint64 weight, uint256 timestamp - ); - - /** - * @notice Emitted when the process of ending a registered validation period is started by calling - * {initializeEndValidation}. - * Note: The stake for this validation period remains locked until a {ValidationPeriodRemoved} event is emitted. - * @param validationID The ID of the validation period being removed. - * @param setWeightMessageID The ID of the ICM message that updates the validator's weight on the P-Chain. - * @param weight The weight of the validator being removed. - * @param endTime The time at which the removal was initiated. - */ - event ValidatorRemovalInitialized( - bytes32 indexed validationID, - bytes32 indexed setWeightMessageID, - uint64 weight, - uint256 endTime - ); - - /** - * @notice Emitted when the stake for a validation period is unlocked and returned to the staker. - * This is done by calling {completeEndValidation}, which provides proof from the P-Chain that the - * validation period is not active and will never be active in the future. - * @param validationID The ID of the validation period being removed. - */ - event ValidationPeriodEnded(bytes32 indexed validationID, ValidatorStatus indexed status); /** * @notice Event emitted when validator weight is updated. From 23344f8f720237f452778b03d1dcb401f384d846 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Fri, 10 Jan 2025 15:43:32 -0600 Subject: [PATCH 03/29] cleanup --- contracts/validator-manager/ACP99Manager.sol | 2 ++ .../interfaces/IValidatorManager.sol | 15 --------------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/contracts/validator-manager/ACP99Manager.sol b/contracts/validator-manager/ACP99Manager.sol index c430e353b..c43bde1ad 100644 --- a/contracts/validator-manager/ACP99Manager.sol +++ b/contracts/validator-manager/ACP99Manager.sol @@ -65,6 +65,8 @@ struct Validator { uint64 endTime; } +// solhint-disable ordering + /* * @title ACP99Manager * @notice The ACP99Manager interface represents the functionality for sovereign L1 diff --git a/contracts/validator-manager/interfaces/IValidatorManager.sol b/contracts/validator-manager/interfaces/IValidatorManager.sol index 414ab5e85..ebfc7397e 100644 --- a/contracts/validator-manager/interfaces/IValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IValidatorManager.sol @@ -44,21 +44,6 @@ struct ValidatorRegistrationInput { * @notice Interface for Validator Manager contracts that implement Subnet-only Validator management. */ interface IValidatorManager { - - /** - * @notice Event emitted when validator weight is updated. - * @param validationID The ID of the validation period being updated - * @param nonce The message nonce used to update the validator weight - * @param weight The updated validator weight that is sent to the P-Chain - * @param setWeightMessageID The ID of the ICM message that updates the validator's weight on the P-Chain - */ - event ValidatorWeightUpdate( - bytes32 indexed validationID, - uint64 indexed nonce, - uint64 weight, - bytes32 setWeightMessageID - ); - /** * @notice Resubmits a validator registration message to be sent to the P-Chain. * Only necessary if the original message can't be delivered due to validator churn. From e9008ed9b9085687f1bf9a5a6956448140022dbc Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Tue, 14 Jan 2025 13:26:37 -0600 Subject: [PATCH 04/29] clean up comments --- contracts/validator-manager/ACP99Manager.sol | 21 ++++++++++--------- .../validator-manager/PoSValidatorManager.sol | 5 ----- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/contracts/validator-manager/ACP99Manager.sol b/contracts/validator-manager/ACP99Manager.sol index c43bde1ad..ca04e782c 100644 --- a/contracts/validator-manager/ACP99Manager.sol +++ b/contracts/validator-manager/ACP99Manager.sol @@ -25,7 +25,7 @@ struct InitialValidator { uint64 weight; } -/// @notice L1 validator status +/// @notice L1 validator status. enum ValidatorStatus { Unknown, PendingAdded, @@ -45,14 +45,15 @@ struct PChainOwner { } /** - * @notice Contains the active state of a Validator - * @param status The validator status - * @param nodeID The NodeID of the validator - * @param startingWeight The weight of the validator at the time of registration - * @param messageNonce The current weight update nonce - * @param weight The current weight of the validator - * @param startTime The start time of the validator - * @param endTime The end time of the validator + * @notice Contains the active state of a Validator. + * @param status The validator status. + * @param nodeID The NodeID of the validator. + * @param startingWeight The weight of the validator at the time of registration. + * @param sentNonce The current weight update nonce sent by the manager. + * @param receivedNonce The highest nonce received from the P-Chain + * @param weight The current weight of the validator. + * @param startTime The start time of the validator. + * @param endTime The end time of the validator. */ struct Validator { ValidatorStatus status; @@ -70,7 +71,7 @@ struct Validator { /* * @title ACP99Manager * @notice The ACP99Manager interface represents the functionality for sovereign L1 - * validator management, as specified in ACP-77 + * validator management, as specified in ACP-77. */ abstract contract ACP99Manager { /// @notice Emitted when an initial validator is registered. diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 0a1e2f5b5..3e1482675 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -851,9 +851,6 @@ abstract contract PoSValidatorManager is /** * @notice See {IPoSValidatorManager-completeEndDelegation}. */ - // TODONOW: Rather than ending on a delegation by delegation basis, - // Can we instead track the highest acknowledged nonce, delivered via completeValidatorWeightChange? - // We'd still have a delegation specific collectDelegationRewards or similar, but that would check against this nonce. function completeEndDelegation( bytes32 delegationID, uint32 messageIndex @@ -876,7 +873,6 @@ abstract contract PoSValidatorManager is revert InvalidValidationID(validationID); } - // The received nonce should be at least as high as the delegation's ending nonce. This allows a weight // update using a higher nonce (which implicitly includes the delegation's weight update) to be used to // complete delisting for an earlier delegation. This is necessary because the P-Chain is only willing @@ -897,7 +893,6 @@ abstract contract PoSValidatorManager is // To prevent churn tracker abuse, check that one full churn period has passed, // so a delegator may not stake twice in the same churn period. - // TODONOW: Is it safe to move this to initializeEndDelegation? if (block.timestamp < delegator.startTime + _getChurnPeriodSeconds()) { revert MinStakeDurationNotPassed(uint64(block.timestamp)); } From e0b8ac503573dd3c38bae870725954b982afcbc3 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Tue, 14 Jan 2025 15:03:12 -0600 Subject: [PATCH 05/29] unit tests passing --- contracts/validator-manager/ACP99Manager.sol | 5 +- .../validator-manager/PoAValidatorManager.sol | 2 +- .../validator-manager/PoSValidatorManager.sol | 16 +++-- contracts/validator-manager/README.md | 2 + .../validator-manager/ValidatorManager.sol | 4 +- .../tests/ERC20TokenStakingManagerTests.t.sol | 5 +- .../NativeTokenStakingManagerTests.t.sol | 6 +- .../tests/PoAValidatorManagerTests.t.sol | 8 ++- .../tests/PoSValidatorManagerTests.t.sol | 49 ++++++------- .../tests/ValidatorManagerTests.t.sol | 69 +++++++++++-------- .../tests/ValidatorMessagesTests.t.sol | 2 +- 11 files changed, 95 insertions(+), 73 deletions(-) diff --git a/contracts/validator-manager/ACP99Manager.sol b/contracts/validator-manager/ACP99Manager.sol index ca04e782c..8b22828b9 100644 --- a/contracts/validator-manager/ACP99Manager.sol +++ b/contracts/validator-manager/ACP99Manager.sol @@ -222,9 +222,10 @@ abstract contract ACP99Manager { * Emits a {CompletedValidatorWeightUpdate} event on success. * * @param messageIndex The index of the L1ValidatorWeightMessage message to be received providing the acknowledgement. - * @return validationID The ID of the validator. + * @return validationID The ID of the validator, retreived from the L1ValidatorWeightMessage. + * @return nonce The nonce of the validator, retreived from the L1ValidatorWeightMessage. */ function completeValidatorWeightUpdate( uint32 messageIndex - ) virtual public returns (bytes32 validationID); + ) virtual public returns (bytes32 validationID, uint64 nonce); } \ No newline at end of file diff --git a/contracts/validator-manager/PoAValidatorManager.sol b/contracts/validator-manager/PoAValidatorManager.sol index 6544f64fd..23fc72408 100644 --- a/contracts/validator-manager/PoAValidatorManager.sol +++ b/contracts/validator-manager/PoAValidatorManager.sol @@ -74,7 +74,7 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU } /** - * @notice See {IValidatorManager-completeEndValidation}. + * @notice See {ACP99Manager-completeValidatorRemoval}. */ function completeValidatorRemoval(uint32 messageIndex) virtual override public returns (bytes32) { (bytes32 validationID,) = _completeEndValidation(messageIndex); diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 3e1482675..c49ec2a86 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -328,8 +328,10 @@ abstract contract PoSValidatorManager is ) internal returns (bool) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); - Validator memory validator = getValidator(validationID); + // TODONOW: Functions that modify Validator state invalid any references to the Validator object. + // How can we make this safer to use? _initiateValidatorRemoval(validationID); + Validator memory validator = getValidator(validationID); // Non-PoS validators are required to boostrap the network, but are not eligible for rewards. if (!_isPoSValidator(validationID)) { @@ -609,12 +611,12 @@ abstract contract PoSValidatorManager is // If we've already received a weight update with a nonce greater than the delegation's starting nonce, // then there's no requirement to include an ICM message in this function call. if (validator.receivedNonce < delegator.startingNonce) { - bytes32 messageValidationID = completeValidatorWeightUpdate(messageIndex); + (bytes32 messageValidationID, uint64 nonce) = completeValidatorWeightUpdate(messageIndex); if (validationID != messageValidationID) { revert InvalidValidationID(delegator.validationID); } - if (validator.receivedNonce < delegator.startingNonce) { - revert InvalidNonce(validator.receivedNonce); + if (nonce < delegator.startingNonce) { + revert InvalidNonce(nonce); } } @@ -868,7 +870,7 @@ abstract contract PoSValidatorManager is // We only expect an ICM message if we haven't received a weight update with a nonce greater than the delegation's ending nonce if (getValidator(delegator.validationID).status != ValidatorStatus.Completed && validator.receivedNonce < delegator.endingNonce) { - bytes32 validationID = completeValidatorWeightUpdate(messageIndex); + (bytes32 validationID, uint64 nonce) = completeValidatorWeightUpdate(messageIndex); if (delegator.validationID != validationID) { revert InvalidValidationID(validationID); } @@ -877,8 +879,8 @@ abstract contract PoSValidatorManager is // update using a higher nonce (which implicitly includes the delegation's weight update) to be used to // complete delisting for an earlier delegation. This is necessary because the P-Chain is only willing // to sign the latest weight update. - if (delegator.endingNonce > validator.receivedNonce) { - revert InvalidNonce(validator.receivedNonce); + if (delegator.endingNonce > nonce) { + revert InvalidNonce(nonce); } } diff --git a/contracts/validator-manager/README.md b/contracts/validator-manager/README.md index 6ab93bae6..7584ea89c 100644 --- a/contracts/validator-manager/README.md +++ b/contracts/validator-manager/README.md @@ -1,5 +1,7 @@ # Validator Manager Contract +TODO + The contracts in this directory define the Validator Manager used to manage Avalanche L1 validators, as defined in [ACP-77](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets). `ValidatorManager.sol` is the top-level abstract contract that provides the basic functionality. The other contracts are related as follows: ```mermaid diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index e4a0e2393..583c1d82b 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -387,7 +387,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida function completeValidatorWeightUpdate( uint32 messageIndex - ) virtual override public returns (bytes32) { + ) virtual override public returns (bytes32, uint64) { WarpMessage memory warpMessage = _getPChainWarpMessage(messageIndex); (bytes32 validationID, uint64 nonce, uint64 weight) = ValidatorMessages.unpackL1ValidatorWeightMessage(warpMessage.payload); @@ -404,7 +404,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida emit CompletedValidatorWeightUpdate(validationID, nonce, weight); - return validationID; + return (validationID, nonce); } /** diff --git a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol index 013398a6c..e75987602 100644 --- a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol @@ -9,7 +9,7 @@ import {PoSValidatorManagerTest} from "./PoSValidatorManagerTests.t.sol"; import {ERC20TokenStakingManager} from "../ERC20TokenStakingManager.sol"; import {PoSValidatorManager, PoSValidatorManagerSettings} from "../PoSValidatorManager.sol"; import {ExampleRewardCalculator} from "../ExampleRewardCalculator.sol"; -import {ValidatorRegistrationInput, IValidatorManager} from "../interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../interfaces/IValidatorManager.sol"; import {ICMInitializable} from "../../utilities/ICMInitializable.sol"; import {ExampleERC20} from "@mocks/ExampleERC20.sol"; import {IERC20} from "@openzeppelin/contracts@5.0.2/token/ERC20/IERC20.sol"; @@ -17,6 +17,7 @@ import {IERC20Mintable} from "../interfaces/IERC20Mintable.sol"; import {SafeERC20} from "@openzeppelin/contracts@5.0.2/token/ERC20/utils/SafeERC20.sol"; import {Initializable} from "@openzeppelin/contracts@5.0.2/proxy/utils/Initializable.sol"; import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; +import {ACP99Manager} from "../ACP99Manager.sol"; contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { using SafeERC20 for IERC20Mintable; @@ -218,7 +219,7 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { vm.expectCall(address(token), abi.encodeCall(IERC20Mintable.mint, (account, amount))); } - function _setUp() internal override returns (IValidatorManager) { + function _setUp() internal override returns (ACP99Manager) { // Construct the object under test app = new ERC20TokenStakingManager(ICMInitializable.Allowed); token = new ExampleERC20(); diff --git a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol index c1c80fcbb..45d0763c7 100644 --- a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol @@ -9,13 +9,15 @@ import {Test} from "@forge-std/Test.sol"; import {PoSValidatorManagerTest} from "./PoSValidatorManagerTests.t.sol"; import {NativeTokenStakingManager} from "../NativeTokenStakingManager.sol"; import {PoSValidatorManager, PoSValidatorManagerSettings} from "../PoSValidatorManager.sol"; -import {ValidatorRegistrationInput, IValidatorManager} from "../interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../interfaces/IValidatorManager.sol"; import {ExampleRewardCalculator} from "../ExampleRewardCalculator.sol"; import {ICMInitializable} from "../../utilities/ICMInitializable.sol"; import {INativeMinter} from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/INativeMinter.sol"; import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; import {Initializable} from "@openzeppelin/contracts@5.0.2/proxy/utils/Initializable.sol"; +import {ACP99Manager} from "../ACP99Manager.sol"; + contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { NativeTokenStakingManager public app; @@ -175,7 +177,7 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { vm.expectCall(nativeMinter, callData); } - function _setUp() internal override returns (IValidatorManager) { + function _setUp() internal override returns (ACP99Manager) { // Construct the object under test app = new TestableNativeTokenStakingManager(ICMInitializable.Allowed); rewardCalculator = new ExampleRewardCalculator(DEFAULT_REWARD_RATE); diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index 39be0f19e..7408cedef 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -8,8 +8,8 @@ pragma solidity 0.8.25; import {PoAValidatorManager} from "../PoAValidatorManager.sol"; import { ValidatorManagerSettings, - ValidatorRegistrationInput, - IValidatorManager + ValidatorRegistrationInput + } from "../interfaces/IValidatorManager.sol"; import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; @@ -17,6 +17,8 @@ import {ValidatorManager} from "../ValidatorManager.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable@5.0.2/access/OwnableUpgradeable.sol"; import {Initializable} from "@openzeppelin/contracts@5.0.2/proxy/utils/Initializable.sol"; +import {ACP99Manager} from "../ACP99Manager.sol"; + contract PoAValidatorManagerTest is ValidatorManagerTest { PoAValidatorManager public app; @@ -109,7 +111,7 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { return app.initializeEndValidation(validationID); } - function _setUp() internal override returns (IValidatorManager) { + function _setUp() internal override returns (ACP99Manager) { app = new PoAValidatorManager(ICMInitializable.Allowed); app.initialize( ValidatorManagerSettings({ diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index f8d64b0f7..8a3a743f0 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -55,8 +55,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { disableOwner: DEFAULT_P_CHAIN_OWNER }); - event ValidationUptimeUpdated(bytes32 indexed validationID, uint64 uptime); - event DelegatorAdded( bytes32 indexed delegationID, bytes32 indexed validationID, @@ -73,13 +71,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID); - event ValidatorWeightUpdate( - bytes32 indexed validationID, - uint64 indexed nonce, - uint64 weight, - bytes32 setWeightMessageID - ); - event DelegationEnded( bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees ); @@ -304,7 +295,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetPChainWarpMessage(setValidatorWeightPayload, true); vm.warp(DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP); - vm.expectRevert(abi.encodeWithSelector(PoSValidatorManager.InvalidNonce.selector, nonce)); + vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, nonce)); posValidatorManager.completeDelegatorRegistration(delegationID2, 0); } @@ -1173,7 +1164,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); _mockGetPChainWarpMessage(setValidatorWeightPayload, true); - vm.expectRevert(abi.encodeWithSelector(PoSValidatorManager.InvalidNonce.selector, nonce)); + vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, nonce)); posValidatorManager.completeEndDelegation(delegationID2, 0); } @@ -1512,7 +1503,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetUptimeWarpMessage(uptimeMsg2, true); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidatorRemovalInitialized( + emit InitiatedValidatorRemoval( validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); @@ -1541,7 +1532,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.submitUptimeProof(validationID, 0); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidatorRemovalInitialized( + emit InitiatedValidatorRemoval( validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); @@ -1621,7 +1612,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockSendWarpMessage(setValidatorWeightPayload, bytes32(0)); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidatorRemovalInitialized( + emit InitiatedValidatorRemoval( validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); @@ -1633,7 +1624,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, false); _mockGetPChainWarpMessage(l1ValidatorRegistrationMessage, true); - posValidatorManager.completeEndValidation(0); + posValidatorManager.completeValidatorRemoval(0); assertEq(_getStakeAssetBalance(address(this)), balanceBefore); } @@ -1688,12 +1679,13 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID = _initializeDefaultDelegatorRegistration(validationID); bytes memory setValidatorWeightPayload = ValidatorMessages.packL1ValidatorWeightMessage( - delegationID, 2, DEFAULT_DELEGATOR_WEIGHT + DEFAULT_WEIGHT + delegationID, 1, DEFAULT_DELEGATOR_WEIGHT + DEFAULT_WEIGHT ); _mockGetPChainWarpMessage(setValidatorWeightPayload, true); + // The invalid validationID has sent no weight updates, so its nonce should be 0 vm.expectRevert( - abi.encodeWithSelector(ValidatorManager.InvalidValidationID.selector, validationID) + abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, 1) ); vm.warp(DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP); @@ -1722,7 +1714,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetPChainWarpMessage(setValidatorWeightPayload, true); vm.expectRevert( - abi.encodeWithSelector(ValidatorManager.InvalidValidationID.selector, delegationID) + abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, 2) ); posValidatorManager.completeEndDelegation(delegationID, 0); @@ -1891,7 +1883,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetUptimeWarpMessage(uptimeMsg, true); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidatorRemovalInitialized( + emit InitiatedValidatorRemoval( validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); @@ -1993,6 +1985,9 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _beforeSend(_weightToValue(weight), delegatorAddress); + vm.expectEmit(true, true, true, true, address(posValidatorManager)); + emit InitiatedValidatorWeightUpdate(validationID, expectedNonce, bytes32(0), expectedValidatorWeight); + vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit DelegatorAdded({ delegationID: keccak256(abi.encodePacked(validationID, expectedNonce)), @@ -2029,6 +2024,10 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, expectedNonce, expectedValidatorWeight ); vm.expectEmit(true, true, true, true, address(posValidatorManager)); + emit CompletedValidatorWeightUpdate( + validationID, expectedNonce, expectedValidatorWeight + ); + vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit DelegatorRegistered({ delegationID: delegationID, validationID: validationID, @@ -2161,11 +2160,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, endDelegationTimestamp - startDelegationTimestamp ); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit ValidatorWeightUpdate({ + emit InitiatedValidatorWeightUpdate({ validationID: validationID, nonce: expectedNonce, weight: expectedValidatorWeight, - setWeightMessageID: bytes32(0) + weightUpdateMessageID: bytes32(0) }); vm.expectEmit(true, true, true, true, address(posValidatorManager)); @@ -2305,7 +2304,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, false); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit ValidationPeriodEnded(validationID, ValidatorStatus.Completed); + emit CompletedValidatorRemoval(validationID); uint256 balanceBefore = _getStakeAssetBalance(validatorOwner); uint256 rewardRecipientBalanceBefore = _getStakeAssetBalance(rewardRecipient); @@ -2334,7 +2333,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function _completeEndValidation(bytes memory l1ValidatorRegistrationMessage) internal { _mockGetPChainWarpMessage(l1ValidatorRegistrationMessage, true); - posValidatorManager.completeEndValidation(0); + posValidatorManager.completeValidatorRemoval(0); } function _completeEndDelegationWithChecks( @@ -2352,6 +2351,10 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory weightUpdateMessage = ValidatorMessages.packL1ValidatorWeightMessage( validationID, expectedNonce, validatorWeight ); + vm.expectEmit(true, true, true, true, address(posValidatorManager)); + emit CompletedValidatorWeightUpdate( + validationID, expectedNonce, validatorWeight + ); vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit DelegationEnded( diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 6f74b48ac..7d892d7d9 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -6,18 +6,14 @@ pragma solidity 0.8.25; import {Test} from "@forge-std/Test.sol"; -import {ValidatorManager, ConversionData, InitialValidator} from "../ValidatorManager.sol"; +import {ValidatorManager} from "../ValidatorManager.sol"; import {ValidatorMessages} from "../ValidatorMessages.sol"; -import { - ValidatorStatus, - ValidatorRegistrationInput, - PChainOwner, - IValidatorManager -} from "../interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../interfaces/IValidatorManager.sol"; import { WarpMessage, IWarpMessenger } from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/IWarpMessenger.sol"; +import {ACP99Manager, ConversionData, InitialValidator, ValidatorStatus, PChainOwner} from "../ACP99Manager.sol"; // TODO: Remove this once all unit tests implemented // solhint-disable no-empty-blocks @@ -62,30 +58,43 @@ abstract contract ValidatorManagerTest is Test { // Used to create unique validator IDs in {_newNodeID} uint64 public nodeIDCounter = 0; - event ValidationPeriodCreated( - bytes32 indexed validationID, - bytes indexed nodeID, - bytes32 indexed registerValidationMessageID, - uint64 weight, - uint64 registrationExpiry + event RegisteredInitialValidator( + bytes32 indexed validationID, bytes nodeID, uint64 weight ); - event InitialValidatorCreated( - bytes32 indexed validationID, bytes indexed nodeID, uint64 weight + event InitiatedValidatorRegistration( + bytes32 indexed validationID, + bytes nodeID, + bytes32 registrationMessageID, + uint64 registrationExpiry, + uint64 weight ); - event ValidationPeriodRegistered( - bytes32 indexed validationID, uint64 weight, uint256 timestamp + event CompletedValidatorRegistration( + bytes32 indexed validationID, bytes nodeID, uint64 weight ); - event ValidatorRemovalInitialized( + event InitiatedValidatorRemoval( bytes32 indexed validationID, - bytes32 indexed setWeightMessageID, + bytes32 validatorWeightMessageID, uint64 weight, - uint256 endTime + uint64 endTime ); - event ValidationPeriodEnded(bytes32 indexed validationID, ValidatorStatus indexed status); + event CompletedValidatorRemoval( + bytes32 indexed validationID + ); + + event InitiatedValidatorWeightUpdate( + bytes32 indexed validationID, + uint64 nonce, + bytes32 weightUpdateMessageID, + uint64 weight + ); + + event CompletedValidatorWeightUpdate( + bytes32 indexed validationID, uint64 nonce, uint64 weight + ); receive() external payable {} fallback() external payable {} @@ -273,9 +282,9 @@ abstract contract ValidatorManagerTest is Test { _mockGetPChainWarpMessage(l1ValidatorRegistrationMessage, true); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidationPeriodEnded(validationID, ValidatorStatus.Completed); + emit CompletedValidatorRemoval(validationID); - validatorManager.completeEndValidation(0); + validatorManager.completeValidatorRemoval(0); } function testCompleteInvalidatedValidation() public { @@ -292,14 +301,14 @@ abstract contract ValidatorManagerTest is Test { _mockGetPChainWarpMessage(l1ValidatorRegistrationMessage, true); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidationPeriodEnded(validationID, ValidatorStatus.Invalidated); + emit CompletedValidatorRemoval(validationID); - validatorManager.completeEndValidation(0); + validatorManager.completeValidatorRemoval(0); } function testInitialWeightsTooLow() public { vm.prank(address(123)); - IValidatorManager manager = _setUp(); + ACP99Manager manager = _setUp(); _mockGetBlockchainID(); vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, 4)); @@ -309,7 +318,7 @@ abstract contract ValidatorManagerTest is Test { function testRemoveValidatorTotalWeight5() public { // Use prank here, because otherwise each test will end up with a different contract address, leading to a different subnet conversion hash. vm.prank(address(123)); - IValidatorManager manager = _setUp(); + ACP99Manager manager = _setUp(); _mockGetBlockchainID(); _mockGetPChainWarpMessage( @@ -446,7 +455,7 @@ abstract contract ValidatorManagerTest is Test { _beforeSend(_weightToValue(weight), address(this)); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidationPeriodCreated(validationID, nodeID, bytes32(0), weight, registrationExpiry); + emit InitiatedValidatorRegistration(validationID, nodeID, bytes32(0), registrationExpiry, weight); _initializeValidatorRegistration( ValidatorRegistrationInput({ @@ -478,7 +487,7 @@ abstract contract ValidatorManagerTest is Test { vm.warp(registrationTimestamp); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit ValidationPeriodRegistered(validationID, weight, registrationTimestamp); + emit CompletedValidatorRegistration(validationID, nodeID, weight); validatorManager.completeValidatorRegistration(0); } @@ -622,7 +631,7 @@ abstract contract ValidatorManagerTest is Test { address rewardRecipient ) internal virtual; - function _setUp() internal virtual returns (IValidatorManager); + function _setUp() internal virtual returns (ACP99Manager); function _beforeSend(uint256 amount, address spender) internal virtual; diff --git a/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol b/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol index 2c05d20a7..50d56dbff 100644 --- a/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorMessagesTests.t.sol @@ -7,7 +7,7 @@ pragma solidity 0.8.25; import {Test} from "@forge-std/Test.sol"; import {ValidatorMessages} from "../ValidatorMessages.sol"; -import {PChainOwner, ConversionData, InitialValidator} from "../interfaces/IValidatorManager.sol"; +import {PChainOwner, ConversionData, InitialValidator} from "../ACP99Manager.sol"; contract ValidatorMessagesTest is Test { bytes32 public constant DEFAULT_SUBNET_ID = From fdf3d8f6afbdac6e4080d8518e25f608020e44ce Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Tue, 14 Jan 2025 15:06:04 -0600 Subject: [PATCH 06/29] bindings --- .../ERC20TokenStakingManager.go | 1113 ++++++++++------- .../ExampleRewardCalculator.go | 2 +- .../NativeTokenStakingManager.go | 1113 ++++++++++------- .../PoAValidatorManager.go | 831 +++++++----- .../IPoSValidatorManager.go | 1007 +-------------- .../IValidatorManager/IValidatorManager.go | 1007 +-------------- 6 files changed, 1803 insertions(+), 3270 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 84936ff6f..b82e01cd7 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -68,10 +68,11 @@ type Validator struct { Status uint8 NodeID []byte StartingWeight uint64 - MessageNonce uint64 + SentNonce uint64 + ReceivedNonce uint64 Weight uint64 - StartedAt uint64 - EndedAt uint64 + StartTime uint64 + EndTime uint64 } // ValidatorManagerSettings is an auto generated low-level Go binding around an user-defined struct. @@ -103,8 +104,8 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"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\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615f4b380380615f4b83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615dfe8061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff61461051c578063df93d8de1461053c578063e4a63c4014610546578063fb8b11dd1461055a578063fd7ac5e71461056d575f80fd5b8063b771b3bc146104cc578063ba3a4b97146104da578063bc5fbfec146104ed578063bee0a03f14610501578063c974d1b614610514575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461046c5780639e478eea1461047f578063a3a65e4814610492578063a9778a7a146102ee578063afb98096146104a5575f80fd5b806380dd672f146104185780638280a25a1461042b5780638ef34c981461043357806393e24598146104465780639ae0644714610459575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a7578063732214f8146103ba57806376f78621146103c1578063785e9e86146103d45780637d8d2f7714610405575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614d42565b610580565b005b610256610266366004614d7d565b610591565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614d42565b610821565b6102566102ab366004614d94565b61082d565b6102566102be366004614de2565b610de3565b6102d66102d1366004614d7d565b610e57565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614e17565b610eab565b61025661032b366004614d42565b610ebe565b61025661033e366004614e65565b610eca565b610356610351366004614ea3565b610f9c565b604051908152602001610281565b610256610372366004614e17565b610fd1565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614de2565b610fdd565b6103566103b5366004614f0a565b6112a5565b6103565f81565b6102566103cf366004614d42565b6112c5565b5f80516020615d49833981519152546001600160a01b03165b6040516001600160a01b039091168152602001610281565b610256610413366004614e17565b6112d1565b610256610426366004614de2565b6112dd565b610273603081565b610256610441366004614f25565b611517565b610256610454366004614d7d565b6115c8565b610256610467366004614e17565b61165c565b61035661047a366004614f53565b611668565b61025661048d366004614f73565b611694565b6102566104a0366004614e65565b611773565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6103ed6005600160991b0181565b6102566104e8366004614d7d565b611969565b6103565f80516020615d6983398151915281565b61025661050f366004614d7d565b611bc2565b610273601481565b61052f61052a366004614d7d565b611cfe565b604051610281919061501b565b6102d66202a30081565b6103565f80516020615d4983398151915281565b610256610568366004614f25565b611e4d565b61035661057b36600461509b565b611ee4565b61058c8383835f611f3f565b505050565b5f8181525f80516020615d898339815191526020526040808220815160e0810190925280545f80516020615d6983398151915293929190829060ff1660058111156105de576105de614fa6565b60058111156105ef576105ef614fa6565b815260200160018201805461060390615106565b80601f016020809104026020016040519081016040528092919081815260200182805461062f90615106565b801561067a5780601f106106515761010080835404028352916020019161067a565b820191905f5260205f20905b81548152906001019060200180831161065d57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106e5576106e5614fa6565b14610721575f8381526005830160205260409081902054905163170cc93360e21b81526107189160ff169060040161513e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610798573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107bf9190810190615247565b6040518263ffffffff1660e01b81526004016107db9190615278565b6020604051808303815f875af11580156107f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081b919061528a565b50505050565b61081b8383835f611f6b565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615d698339815191529060ff161561087f57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e6919061528a565b83602001351461090f576040516372b0a7e760e11b815260208401356004820152602401610718565b3061092060608501604086016152a1565b6001600160a01b0316146109635761093e60608401604085016152a1565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610718565b5f61097160608501856152bc565b905090505f805b828163ffffffff161015610bd9575f61099460608801886152bc565b8363ffffffff168181106109aa576109aa615301565b90506020028101906109bc9190615315565b6109c590615380565b80516040519192505f9160068801916109dd916153fb565b90815260200160405180910390205414610a0d57805160405163a41f772f60e01b81526107189190600401615278565b5f6002885f013584604051602001610a3c92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a56916153fb565b602060405180830381855afa158015610a71573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a94919061528a565b90508086600601835f0151604051610aac91906153fb565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610aec9082615450565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610b6c908561551f565b8251604051919550610b7d916153fb565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610bd29061553f565b9050610978565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c1c910460ff1683615561565b6001600160401b03161015610c4f57604051633e1a785160e01b81526001600160401b0382166004820152602401610718565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c7387612298565b604001516040518263ffffffff1660e01b8152600401610c939190615278565b602060405180830381865af4158015610cae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd2919061528a565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d0c91906156b7565b5f60405180830381865af4158015610d26573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d4d9190810190615247565b90505f600282604051610d6091906153fb565b602060405180830381855afa158015610d7b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d9e919061528a565b9050828114610dca5760405163baaea89d60e01b81526004810182905260248101849052604401610718565b5050506007909201805460ff1916600117905550505050565b610dec826123ae565b610e0c576040516330efa98b60e01b815260048101839052602401610718565b5f610e1683611cfe565b5190506002816005811115610e2d57610e2d614fa6565b14610e4d578060405163170cc93360e21b8152600401610718919061513e565b61081b83836123d7565b5f80610e61612676565b60030154610e6f908461574b565b9050801580610e8457506001600160401b0381115b15610ea55760405163222d164360e21b815260048101849052602401610718565b92915050565b610eb784848484611f6b565b5050505050565b61081b8383835f61269a565b610ed26128d7565b5f610edb612676565b90505f80610ee88461290e565b91509150610ef5826123ae565b610f0157505050610f83565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b03918216911680610f435750805b600483516005811115610f5857610f58614fa6565b03610f6757610f678185612cc6565b610f7d82610f7885604001516112a5565b612cf0565b50505050505b610f9960015f80516020615da983398151915255565b50565b5f610fa56128d7565b610fb185858585612d26565b9050610fc960015f80516020615da983398151915255565b949350505050565b61081b84848484612ea6565b5f610fe6612676565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561101f5761101f614fa6565b600381111561103057611030614fa6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110a682611cfe565b90506001835160038111156110bd576110bd614fa6565b146110de578251604051633b0d540d60e21b8152610718919060040161576a565b6004815160058111156110f3576110f3614fa6565b036111095761110186612ed2565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61112e89612298565b604001516040518263ffffffff1660e01b815260040161114e9190615278565b606060405180830381865af4158015611169573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061118d9190615784565b50915091508184146111ba57846040015160405163089938b360e11b815260040161071891815260200190565b806001600160401b031683606001516001600160401b031610806111f35750806001600160401b03168560a001516001600160401b0316115b1561121c57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610718565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6112ae612676565b60030154610ea5906001600160401b0384166157c4565b61058c8383835f612ea6565b610eb78484848461269a565b6112e56128d7565b5f6112ee612676565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561132757611327614fa6565b600381111561133857611338614fa6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113b1576113b1614fa6565b146113d2578051604051633b0d540d60e21b8152610718919060040161576a565b60046113e18260400151611cfe565b5160058111156113f3576113f3614fa6565b146114f2575f61140284612298565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114419190615278565b606060405180830381865af415801561145c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114809190615784565b5091509150818460400151146114ac5760405163089938b360e11b815260048101839052602401610718565b806001600160401b03168460c001516001600160401b031611156114ee57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610718565b5050505b6114fb84612ed2565b505061151360015f80516020615da983398151915255565b5050565b5f611520612676565b90506001600160a01b0382166115545760405163caa903f960e01b81526001600160a01b0383166004820152602401610718565b5f8381526006820160205260409020546001600160a01b0316331461159a57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610718565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6115d1612676565b90505f6115dd83611cfe565b51905060048160058111156115f4576115f4614fa6565b14611614578060405163170cc93360e21b8152600401610718919061513e565b5f8381526006830160205260409020546001600160a01b031633146116395733611575565b5f83815260068301602052604090205461058c906001600160a01b031684612cc6565b61081b84848484611f3f565b5f6116716128d7565b61167c8333846130cc565b9050610ea560015f80516020615da983398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806116dd575080546001600160401b03808416911610155b156116fb5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556117268484613311565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d698339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117a686612298565b604001516040518263ffffffff1660e01b81526004016117c69190615278565b6040805180830381865af41580156117e0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180491906157db565b915091508061182a57604051632d07135360e01b81528115156004820152602401610718565b5f8281526004840160205260409020805461184490615106565b90505f036118685760405163089938b360e11b815260048101839052602401610718565b60015f838152600580860160205260409091205460ff169081111561188f5761188f614fa6565b146118c2575f8281526005840160205260409081902054905163170cc93360e21b81526107189160ff169060040161513e565b5f82815260048401602052604081206118da91614c91565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f611972612676565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119ab576119ab614fa6565b60038111156119bc576119bc614fa6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a3557611a35614fa6565b14158015611a565750600381516003811115611a5357611a53614fa6565b14155b15611a77578051604051633b0d540d60e21b8152610718919060040161576a565b5f611a858260400151611cfe565b905080606001516001600160401b03165f03611ab7576040516339b894f960e21b815260048101859052602401610718565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b2593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b3f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b669190810190615247565b6040518263ffffffff1660e01b8152600401611b829190615278565b6020604051808303815f875af1158015611b9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb7919061528a565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615d698339815191529190611c0990615106565b90505f03611c2d5760405163089938b360e11b815260048101839052602401610718565b60015f838152600580840160205260409091205460ff1690811115611c5457611c54614fa6565b14611c87575f8281526005820160205260409081902054905163170cc93360e21b81526107189160ff169060040161513e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611cbe92016157fe565b6020604051808303815f875af1158015611cda573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058c919061528a565b611d06614cc8565b5f8281525f80516020615d89833981519152602052604090819020815160e0810190925280545f80516020615d69833981519152929190829060ff166005811115611d5357611d53614fa6565b6005811115611d6457611d64614fa6565b8152602001600182018054611d7890615106565b80601f0160208091040260200160405190810160405280929190818152602001828054611da490615106565b8015611def5780601f10611dc657610100808354040283529160200191611def565b820191905f5260205f20905b815481529060010190602001808311611dd257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611e7f5760405163caa903f960e01b81526001600160a01b0382166004820152602401610718565b5f611e88612676565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611eb65733611575565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615d69833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611f279086908690615888565b90815260200160405180910390205491505092915050565b611f4b84848484611f6b565b61081b57604051631036cf9160e11b815260048101859052602401610718565b5f80611f75612676565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611fae57611fae614fa6565b6003811115611fbf57611fbf614fa6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61203582611cfe565b905060028351600381111561204c5761204c614fa6565b1461206d578251604051633b0d540d60e21b8152610718919060040161576a565b60208301516001600160a01b03163314612109575f8281526006850160205260409020546001600160a01b031633146120a65733611575565b5f82815260068501602052604090205460a08201516120d591600160b01b90046001600160401b03169061551f565b6001600160401b03164210156121095760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610718565b60028151600581111561211e5761211e614fa6565b036122405760028401546080840151612140916001600160401b03169061551f565b6001600160401b03164210156121745760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610718565b87156121865761218482886123d7565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516121bf9184916121ba9190615897565b61332b565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561220284888c613502565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fc99350505050565b60048151600581111561225557612255614fa6565b0361227c5761226583878b613502565b5061226f89612ed2565b6001945050505050610fc9565b805160405163170cc93360e21b8152610718919060040161513e565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156122fc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261232391908101906158b7565b915091508061234557604051636b2f19e960e01b815260040160405180910390fd5b81511561236b578151604051636ba589a560e01b81526004810191909152602401610718565b60208201516001600160a01b0316156123a7576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610718565b5092915050565b5f806123b8612676565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612422573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261244991908101906158b7565b915091508061246b57604051636b2f19e960e01b815260040160405180910390fd5b5f612474612676565b60058101548451919250146124a2578251604051636ba589a560e01b81526004810191909152602401610718565b60208301516001600160a01b0316156124de576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610718565b60208301516001600160a01b03161561251a576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610718565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016125579190615278565b6040805180830381865af4158015612571573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125959190615947565b915091508188146125bc5760405163089938b360e11b815260048101899052602401610718565b5f8881526006840160205260409020600101546001600160401b03908116908216111561264d575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261266b565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126a4612676565b90505f6126b0876136f0565b90506126bb876123ae565b6126ca57600192505050610fc9565b5f8781526006830160205260409020546001600160a01b031633146126ef5733611575565b5f87815260068301602052604090205460a082015161271e91600160b01b90046001600160401b03169061551f565b6001600160401b03168160c001516001600160401b031610156127655760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610718565b5f861561277d5761277688876123d7565b905061279b565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906127c0906112a5565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612829573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061284d919061528a565b90506001600160a01b038616612879575f8981526006850160205260409020546001600160a01b031695505b5f898152600a850160205260408120805483929061289890849061596a565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615da983398151915280546001190161290857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612917614cc8565b5f80516020615d698339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61294a88612298565b604001516040518263ffffffff1660e01b815260040161296a9190615278565b6040805180830381865af4158015612984573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129a891906157db565b9150915080156129cf57604051632d07135360e01b81528115156004820152602401610718565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612a0657612a06614fa6565b6005811115612a1757612a17614fa6565b8152602001600182018054612a2b90615106565b80601f0160208091040260200160405190810160405280929190818152602001828054612a5790615106565b8015612aa25780601f10612a7957610100808354040283529160200191612aa2565b820191905f5260205f20905b815481529060010190602001808311612a8557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b0d57612b0d614fa6565b14158015612b2e5750600181516005811115612b2b57612b2b614fa6565b14155b15612b4f57805160405163170cc93360e21b8152610718919060040161513e565b600381516005811115612b6457612b64614fa6565b03612b725760048152612b77565b600581525b836006018160200151604051612b8d91906153fb565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612bd057612bd0614fa6565b021790555060208201516001820190612be99082615450565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612c8f57612c8f614fa6565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612ccf612676565b5f838152600a820160205260408120805491905590915061081b84826139d5565b5f80516020615d4983398151915254611513906001600160a01b03168383613a4b565b60015f80516020615da983398151915255565b5f80612d30612676565b600281015490915061ffff600160401b90910481169086161080612d59575061271061ffff8616115b15612d7d57604051635f12e6c360e11b815261ffff86166004820152602401610718565b60028101546001600160401b039081169085161015612db9576040516202a06d60e11b81526001600160401b0385166004820152602401610718565b8054831080612dcb5750806001015483115b15612dec5760405163222d164360e21b815260048101849052602401610718565b5f612df684613aaa565b90505f612e0282610e57565b90505f612e0f8983613acd565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b612eb28484848461269a565b61081b57604051635bff683f60e11b815260048101859052602401610718565b5f612edb612676565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f1457612f14614fa6565b6003811115612f2557612f25614fa6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612fc27fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612fd1919061551f565b6001600160401b03164210156130055760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610718565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680613060575060208201515b5f8061306d83888661403f565b915091506130868560200151610f7887606001516112a5565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806130d6612676565b90505f6130e56102d185613aaa565b90505f6130f187611cfe565b90506130fc876123ae565b61311c576040516330efa98b60e01b815260048101889052602401610718565b60028151600581111561313157613131614fa6565b1461315257805160405163170cc93360e21b8152610718919060040161513e565b5f828260800151613163919061551f565b905083600201600a9054906101000a90046001600160401b0316826040015161318c9190615561565b6001600160401b0316816001600160401b031611156131c957604051636d51fe0560e11b81526001600160401b0382166004820152602401610718565b5f806131d58a8461332b565b915091505f8a8360405160200161320392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133196140ec565b61332282614137565b611513816141b1565b5f8281525f80516020615d89833981519152602052604081206002015481905f80516020615d6983398151915290600160801b90046001600160401b03166133738582614219565b5f61337d87614483565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613426573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261344d9190810190615247565b6040518263ffffffff1660e01b81526004016134699190615278565b6020604051808303815f875af1158015613485573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134a9919061528a565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061350c612676565b90505f61351c8660400151611cfe565b90505f60038251600581111561353457613534614fa6565b1480613552575060048251600581111561355057613550614fa6565b145b15613562575060c081015161359f565b60028251600581111561357757613577614fa6565b0361358357504261359f565b815160405163170cc93360e21b8152610718919060040161513e565b86608001516001600160401b0316816001600160401b0316116135c7575f935050505061330a565b600483015460608801515f916001600160a01b031690634f22429f906135ec906112a5565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561366d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613691919061528a565b90506001600160a01b0387166136a957876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b6136f8614cc8565b5f8281525f80516020615d898339815191526020526040808220815160e0810190925280545f80516020615d6983398151915293929190829060ff16600581111561374557613745614fa6565b600581111561375657613756614fa6565b815260200160018201805461376a90615106565b80601f016020809104026020016040519081016040528092919081815260200182805461379690615106565b80156137e15780601f106137b8576101008083540402835291602001916137e1565b820191905f5260205f20905b8154815290600101906020018083116137c457829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561384f5761384f614fa6565b14613882575f8481526005830160205260409081902054905163170cc93360e21b81526107189160ff169060040161513e565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff19169060019084908111156138c7576138c7614fa6565b0217905550602082015160018201906138e09082615450565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f61397e858261332b565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b5f5f80516020615d4983398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a30575f80fd5b505af1158015613a42573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058c91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144f8565b5f610ea5825f80516020615d49833981519152546001600160a01b031690614559565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613b1157604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d6983398151915242613b306060860160408701614f0a565b6001600160401b0316111580613b6a5750613b4e6202a3004261596a565b613b5e6060860160408701614f0a565b6001600160401b031610155b15613ba457613b7f6060850160408601614f0a565b604051635879da1360e11b81526001600160401b039091166004820152602401610718565b60038101546001600160401b0390613bc790600160401b9004821685831661596a565b1115613bf157604051633e1a785160e01b81526001600160401b0384166004820152602401610718565b613c06613c01606086018661597d565b614565565b613c16613c01608086018661597d565b6030613c256020860186615991565b905014613c5757613c396020850185615991565b6040516326475b2f60e11b8152610718925060040190815260200190565b613c618480615991565b90505f03613c8e57613c738480615991565b604051633e08a12560e11b81526004016107189291906159d3565b5f60068201613c9d8680615991565b604051613cab929190615888565b90815260200160405180910390205414613ce457613cc98480615991565b60405163a41f772f60e01b81526004016107189291906159d3565b613cee835f614219565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d2b8a80615991565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d73908b018b615991565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613dbc60608b0160408c01614f0a565b6001600160401b03168152602001613dd760608b018b61597d565b613de0906159e6565b8152602001613df260808b018b61597d565b613dfb906159e6565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e299190615b13565b5f60405180830381865af4158015613e43573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e6a9190810190615bca565b5f82815260048601602052604090209193509150613e888282615450565b508160068401613e988880615991565b604051613ea6929190615888565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613ee2908590600401615278565b6020604051808303815f875af1158015613efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f22919061528a565b5f8481526005860160205260409020805460ff191660011790559050613f488780615991565b5f858152600587016020526040902060010191613f66919083615c0d565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613fc58880615991565b604051613fd3929190615888565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906140119190614f0a565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61404a612676565b5f868152600882016020526040812080549082905591925090819080156140de575f8781526006850160205260409020546127109061409490600160a01b900461ffff16836157c4565b61409e919061574b565b91508184600a015f8981526020019081526020015f205f8282546140c2919061596a565b909155506140d290508282615cc6565b92506140de89846139d5565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413557604051631afcd79f60e31b815260040160405180910390fd5b565b61413f6140ec565b614148816146ce565b6141506146e7565b610f996060820135608083013561416d60c0850160a08601614f0a565b61417d60e0860160c08701615cd9565b61418e610100870160e08801615cf2565b6101008701356141a661014089016101208a016152a1565b8861014001356146f7565b6141b96140ec565b5f80516020615d498339815191526001600160a01b0382166141f957604051637330680360e01b81526001600160a01b0383166004820152602401610718565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d698339815191525f6001600160401b03808416908516111561424d576142468385615897565b905061425a565b6142578484615897565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142c75750600184015481516142c3916001600160401b03169061596a565b8210155b156142ef576001600160401b038084166060830152828252604082015116602082015261430e565b8281606001818151614301919061551f565b6001600160401b03169052505b606081015161431e906064615561565b602082015160018601546001600160401b0392909216916143499190600160401b900460ff16615561565b6001600160401b0316101561438257606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610718565b8581604001818151614394919061551f565b6001600160401b03169052506040810180518691906143b4908390615897565b6001600160401b0316905250600184015460408201516064916143e291600160401b90910460ff1690615561565b6001600160401b0316101561441b576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610718565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615d898339815191526020526040812060020180545f80516020615d6983398151915291906008906144cd90600160401b90046001600160401b0316615d12565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61450c6001600160a01b038416836148dc565b905080515f1415801561453057508080602001905181019061452e9190615d2d565b155b1561058c57604051635274afe760e01b81526001600160a01b0384166004820152602401610718565b5f61330a8333846148e9565b6145726020820182614e65565b63ffffffff16158015614592575061458d60208201826152bc565b151590505b156145d9576145a46020820182614e65565b6145b160208301836152bc565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610718565b6145e660208201826152bc565b90506145f56020830183614e65565b63ffffffff16111561460e576145a46020820182614e65565b60015b61461e60208301836152bc565b90508110156115135761463460208301836152bc565b61463f600184615cc6565b81811061464e5761464e615301565b905060200201602081019061466391906152a1565b6001600160a01b031661467960208401846152bc565b8381811061468957614689615301565b905060200201602081019061469e91906152a1565b6001600160a01b031610156146c657604051630dbc8d5f60e31b815260040160405180910390fd5b600101614611565b6146d66140ec565b6146de614a4c565b610f9981614a54565b6146ef6140ec565b614135614b3c565b6146ff6140ec565b5f614708612676565b905061ffff86161580614720575061271061ffff8716115b1561474457604051635f12e6c360e11b815261ffff87166004820152602401610718565b878911156147685760405163222d164360e21b8152600481018a9052602401610718565b60ff8516158061477b5750600a60ff8616115b1561479e5760405163170db35960e31b815260ff86166004820152602401610718565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614805576040516202a06d60e11b81526001600160401b0388166004820152602401610718565b835f036148255760405163a733007160e01b815260040160405180910390fd5b8161484657604051632f6bd1db60e01b815260048101839052602401610718565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061330a83835f614b44565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa15801561492f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614953919061528a565b905061496a6001600160a01b038616853086614bd3565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156149ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149d2919061528a565b9050818111614a385760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610718565b614a428282615cc6565b9695505050505050565b6141356140ec565b614a5c6140ec565b80355f80516020615d698339815191529081556014614a816060840160408501615cf2565b60ff161180614aa05750614a9b6060830160408401615cf2565b60ff16155b15614ad457614ab56060830160408401615cf2565b604051634a59bbff60e11b815260ff9091166004820152602401610718565b614ae46060830160408401615cf2565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b156040830160208401614f0a565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d136140ec565b606081471015614b695760405163cd78605960e01b8152306004820152602401610718565b5f80856001600160a01b03168486604051614b8491906153fb565b5f6040518083038185875af1925050503d805f8114614bbe576040519150601f19603f3d011682016040523d82523d5f602084013e614bc3565b606091505b5091509150614a42868383614c0c565b6040516001600160a01b03848116602483015283811660448301526064820183905261081b9186918216906323b872dd90608401613a78565b606082614c2157614c1c82614c68565b61330a565b8151158015614c3857506001600160a01b0384163b155b15614c6157604051639996b31560e01b81526001600160a01b0385166004820152602401610718565b508061330a565b805115614c785780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c9d90615106565b5f825580601f10614cac575050565b601f0160209004905f5260205f2090810190610f999190614d05565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614d19575f8155600101614d06565b5090565b8015158114610f99575f80fd5b803563ffffffff81168114614d3d575f80fd5b919050565b5f805f60608486031215614d54575f80fd5b833592506020840135614d6681614d1d565b9150614d7460408501614d2a565b90509250925092565b5f60208284031215614d8d575f80fd5b5035919050565b5f8060408385031215614da5575f80fd5b82356001600160401b03811115614dba575f80fd5b830160808186031215614dcb575f80fd5b9150614dd960208401614d2a565b90509250929050565b5f8060408385031215614df3575f80fd5b82359150614dd960208401614d2a565b6001600160a01b0381168114610f99575f80fd5b5f805f8060808587031215614e2a575f80fd5b843593506020850135614e3c81614d1d565b9250614e4a60408601614d2a565b91506060850135614e5a81614e03565b939692955090935050565b5f60208284031215614e75575f80fd5b61330a82614d2a565b803561ffff81168114614d3d575f80fd5b6001600160401b0381168114610f99575f80fd5b5f805f8060808587031215614eb6575f80fd5b84356001600160401b03811115614ecb575f80fd5b850160a08188031215614edc575f80fd5b9350614eea60208601614e7e565b92506040850135614efa81614e8f565b9396929550929360600135925050565b5f60208284031215614f1a575f80fd5b813561330a81614e8f565b5f8060408385031215614f36575f80fd5b823591506020830135614f4881614e03565b809150509250929050565b5f8060408385031215614f64575f80fd5b50508035926020909101359150565b5f80828403610180811215614f86575f80fd5b61016080821215614f95575f80fd5b8493508301359050614f4881614e03565b634e487b7160e01b5f52602160045260245ffd5b60068110614fca57614fca614fa6565b9052565b5f5b83811015614fe8578181015183820152602001614fd0565b50505f910152565b5f8151808452615007816020860160208601614fce565b601f01601f19169290920160200192915050565b6020815261502d602082018351614fba565b5f602083015160e06040840152615048610100840182614ff0565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156150ac575f80fd5b82356001600160401b03808211156150c2575f80fd5b818501915085601f8301126150d5575f80fd5b8135818111156150e3575f80fd5b8660208285010111156150f4575f80fd5b60209290920196919550909350505050565b600181811c9082168061511a57607f821691505b60208210810361513857634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ea58284614fba565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151825761518261514c565b60405290565b604080519081016001600160401b03811182821017156151825761518261514c565b604051601f8201601f191681016001600160401b03811182821017156151d2576151d261514c565b604052919050565b5f6001600160401b038211156151f2576151f261514c565b50601f01601f191660200190565b5f82601f83011261520f575f80fd5b815161522261521d826151da565b6151aa565b818152846020838601011115615236575f80fd5b610fc9826020830160208701614fce565b5f60208284031215615257575f80fd5b81516001600160401b0381111561526c575f80fd5b610fc984828501615200565b602081525f61330a6020830184614ff0565b5f6020828403121561529a575f80fd5b5051919050565b5f602082840312156152b1575f80fd5b813561330a81614e03565b5f808335601e198436030181126152d1575f80fd5b8301803591506001600160401b038211156152ea575f80fd5b6020019150600581901b36038213156134fb575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615329575f80fd5b9190910192915050565b5f82601f830112615342575f80fd5b813561535061521d826151da565b818152846020838601011115615364575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615390575f80fd5b615398615160565b82356001600160401b03808211156153ae575f80fd5b6153ba36838701615333565b835260208501359150808211156153cf575f80fd5b506153dc36828601615333565b60208301525060408301356153f081614e8f565b604082015292915050565b5f8251615329818460208701614fce565b601f82111561058c57805f5260205f20601f840160051c810160208510156154315750805b601f840160051c820191505b81811015610eb7575f815560010161543d565b81516001600160401b038111156154695761546961514c565b61547d816154778454615106565b8461540c565b602080601f8311600181146154b0575f84156154995750858301515b5f19600386901b1c1916600185901b178555611101565b5f85815260208120601f198616915b828110156154de578886015182559484019460019091019084016154bf565b50858210156154fb57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156123a7576123a761550b565b5f63ffffffff8083168181036155575761555761550b565b6001019392505050565b6001600160401b038181168382160280821691908281146155845761558461550b565b505092915050565b5f808335601e198436030181126155a1575f80fd5b83016020810192503590506001600160401b038111156155bf575f80fd5b8036038213156134fb575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156aa57848303601f19018952813536889003605e19018112615631575f80fd5b8701606061563f828061558c565b82875261564f83880182846155cd565b9250505061565f8683018361558c565b868303888801526156718382846155cd565b92505050604080830135925061568683614e8f565b6001600160401b03929092169490910193909352978301979083019060010161560c565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156db81614e03565b6001600160a01b031660608381019190915283013536849003601e19018112615702575f80fd5b83016020810190356001600160401b0381111561571d575f80fd5b8060051b360382131561572e575f80fd5b60808085015261574260a0850182846155f5565b95945050505050565b5f8261576557634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061577e5761577e614fa6565b91905290565b5f805f60608486031215615796575f80fd5b8351925060208401516157a881614e8f565b60408501519092506157b981614e8f565b809150509250925092565b8082028115828204841417610ea557610ea561550b565b5f80604083850312156157ec575f80fd5b825191506020830151614f4881614d1d565b5f60208083525f845461581081615106565b806020870152604060018084165f8114615831576001811461584d5761587a565b60ff19851660408a0152604084151560051b8a0101955061587a565b895f5260205f205f5b858110156158715781548b8201860152908301908801615856565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038281168282160390808211156123a7576123a761550b565b5f80604083850312156158c8575f80fd5b82516001600160401b03808211156158de575f80fd5b90840190606082870312156158f1575f80fd5b6158f9615160565b82518152602083015161590b81614e03565b6020820152604083015182811115615921575f80fd5b61592d88828601615200565b6040830152508094505050506020830151614f4881614d1d565b5f8060408385031215615958575f80fd5b825191506020830151614f4881614e8f565b80820180821115610ea557610ea561550b565b5f8235603e19833603018112615329575f80fd5b5f808335601e198436030181126159a6575f80fd5b8301803591506001600160401b038211156159bf575f80fd5b6020019150368190038213156134fb575f80fd5b602081525f610fc96020830184866155cd565b5f604082360312156159f6575f80fd5b6159fe615188565b615a0783614d2a565b81526020808401356001600160401b0380821115615a23575f80fd5b9085019036601f830112615a35575f80fd5b813581811115615a4757615a4761514c565b8060051b9150615a588483016151aa565b8181529183018401918481019036841115615a71575f80fd5b938501935b83851015615a9b5784359250615a8b83614e03565b8282529385019390850190615a76565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b085784516001600160a01b03168252938301936001929092019190830190615adf565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b39610100840182614ff0565b90506040840151601f1980858403016060860152615b578383614ff0565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b878383615aad565b925060a08601519150808584030160c086015250615ba58282615aad565b91505060c0840151615bc260e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bdb575f80fd5b8251915060208301516001600160401b03811115615bf7575f80fd5b615c0385828601615200565b9150509250929050565b6001600160401b03831115615c2457615c2461514c565b615c3883615c328354615106565b8361540c565b5f601f841160018114615c69575f8515615c525750838201355b5f19600387901b1c1916600186901b178355610eb7565b5f83815260208120601f198716915b82811015615c985786850135825560209485019460019092019101615c78565b5086821015615cb4575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610ea557610ea561550b565b5f60208284031215615ce9575f80fd5b61330a82614e7e565b5f60208284031215615d02575f80fd5b813560ff8116811461330a575f80fd5b5f6001600160401b038083168181036155575761555761550b565b5f60208284031215615d3d575f80fd5b815161330a81614d1d56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122005eb241b3104f5fbb12b4e541b87af5320778171ef2c39642761cc3b544ea0bc64736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122051df4e19849afdc78cfe78cf9eeb66eb47392913df9ee124204633eafa51ec0c64736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -682,7 +683,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) Erc20() // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCaller) GetValidator(opts *bind.CallOpts, validationID [32]byte) (Validator, error) { var out []interface{} err := _ERC20TokenStakingManager.contract.Call(opts, &out, "getValidator", validationID) @@ -699,18 +700,49 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCaller) GetValidator(op // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) GetValidator(validationID [32]byte) (Validator, error) { return _ERC20TokenStakingManager.Contract.GetValidator(&_ERC20TokenStakingManager.CallOpts, validationID) } // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) GetValidator(validationID [32]byte) (Validator, error) { return _ERC20TokenStakingManager.Contract.GetValidator(&_ERC20TokenStakingManager.CallOpts, validationID) } +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCaller) L1TotalWeight(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ERC20TokenStakingManager.contract.Call(opts, &out, "l1TotalWeight") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) L1TotalWeight() (uint64, error) { + return _ERC20TokenStakingManager.Contract.L1TotalWeight(&_ERC20TokenStakingManager.CallOpts) +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) L1TotalWeight() (uint64, error) { + return _ERC20TokenStakingManager.Contract.L1TotalWeight(&_ERC20TokenStakingManager.CallOpts) +} + // RegisteredValidators is a free data retrieval call binding the contract method 0xfd7ac5e7. // // Solidity: function registeredValidators(bytes nodeID) view returns(bytes32) @@ -742,6 +774,37 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) Register return _ERC20TokenStakingManager.Contract.RegisteredValidators(&_ERC20TokenStakingManager.CallOpts, nodeID) } +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCaller) SubnetID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20TokenStakingManager.contract.Call(opts, &out, "subnetID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) SubnetID() ([32]byte, error) { + return _ERC20TokenStakingManager.Contract.SubnetID(&_ERC20TokenStakingManager.CallOpts) +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) SubnetID() ([32]byte, error) { + return _ERC20TokenStakingManager.Contract.SubnetID(&_ERC20TokenStakingManager.CallOpts) +} + // ValueToWeight is a free data retrieval call binding the contract method 0x2e2194d8. // // Solidity: function valueToWeight(uint256 value) view returns(uint64) @@ -909,48 +972,69 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Comp return _ERC20TokenStakingManager.Contract.CompleteEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteEndValidation(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "completeEndValidation", messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.CompleteEndValidation(&_ERC20TokenStakingManager.TransactOpts, messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.CompleteEndValidation(&_ERC20TokenStakingManager.TransactOpts, messageIndex) -} - // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteValidatorRegistration(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { return _ERC20TokenStakingManager.contract.Transact(opts, "completeValidatorRegistration", messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { return _ERC20TokenStakingManager.Contract.CompleteValidatorRegistration(&_ERC20TokenStakingManager.TransactOpts, messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { return _ERC20TokenStakingManager.Contract.CompleteValidatorRegistration(&_ERC20TokenStakingManager.TransactOpts, messageIndex) } +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteValidatorRemoval(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "completeValidatorRemoval", messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteValidatorRemoval(&_ERC20TokenStakingManager.TransactOpts, messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteValidatorRemoval(&_ERC20TokenStakingManager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteValidatorWeightUpdate(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "completeValidatorWeightUpdate", messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteValidatorWeightUpdate(&_ERC20TokenStakingManager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteValidatorWeightUpdate(&_ERC20TokenStakingManager.TransactOpts, messageIndex) +} + // ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. // // Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() @@ -1287,9 +1371,9 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Subm return _ERC20TokenStakingManager.Contract.SubmitUptimeProof(&_ERC20TokenStakingManager.TransactOpts, validationID, messageIndex) } -// ERC20TokenStakingManagerDelegationEndedIterator is returned from FilterDelegationEnded and is used to iterate over the raw logs and unpacked data for DelegationEnded events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegationEndedIterator struct { - Event *ERC20TokenStakingManagerDelegationEnded // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRegistrationIterator struct { + Event *ERC20TokenStakingManagerCompletedValidatorRegistration // 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 @@ -1303,7 +1387,7 @@ type ERC20TokenStakingManagerDelegationEndedIterator struct { // 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 *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { +func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1312,7 +1396,7 @@ func (it *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegationEnded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1327,7 +1411,7 @@ func (it *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegationEnded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1343,62 +1427,53 @@ func (it *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegationEndedIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegationEndedIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegationEnded represents a DelegationEnded event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegationEnded struct { - DelegationID [32]byte +// ERC20TokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRegistration struct { ValidationID [32]byte - Rewards *big.Int - Fees *big.Int + NodeID []byte + Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegationEnded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegationEndedIterator, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorRegistrationIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegationEndedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedValidatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegationEnded(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegationEnded, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } @@ -1408,8 +1483,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegati select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerDelegationEnded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { + event := new(ERC20TokenStakingManagerCompletedValidatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -1430,21 +1505,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegati }), nil } -// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegationEnded(log types.Log) (*ERC20TokenStakingManagerDelegationEnded, error) { - event := new(ERC20TokenStakingManagerDelegationEnded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorRegistration, error) { + event := new(ERC20TokenStakingManagerCompletedValidatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerDelegatorAddedIterator is returned from FilterDelegatorAdded and is used to iterate over the raw logs and unpacked data for DelegatorAdded events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorAddedIterator struct { - Event *ERC20TokenStakingManagerDelegatorAdded // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRemovalIterator struct { + Event *ERC20TokenStakingManagerCompletedValidatorRemoval // 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 @@ -1458,7 +1533,7 @@ type ERC20TokenStakingManagerDelegatorAddedIterator struct { // 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 *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { +func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1467,7 +1542,7 @@ func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorAdded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1482,7 +1557,7 @@ func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorAdded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1498,73 +1573,51 @@ func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegatorAdded represents a DelegatorAdded event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorAdded struct { - DelegationID [32]byte - ValidationID [32]byte - DelegatorAddress common.Address - Nonce uint64 - ValidatorWeight uint64 - DelegatorWeight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRemoval struct { + ValidationID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorAdded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*ERC20TokenStakingManagerDelegatorAddedIterator, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorRemovalIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegatorAddedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedValidatorRemovalIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegatorAdded(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegatorAdded, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -1574,8 +1627,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerDelegatorAdded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { + event := new(ERC20TokenStakingManagerCompletedValidatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -1596,21 +1649,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato }), nil } -// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegatorAdded(log types.Log) (*ERC20TokenStakingManagerDelegatorAdded, error) { - event := new(ERC20TokenStakingManagerDelegatorAdded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorRemoval, error) { + event := new(ERC20TokenStakingManagerCompletedValidatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerDelegatorRegisteredIterator is returned from FilterDelegatorRegistered and is used to iterate over the raw logs and unpacked data for DelegatorRegistered events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRegisteredIterator struct { - Event *ERC20TokenStakingManagerDelegatorRegistered // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator struct { + Event *ERC20TokenStakingManagerCompletedValidatorWeightUpdate // 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 @@ -1624,7 +1677,7 @@ type ERC20TokenStakingManagerDelegatorRegisteredIterator struct { // 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 *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { +func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1633,7 +1686,7 @@ func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRegistered) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1648,7 +1701,7 @@ func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRegistered) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1664,61 +1717,53 @@ func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegatorRegistered represents a DelegatorRegistered event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRegistered struct { - DelegationID [32]byte +// ERC20TokenStakingManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorWeightUpdate struct { ValidationID [32]byte - StartTime *big.Int + Nonce uint64 + Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorRegistered(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegatorRegisteredIterator, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegatorRegisteredIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegatorRegistered(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegatorRegistered, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -1728,8 +1773,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerDelegatorRegistered) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { + event := new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -1750,21 +1795,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato }), nil } -// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegatorRegistered(log types.Log) (*ERC20TokenStakingManagerDelegatorRegistered, error) { - event := new(ERC20TokenStakingManagerDelegatorRegistered) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorWeightUpdate, error) { + event := new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerDelegatorRemovalInitializedIterator is returned from FilterDelegatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for DelegatorRemovalInitialized events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRemovalInitializedIterator struct { - Event *ERC20TokenStakingManagerDelegatorRemovalInitialized // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerDelegationEndedIterator is returned from FilterDelegationEnded and is used to iterate over the raw logs and unpacked data for DelegationEnded events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerDelegationEndedIterator struct { + Event *ERC20TokenStakingManagerDelegationEnded // 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 @@ -1778,7 +1823,7 @@ type ERC20TokenStakingManagerDelegatorRemovalInitializedIterator struct { // 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 *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bool { +func (it *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1787,7 +1832,7 @@ func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bo if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(ERC20TokenStakingManagerDelegationEnded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1802,7 +1847,7 @@ func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(ERC20TokenStakingManagerDelegationEnded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1818,28 +1863,30 @@ func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Error() error { +func (it *ERC20TokenStakingManagerDelegationEndedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Close() error { +func (it *ERC20TokenStakingManagerDelegationEndedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRemovalInitialized struct { +// ERC20TokenStakingManagerDelegationEnded represents a DelegationEnded event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerDelegationEnded struct { DelegationID [32]byte ValidationID [32]byte + Rewards *big.Int + Fees *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegatorRemovalInitializedIterator, error) { +// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegationEnded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegationEndedIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1850,17 +1897,17 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegat validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegatorRemovalInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerDelegationEndedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil } -// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegatorRemovalInitialized, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegationEnded(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegationEnded, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1871,7 +1918,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1881,8 +1928,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerDelegatorRemovalInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { + event := new(ERC20TokenStakingManagerDelegationEnded) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { return err } event.Raw = log @@ -1903,21 +1950,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato }), nil } -// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegatorRemovalInitialized(log types.Log) (*ERC20TokenStakingManagerDelegatorRemovalInitialized, error) { - event := new(ERC20TokenStakingManagerDelegatorRemovalInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { +// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegationEnded(log types.Log) (*ERC20TokenStakingManagerDelegationEnded, error) { + event := new(ERC20TokenStakingManagerDelegationEnded) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerInitialValidatorCreatedIterator is returned from FilterInitialValidatorCreated and is used to iterate over the raw logs and unpacked data for InitialValidatorCreated events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerInitialValidatorCreatedIterator struct { - Event *ERC20TokenStakingManagerInitialValidatorCreated // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerDelegatorAddedIterator is returned from FilterDelegatorAdded and is used to iterate over the raw logs and unpacked data for DelegatorAdded events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerDelegatorAddedIterator struct { + Event *ERC20TokenStakingManagerDelegatorAdded // 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 @@ -1931,7 +1978,7 @@ type ERC20TokenStakingManagerInitialValidatorCreatedIterator struct { // 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 *ERC20TokenStakingManagerInitialValidatorCreatedIterator) Next() bool { +func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1940,7 +1987,7 @@ func (it *ERC20TokenStakingManagerInitialValidatorCreatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerInitialValidatorCreated) + it.Event = new(ERC20TokenStakingManagerDelegatorAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1955,7 +2002,7 @@ func (it *ERC20TokenStakingManagerInitialValidatorCreatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerInitialValidatorCreated) + it.Event = new(ERC20TokenStakingManagerDelegatorAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1971,61 +2018,73 @@ func (it *ERC20TokenStakingManagerInitialValidatorCreatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerInitialValidatorCreatedIterator) Error() error { +func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerInitialValidatorCreatedIterator) Close() error { +func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerInitialValidatorCreated represents a InitialValidatorCreated event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerInitialValidatorCreated struct { - ValidationID [32]byte - NodeID common.Hash - Weight uint64 - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerDelegatorAdded represents a DelegatorAdded event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerDelegatorAdded struct { + DelegationID [32]byte + ValidationID [32]byte + DelegatorAddress common.Address + Nonce uint64 + ValidatorWeight uint64 + DelegatorWeight uint64 + SetWeightMessageID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialValidatorCreated is a free log retrieval operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. +// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitialValidatorCreated(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][]byte) (*ERC20TokenStakingManagerInitialValidatorCreatedIterator, error) { +// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorAdded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*ERC20TokenStakingManagerDelegatorAddedIterator, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "InitialValidatorCreated", validationIDRule, nodeIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerInitialValidatorCreatedIterator{contract: _ERC20TokenStakingManager.contract, event: "InitialValidatorCreated", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerDelegatorAddedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil } -// WatchInitialValidatorCreated is a free log subscription operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. +// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitialValidatorCreated(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitialValidatorCreated, validationID [][32]byte, nodeID [][]byte) (event.Subscription, error) { +// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegatorAdded(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegatorAdded, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "InitialValidatorCreated", validationIDRule, nodeIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } @@ -2035,8 +2094,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitialV select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerInitialValidatorCreated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { + event := new(ERC20TokenStakingManagerDelegatorAdded) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { return err } event.Raw = log @@ -2057,21 +2116,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitialV }), nil } -// ParseInitialValidatorCreated is a log parse operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. +// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitialValidatorCreated(log types.Log) (*ERC20TokenStakingManagerInitialValidatorCreated, error) { - event := new(ERC20TokenStakingManagerInitialValidatorCreated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { +// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegatorAdded(log types.Log) (*ERC20TokenStakingManagerDelegatorAdded, error) { + event := new(ERC20TokenStakingManagerDelegatorAdded) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerInitializedIterator struct { - Event *ERC20TokenStakingManagerInitialized // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerDelegatorRegisteredIterator is returned from FilterDelegatorRegistered and is used to iterate over the raw logs and unpacked data for DelegatorRegistered events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerDelegatorRegisteredIterator struct { + Event *ERC20TokenStakingManagerDelegatorRegistered // 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 @@ -2085,7 +2144,7 @@ type ERC20TokenStakingManagerInitializedIterator struct { // 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 *ERC20TokenStakingManagerInitializedIterator) Next() bool { +func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2094,7 +2153,7 @@ func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerInitialized) + it.Event = new(ERC20TokenStakingManagerDelegatorRegistered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2109,7 +2168,7 @@ func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerInitialized) + it.Event = new(ERC20TokenStakingManagerDelegatorRegistered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2125,41 +2184,61 @@ func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerInitializedIterator) Error() error { +func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerInitializedIterator) Close() error { +func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerInitialized represents a Initialized event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerInitialized struct { - Version uint64 - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerDelegatorRegistered represents a DelegatorRegistered event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerDelegatorRegistered struct { + DelegationID [32]byte + ValidationID [32]byte + StartTime *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. // -// Solidity: event Initialized(uint64 version) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC20TokenStakingManagerInitializedIterator, error) { +// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorRegistered(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegatorRegisteredIterator, error) { - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "Initialized") + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerDelegatorRegisteredIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. // -// Solidity: event Initialized(uint64 version) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitialized) (event.Subscription, error) { +// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegatorRegistered(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegatorRegistered, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "Initialized") + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -2169,8 +2248,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiali select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(ERC20TokenStakingManagerDelegatorRegistered) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { return err } event.Raw = log @@ -2191,21 +2270,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiali }), nil } -// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. // -// Solidity: event Initialized(uint64 version) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitialized(log types.Log) (*ERC20TokenStakingManagerInitialized, error) { - event := new(ERC20TokenStakingManagerInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegatorRegistered(log types.Log) (*ERC20TokenStakingManagerDelegatorRegistered, error) { + event := new(ERC20TokenStakingManagerDelegatorRegistered) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerUptimeUpdatedIterator is returned from FilterUptimeUpdated and is used to iterate over the raw logs and unpacked data for UptimeUpdated events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerUptimeUpdatedIterator struct { - Event *ERC20TokenStakingManagerUptimeUpdated // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerDelegatorRemovalInitializedIterator is returned from FilterDelegatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for DelegatorRemovalInitialized events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerDelegatorRemovalInitializedIterator struct { + Event *ERC20TokenStakingManagerDelegatorRemovalInitialized // 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 @@ -2219,7 +2298,7 @@ type ERC20TokenStakingManagerUptimeUpdatedIterator struct { // 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 *ERC20TokenStakingManagerUptimeUpdatedIterator) Next() bool { +func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2228,7 +2307,7 @@ func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerUptimeUpdated) + it.Event = new(ERC20TokenStakingManagerDelegatorRemovalInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2243,7 +2322,7 @@ func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerUptimeUpdated) + it.Event = new(ERC20TokenStakingManagerDelegatorRemovalInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2259,52 +2338,60 @@ func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Error() error { +func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Close() error { +func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerUptimeUpdated represents a UptimeUpdated event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerUptimeUpdated struct { +// ERC20TokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerDelegatorRemovalInitialized struct { + DelegationID [32]byte ValidationID [32]byte - Uptime uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterUptimeUpdated is a free log retrieval operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. +// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. // -// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterUptimeUpdated(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerUptimeUpdatedIterator, error) { +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegatorRemovalInitializedIterator, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "UptimeUpdated", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerUptimeUpdatedIterator{contract: _ERC20TokenStakingManager.contract, event: "UptimeUpdated", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerDelegatorRemovalInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil } -// WatchUptimeUpdated is a free log subscription operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. +// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. // -// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchUptimeUpdated(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerUptimeUpdated, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) +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 { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "UptimeUpdated", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -2314,8 +2401,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchUptimeUp select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerUptimeUpdated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { + event := new(ERC20TokenStakingManagerDelegatorRemovalInitialized) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { return err } event.Raw = log @@ -2336,21 +2423,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchUptimeUp }), nil } -// ParseUptimeUpdated is a log parse operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. +// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. // -// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseUptimeUpdated(log types.Log) (*ERC20TokenStakingManagerUptimeUpdated, error) { - event := new(ERC20TokenStakingManagerUptimeUpdated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegatorRemovalInitialized(log types.Log) (*ERC20TokenStakingManagerDelegatorRemovalInitialized, error) { + event := new(ERC20TokenStakingManagerDelegatorRemovalInitialized) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerValidationPeriodCreatedIterator is returned from FilterValidationPeriodCreated and is used to iterate over the raw logs and unpacked data for ValidationPeriodCreated events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationPeriodCreatedIterator struct { - Event *ERC20TokenStakingManagerValidationPeriodCreated // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitializedIterator struct { + Event *ERC20TokenStakingManagerInitialized // 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 @@ -2364,7 +2451,7 @@ type ERC20TokenStakingManagerValidationPeriodCreatedIterator struct { // 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 *ERC20TokenStakingManagerValidationPeriodCreatedIterator) Next() bool { +func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2373,7 +2460,7 @@ func (it *ERC20TokenStakingManagerValidationPeriodCreatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationPeriodCreated) + it.Event = new(ERC20TokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2388,7 +2475,7 @@ func (it *ERC20TokenStakingManagerValidationPeriodCreatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationPeriodCreated) + it.Event = new(ERC20TokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2404,71 +2491,189 @@ func (it *ERC20TokenStakingManagerValidationPeriodCreatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerValidationPeriodCreatedIterator) Error() error { +func (it *ERC20TokenStakingManagerInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerValidationPeriodCreatedIterator) Close() error { +func (it *ERC20TokenStakingManagerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20TokenStakingManagerInitialized represents a Initialized event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC20TokenStakingManagerInitializedIterator, error) { + + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ERC20TokenStakingManagerInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitialized) (event.Subscription, error) { + + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "Initialized") + 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(ERC20TokenStakingManagerInitialized) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "Initialized", 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 +} + +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitialized(log types.Log) (*ERC20TokenStakingManagerInitialized, error) { + event := new(ERC20TokenStakingManagerInitialized) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator is returned from FilterInitiatedValidatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRegistration events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator struct { + Event *ERC20TokenStakingManagerInitiatedValidatorRegistration // 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 *ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator) 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(ERC20TokenStakingManagerInitiatedValidatorRegistration) + 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(ERC20TokenStakingManagerInitiatedValidatorRegistration) + 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 *ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerValidationPeriodCreated represents a ValidationPeriodCreated event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationPeriodCreated struct { - ValidationID [32]byte - NodeID common.Hash - RegisterValidationMessageID [32]byte - Weight uint64 - RegistrationExpiry uint64 - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerInitiatedValidatorRegistration represents a InitiatedValidatorRegistration event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedValidatorRegistration struct { + ValidationID [32]byte + NodeID []byte + RegistrationMessageID [32]byte + RegistrationExpiry uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodCreated is a free log retrieval operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. +// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterValidationPeriodCreated(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][]byte, registerValidationMessageID [][32]byte) (*ERC20TokenStakingManagerValidationPeriodCreatedIterator, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "ValidationPeriodCreated", validationIDRule, nodeIDRule, registerValidationMessageIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerValidationPeriodCreatedIterator{contract: _ERC20TokenStakingManager.contract, event: "ValidationPeriodCreated", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "InitiatedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchValidationPeriodCreated is a free log subscription operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. +// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidationPeriodCreated(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerValidationPeriodCreated, validationID [][32]byte, nodeID [][]byte, registerValidationMessageID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitiatedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "ValidationPeriodCreated", validationIDRule, nodeIDRule, registerValidationMessageIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule) if err != nil { return nil, err } @@ -2478,8 +2683,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidati select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerValidationPeriodCreated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { + event := new(ERC20TokenStakingManagerInitiatedValidatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -2500,21 +2705,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidati }), nil } -// ParseValidationPeriodCreated is a log parse operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. +// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidationPeriodCreated(log types.Log) (*ERC20TokenStakingManagerValidationPeriodCreated, error) { - event := new(ERC20TokenStakingManagerValidationPeriodCreated) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitiatedValidatorRegistration(log types.Log) (*ERC20TokenStakingManagerInitiatedValidatorRegistration, error) { + event := new(ERC20TokenStakingManagerInitiatedValidatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerValidationPeriodEndedIterator is returned from FilterValidationPeriodEnded and is used to iterate over the raw logs and unpacked data for ValidationPeriodEnded events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationPeriodEndedIterator struct { - Event *ERC20TokenStakingManagerValidationPeriodEnded // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerInitiatedValidatorRemovalIterator is returned from FilterInitiatedValidatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRemoval events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedValidatorRemovalIterator struct { + Event *ERC20TokenStakingManagerInitiatedValidatorRemoval // 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 @@ -2528,7 +2733,7 @@ type ERC20TokenStakingManagerValidationPeriodEndedIterator struct { // 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 *ERC20TokenStakingManagerValidationPeriodEndedIterator) Next() bool { +func (it *ERC20TokenStakingManagerInitiatedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2537,7 +2742,7 @@ func (it *ERC20TokenStakingManagerValidationPeriodEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationPeriodEnded) + it.Event = new(ERC20TokenStakingManagerInitiatedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2552,7 +2757,7 @@ func (it *ERC20TokenStakingManagerValidationPeriodEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationPeriodEnded) + it.Event = new(ERC20TokenStakingManagerInitiatedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2568,60 +2773,54 @@ func (it *ERC20TokenStakingManagerValidationPeriodEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerValidationPeriodEndedIterator) Error() error { +func (it *ERC20TokenStakingManagerInitiatedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerValidationPeriodEndedIterator) Close() error { +func (it *ERC20TokenStakingManagerInitiatedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerValidationPeriodEnded represents a ValidationPeriodEnded event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationPeriodEnded struct { - ValidationID [32]byte - Status uint8 - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerInitiatedValidatorRemoval represents a InitiatedValidatorRemoval event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedValidatorRemoval struct { + ValidationID [32]byte + ValidatorWeightMessageID [32]byte + Weight uint64 + EndTime uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodEnded is a free log retrieval operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// FilterInitiatedValidatorRemoval is a free log retrieval operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterValidationPeriodEnded(opts *bind.FilterOpts, validationID [][32]byte, status []uint8) (*ERC20TokenStakingManagerValidationPeriodEndedIterator, error) { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitiatedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerInitiatedValidatorRemovalIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerValidationPeriodEndedIterator{contract: _ERC20TokenStakingManager.contract, event: "ValidationPeriodEnded", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerInitiatedValidatorRemovalIterator{contract: _ERC20TokenStakingManager.contract, event: "InitiatedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchValidationPeriodEnded is a free log subscription operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// WatchInitiatedValidatorRemoval is a free log subscription operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidationPeriodEnded(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerValidationPeriodEnded, validationID [][32]byte, status []uint8) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiatedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitiatedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -2631,8 +2830,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidati select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerValidationPeriodEnded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { + event := new(ERC20TokenStakingManagerInitiatedValidatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -2653,21 +2852,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidati }), nil } -// ParseValidationPeriodEnded is a log parse operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// ParseInitiatedValidatorRemoval is a log parse operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidationPeriodEnded(log types.Log) (*ERC20TokenStakingManagerValidationPeriodEnded, error) { - event := new(ERC20TokenStakingManagerValidationPeriodEnded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitiatedValidatorRemoval(log types.Log) (*ERC20TokenStakingManagerInitiatedValidatorRemoval, error) { + event := new(ERC20TokenStakingManagerInitiatedValidatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerValidationPeriodRegisteredIterator is returned from FilterValidationPeriodRegistered and is used to iterate over the raw logs and unpacked data for ValidationPeriodRegistered events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationPeriodRegisteredIterator struct { - Event *ERC20TokenStakingManagerValidationPeriodRegistered // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator is returned from FilterInitiatedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for InitiatedValidatorWeightUpdate events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator struct { + Event *ERC20TokenStakingManagerInitiatedValidatorWeightUpdate // 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 @@ -2681,7 +2880,7 @@ type ERC20TokenStakingManagerValidationPeriodRegisteredIterator struct { // 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 *ERC20TokenStakingManagerValidationPeriodRegisteredIterator) Next() bool { +func (it *ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2690,7 +2889,7 @@ func (it *ERC20TokenStakingManagerValidationPeriodRegisteredIterator) Next() boo if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationPeriodRegistered) + it.Event = new(ERC20TokenStakingManagerInitiatedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2705,7 +2904,7 @@ func (it *ERC20TokenStakingManagerValidationPeriodRegisteredIterator) Next() boo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidationPeriodRegistered) + it.Event = new(ERC20TokenStakingManagerInitiatedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2721,53 +2920,54 @@ func (it *ERC20TokenStakingManagerValidationPeriodRegisteredIterator) Next() boo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerValidationPeriodRegisteredIterator) Error() error { +func (it *ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerValidationPeriodRegisteredIterator) Close() error { +func (it *ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerValidationPeriodRegistered represents a ValidationPeriodRegistered event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidationPeriodRegistered struct { - ValidationID [32]byte - Weight uint64 - Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerInitiatedValidatorWeightUpdate represents a InitiatedValidatorWeightUpdate event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + WeightUpdateMessageID [32]byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodRegistered is a free log retrieval operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// FilterInitiatedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterValidationPeriodRegistered(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerValidationPeriodRegisteredIterator, error) { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitiatedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "ValidationPeriodRegistered", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerValidationPeriodRegisteredIterator{contract: _ERC20TokenStakingManager.contract, event: "ValidationPeriodRegistered", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerInitiatedValidatorWeightUpdateIterator{contract: _ERC20TokenStakingManager.contract, event: "InitiatedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchValidationPeriodRegistered is a free log subscription operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// WatchInitiatedValidatorWeightUpdate is a free log subscription operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidationPeriodRegistered(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerValidationPeriodRegistered, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiatedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitiatedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "ValidationPeriodRegistered", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -2777,8 +2977,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidati select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerValidationPeriodRegistered) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { + event := new(ERC20TokenStakingManagerInitiatedValidatorWeightUpdate) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -2799,21 +2999,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidati }), nil } -// ParseValidationPeriodRegistered is a log parse operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// ParseInitiatedValidatorWeightUpdate is a log parse operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidationPeriodRegistered(log types.Log) (*ERC20TokenStakingManagerValidationPeriodRegistered, error) { - event := new(ERC20TokenStakingManagerValidationPeriodRegistered) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitiatedValidatorWeightUpdate(log types.Log) (*ERC20TokenStakingManagerInitiatedValidatorWeightUpdate, error) { + event := new(ERC20TokenStakingManagerInitiatedValidatorWeightUpdate) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidatorRemovalInitializedIterator struct { - Event *ERC20TokenStakingManagerValidatorRemovalInitialized // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerRegisteredInitialValidatorIterator is returned from FilterRegisteredInitialValidator and is used to iterate over the raw logs and unpacked data for RegisteredInitialValidator events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerRegisteredInitialValidatorIterator struct { + Event *ERC20TokenStakingManagerRegisteredInitialValidator // 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 @@ -2827,7 +3027,7 @@ type ERC20TokenStakingManagerValidatorRemovalInitializedIterator struct { // 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 *ERC20TokenStakingManagerValidatorRemovalInitializedIterator) Next() bool { +func (it *ERC20TokenStakingManagerRegisteredInitialValidatorIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2836,7 +3036,7 @@ func (it *ERC20TokenStakingManagerValidatorRemovalInitializedIterator) Next() bo if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidatorRemovalInitialized) + it.Event = new(ERC20TokenStakingManagerRegisteredInitialValidator) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2851,7 +3051,7 @@ func (it *ERC20TokenStakingManagerValidatorRemovalInitializedIterator) Next() bo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidatorRemovalInitialized) + it.Event = new(ERC20TokenStakingManagerRegisteredInitialValidator) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2867,62 +3067,53 @@ func (it *ERC20TokenStakingManagerValidatorRemovalInitializedIterator) Next() bo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerValidatorRemovalInitializedIterator) Error() error { +func (it *ERC20TokenStakingManagerRegisteredInitialValidatorIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerValidatorRemovalInitializedIterator) Close() error { +func (it *ERC20TokenStakingManagerRegisteredInitialValidatorIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerValidatorRemovalInitialized represents a ValidatorRemovalInitialized event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerValidatorRemovalInitialized struct { - ValidationID [32]byte - SetWeightMessageID [32]byte - Weight uint64 - EndTime *big.Int - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerRegisteredInitialValidator represents a RegisteredInitialValidator event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerRegisteredInitialValidator struct { + ValidationID [32]byte + NodeID []byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidatorRemovalInitialized is a free log retrieval operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterValidatorRemovalInitialized(opts *bind.FilterOpts, validationID [][32]byte, setWeightMessageID [][32]byte) (*ERC20TokenStakingManagerValidatorRemovalInitializedIterator, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerRegisteredInitialValidatorIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerValidatorRemovalInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "ValidatorRemovalInitialized", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerRegisteredInitialValidatorIterator{contract: _ERC20TokenStakingManager.contract, event: "RegisteredInitialValidator", logs: logs, sub: sub}, nil } -// WatchValidatorRemovalInitialized is a free log subscription operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerValidatorRemovalInitialized, validationID [][32]byte, setWeightMessageID [][32]byte) (event.Subscription, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerRegisteredInitialValidator, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule) if err != nil { return nil, err } @@ -2932,8 +3123,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidato select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerValidatorRemovalInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { + event := new(ERC20TokenStakingManagerRegisteredInitialValidator) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { return err } event.Raw = log @@ -2954,21 +3145,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidato }), nil } -// ParseValidatorRemovalInitialized is a log parse operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidatorRemovalInitialized(log types.Log) (*ERC20TokenStakingManagerValidatorRemovalInitialized, error) { - event := new(ERC20TokenStakingManagerValidatorRemovalInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseRegisteredInitialValidator(log types.Log) (*ERC20TokenStakingManagerRegisteredInitialValidator, error) { + event := new(ERC20TokenStakingManagerRegisteredInitialValidator) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { return nil, err } 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 +// ERC20TokenStakingManagerUptimeUpdatedIterator is returned from FilterUptimeUpdated and is used to iterate over the raw logs and unpacked data for UptimeUpdated events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerUptimeUpdatedIterator struct { + Event *ERC20TokenStakingManagerUptimeUpdated // 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 @@ -2982,7 +3173,7 @@ type ERC20TokenStakingManagerValidatorWeightUpdateIterator struct { // 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 { +func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2991,7 +3182,7 @@ func (it *ERC20TokenStakingManagerValidatorWeightUpdateIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidatorWeightUpdate) + it.Event = new(ERC20TokenStakingManagerUptimeUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3006,7 +3197,7 @@ func (it *ERC20TokenStakingManagerValidatorWeightUpdateIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerValidatorWeightUpdate) + it.Event = new(ERC20TokenStakingManagerUptimeUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3022,62 +3213,52 @@ func (it *ERC20TokenStakingManagerValidatorWeightUpdateIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerValidatorWeightUpdateIterator) Error() error { +func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerValidatorWeightUpdateIterator) Close() error { +func (it *ERC20TokenStakingManagerUptimeUpdatedIterator) 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 - Weight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerUptimeUpdated represents a UptimeUpdated event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerUptimeUpdated struct { + ValidationID [32]byte + Uptime uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// FilterUptimeUpdated is a free log retrieval operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte, nonce []uint64) (*ERC20TokenStakingManagerValidatorWeightUpdateIterator, error) { +// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterUptimeUpdated(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerUptimeUpdatedIterator, 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) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "UptimeUpdated", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerValidatorWeightUpdateIterator{contract: _ERC20TokenStakingManager.contract, event: "ValidatorWeightUpdate", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerUptimeUpdatedIterator{contract: _ERC20TokenStakingManager.contract, event: "UptimeUpdated", logs: logs, sub: sub}, nil } -// WatchValidatorWeightUpdate is a free log subscription operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// WatchUptimeUpdated is a free log subscription operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerValidatorWeightUpdate, validationID [][32]byte, nonce []uint64) (event.Subscription, error) { +// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchUptimeUpdated(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerUptimeUpdated, validationID [][32]byte) (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) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "UptimeUpdated", validationIDRule) if err != nil { return nil, err } @@ -3087,8 +3268,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidato 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 { + event := new(ERC20TokenStakingManagerUptimeUpdated) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { return err } event.Raw = log @@ -3109,12 +3290,12 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidato }), nil } -// ParseValidatorWeightUpdate is a log parse operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// ParseUptimeUpdated is a log parse operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidatorWeightUpdate(log types.Log) (*ERC20TokenStakingManagerValidatorWeightUpdate, error) { - event := new(ERC20TokenStakingManagerValidatorWeightUpdate) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { +// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseUptimeUpdated(log types.Log) (*ERC20TokenStakingManagerUptimeUpdated, error) { + event := new(ERC20TokenStakingManagerUptimeUpdated) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { return nil, err } event.Raw = log @@ -3124,7 +3305,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidato // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212209b053b8f4b1240668e63fcf61c1058f38e82bf86a5ffafe8ef50c8ba2c10a75564736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212208f97dd615e4586f85eec84c3dcf6f765032d5b15f7beb22c22fa9f8b3c7f72de64736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go b/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go index 4f7edbbf1..ea7245dc2 100644 --- a/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go +++ b/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go @@ -32,7 +32,7 @@ var ( // ExampleRewardCalculatorMetaData contains all meta data concerning the ExampleRewardCalculator contract. var ExampleRewardCalculatorMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"rewardBasisPoints_\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SECONDS_IN_YEAR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPTIME_REWARDS_THRESHOLD_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"validatorStartTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"stakingStartTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"stakingEndTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"uptimeSeconds\",\"type\":\"uint64\"}],\"name\":\"calculateReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardBasisPoints\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a0604052348015600e575f80fd5b50604051610393380380610393833981016040819052602b91603b565b6001600160401b03166080526066565b5f60208284031215604a575f80fd5b81516001600160401b0381168114605f575f80fd5b9392505050565b60805161030f6100845f395f818160c50152610161015261030f5ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c80634f22429f146100595780635dcc93911461007f578063a9778a7a1461008a578063afba878a146100a6578063bb65b242146100c0575b5f80fd5b61006c6100673660046101db565b610100565b6040519081526020015b60405180910390f35b61006c6301e1338081565b61009361271081565b60405161ffff9091168152602001610076565b6100ae605081565b60405160ff9091168152602001610076565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610076565b5f605061010d8685610249565b6101179190610271565b67ffffffffffffffff1661012c836064610271565b67ffffffffffffffff16101561014357505f6101b6565b6127106301e133806101558686610249565b67ffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1689610195919061029d565b61019f919061029d565b6101a991906102ba565b6101b391906102ba565b90505b95945050505050565b803567ffffffffffffffff811681146101d6575f80fd5b919050565b5f805f805f60a086880312156101ef575f80fd5b853594506101ff602087016101bf565b935061020d604087016101bf565b925061021b606087016101bf565b9150610229608087016101bf565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561026a5761026a610235565b5092915050565b67ffffffffffffffff81811683821602808216919082811461029557610295610235565b505092915050565b80820281158282048414176102b4576102b4610235565b92915050565b5f826102d457634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220a017f47278471e139b88da0cb4f0fedb8a1a5488085fabca75070c7dff9f008b64736f6c63430008190033", + Bin: "0x60a0604052348015600e575f80fd5b50604051610393380380610393833981016040819052602b91603b565b6001600160401b03166080526066565b5f60208284031215604a575f80fd5b81516001600160401b0381168114605f575f80fd5b9392505050565b60805161030f6100845f395f818160c50152610161015261030f5ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c80634f22429f146100595780635dcc93911461007f578063a9778a7a1461008a578063afba878a146100a6578063bb65b242146100c0575b5f80fd5b61006c6100673660046101db565b610100565b6040519081526020015b60405180910390f35b61006c6301e1338081565b61009361271081565b60405161ffff9091168152602001610076565b6100ae605081565b60405160ff9091168152602001610076565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610076565b5f605061010d8685610249565b6101179190610271565b67ffffffffffffffff1661012c836064610271565b67ffffffffffffffff16101561014357505f6101b6565b6127106301e133806101558686610249565b67ffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1689610195919061029d565b61019f919061029d565b6101a991906102ba565b6101b391906102ba565b90505b95945050505050565b803567ffffffffffffffff811681146101d6575f80fd5b919050565b5f805f805f60a086880312156101ef575f80fd5b853594506101ff602087016101bf565b935061020d604087016101bf565b925061021b606087016101bf565b9150610229608087016101bf565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561026a5761026a610235565b5092915050565b67ffffffffffffffff81811683821602808216919082811461029557610295610235565b505092915050565b80820281158282048414176102b4576102b4610235565b92915050565b5f826102d457634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220467575851b25b46ed832838127e332426d4791271474cf5cbfe278df9044cc3364736f6c63430008190033", } // ExampleRewardCalculatorABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index 353fa808d..732540cd3 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -68,10 +68,11 @@ type Validator struct { Status uint8 NodeID []byte StartingWeight uint64 - MessageNonce uint64 + SentNonce uint64 + ReceivedNonce uint64 Weight uint64 - StartedAt uint64 - EndedAt uint64 + StartTime uint64 + EndTime uint64 } // ValidatorManagerSettings is an auto generated low-level Go binding around an user-defined struct. @@ -103,8 +104,8 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"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\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615c7a380380615c7a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b2d8061014d5f395ff3fe608060405260043610610228575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610666578063d5f20ff61461067a578063df93d8de146106a6578063fb8b11dd146106bc578063fd7ac5e7146106db575f80fd5b8063b771b3bc146105db578063ba3a4b97146105f5578063bc5fbfec14610614578063bee0a03f14610634578063c599e24f14610653575f80fd5b80639ae06447116100ee5780639ae0644714610557578063a3a65e4814610576578063a9778a7a1461037c578063af2f5feb14610595578063afb98096146105a8575f80fd5b80637d8d2f77146104c757806380dd672f146104e65780638280a25a146105055780638ef34c981461051957806393e2459814610538575f80fd5b806335455ded116101b557806360305d621161017a57806360305d621461042057806360ad7784146104495780636206585614610468578063732214f81461049557806376f78621146104a8575f80fd5b806335455ded1461037c57806337b9be8f146103a45780633a1cfff6146103c3578063467ef06f146103e25780635dd6a6cb14610401575f80fd5b80631ec44724116101fb5780631ec44724146102b657806320d91b7a146102d557806325e1c776146102f45780632e2194d814610313578063329c3e121461034a575f80fd5b80630118acc41461022c5780630322ed981461024d5780630ba512d11461026c578063151d30d11461028b575b5f80fd5b348015610237575f80fd5b5061024b610246366004614aff565b6106fa565b005b348015610258575f80fd5b5061024b610267366004614b3a565b61070b565b348015610277575f80fd5b5061024b610286366004614b51565b61099b565b348015610296575f80fd5b5061029f600a81565b60405160ff90911681526020015b60405180910390f35b3480156102c1575f80fd5b5061024b6102d0366004614aff565b610a78565b3480156102e0575f80fd5b5061024b6102ef366004614b68565b610a84565b3480156102ff575f80fd5b5061024b61030e366004614bb6565b61103a565b34801561031e575f80fd5b5061033261032d366004614b3a565b6110ae565b6040516001600160401b0390911681526020016102ad565b348015610355575f80fd5b506103646001600160991b0181565b6040516001600160a01b0390911681526020016102ad565b348015610387575f80fd5b5061039161271081565b60405161ffff90911681526020016102ad565b3480156103af575f80fd5b5061024b6103be366004614beb565b611102565b3480156103ce575f80fd5b5061024b6103dd366004614aff565b611115565b3480156103ed575f80fd5b5061024b6103fc366004614c39565b611121565b34801561040c575f80fd5b5061024b61041b366004614beb565b6111f3565b34801561042b575f80fd5b50610434601481565b60405163ffffffff90911681526020016102ad565b348015610454575f80fd5b5061024b610463366004614bb6565b6111ff565b348015610473575f80fd5b50610487610482366004614c66565b6114c7565b6040519081526020016102ad565b3480156104a0575f80fd5b506104875f81565b3480156104b3575f80fd5b5061024b6104c2366004614aff565b6114e7565b3480156104d2575f80fd5b5061024b6104e1366004614beb565b6114f3565b3480156104f1575f80fd5b5061024b610500366004614bb6565b6114ff565b348015610510575f80fd5b5061029f603081565b348015610524575f80fd5b5061024b610533366004614c81565b611739565b348015610543575f80fd5b5061024b610552366004614b3a565b6117ea565b348015610562575f80fd5b5061024b610571366004614beb565b61187e565b348015610581575f80fd5b5061024b610590366004614c39565b61188a565b6104876105a3366004614cc0565b611a80565b3480156105b3575f80fd5b506104877f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b3480156105e6575f80fd5b506103646005600160991b0181565b348015610600575f80fd5b5061024b61060f366004614b3a565b611ab4565b34801561061f575f80fd5b506104875f80516020615a9883398151915281565b34801561063f575f80fd5b5061024b61064e366004614b3a565b611d0d565b610487610661366004614b3a565b611e49565b348015610671575f80fd5b5061029f601481565b348015610685575f80fd5b50610699610694366004614b3a565b611e7a565b6040516102ad9190614d96565b3480156106b1575f80fd5b506103326202a30081565b3480156106c7575f80fd5b5061024b6106d6366004614c81565b611fc9565b3480156106e6575f80fd5b506104876106f5366004614e16565b612060565b6107068383835f6120bb565b505050565b5f8181525f80516020615ab88339815191526020526040808220815160e0810190925280545f80516020615a9883398151915293929190829060ff16600581111561075857610758614d21565b600581111561076957610769614d21565b815260200160018201805461077d90614e81565b80601f01602080910402602001604051908101604052809291908181526020018280546107a990614e81565b80156107f45780601f106107cb576101008083540402835291602001916107f4565b820191905f5260205f20905b8154815290600101906020018083116107d757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561085f5761085f614d21565b1461089b575f8381526005830160205260409081902054905163170cc93360e21b81526108929160ff1690600401614eb3565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610912573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109399190810190614fbc565b6040518263ffffffff1660e01b81526004016109559190614fed565b6020604051808303815f875af1158015610971573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109959190614fff565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806109e4575080546001600160401b03808416911610155b15610a025760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a2c836120e7565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109958383835f6120f8565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615a988339815191529060ff1615610ad657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3d9190614fff565b836020013514610b66576040516372b0a7e760e11b815260208401356004820152602401610892565b30610b776060850160408601615016565b6001600160a01b031614610bba57610b956060840160408501615016565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610892565b5f610bc86060850185615031565b905090505f805b828163ffffffff161015610e30575f610beb6060880188615031565b8363ffffffff16818110610c0157610c01615076565b9050602002810190610c13919061508a565b610c1c906150f5565b80516040519192505f916006880191610c3491615170565b90815260200160405180910390205414610c6457805160405163a41f772f60e01b81526108929190600401614fed565b5f6002885f013584604051602001610c9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cad91615170565b602060405180830381855afa158015610cc8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ceb9190614fff565b90508086600601835f0151604051610d039190615170565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610d4390826151c5565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610dc39085615294565b8251604051919550610dd491615170565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610e29906152b4565b9050610bcf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610e73910460ff16836152d6565b6001600160401b03161015610ea657604051633e1a785160e01b81526001600160401b0382166004820152602401610892565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610eca8761242d565b604001516040518263ffffffff1660e01b8152600401610eea9190614fed565b602060405180830381865af4158015610f05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f299190614fff565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f63919061542c565b5f60405180830381865af4158015610f7d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fa49190810190614fbc565b90505f600282604051610fb79190615170565b602060405180830381855afa158015610fd2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ff59190614fff565b90508281146110215760405163baaea89d60e01b81526004810182905260248101849052604401610892565b5050506007909201805460ff1916600117905550505050565b61104382612543565b611063576040516330efa98b60e01b815260048101839052602401610892565b5f61106d83611e7a565b519050600281600581111561108457611084614d21565b146110a4578060405163170cc93360e21b81526004016108929190614eb3565b610995838361256c565b5f806110b861280b565b600301546110c690846154c0565b90508015806110db57506001600160401b0381115b156110fc5760405163222d164360e21b815260048101849052602401610892565b92915050565b61110e848484846120f8565b5050505050565b6109958383835f61282f565b611129612a6c565b5f61113261280b565b90505f8061113f84612aa3565b9150915061114c82612543565b611158575050506111da565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b0391821691168061119a5750805b6004835160058111156111af576111af614d21565b036111be576111be8185612e5b565b6111d4826111cf85604001516114c7565b612e85565b50505050505b6111f060015f80516020615ad883398151915255565b50565b61099584848484612eab565b5f61120861280b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561124157611241614d21565b600381111561125257611252614d21565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112c882611e7a565b90506001835160038111156112df576112df614d21565b14611300578251604051633b0d540d60e21b815261089291906004016154df565b60048151600581111561131557611315614d21565b0361132b5761132386612ed7565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f6113508961242d565b604001516040518263ffffffff1660e01b81526004016113709190614fed565b606060405180830381865af415801561138b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113af91906154f9565b50915091508184146113dc57846040015160405163089938b360e11b815260040161089291815260200190565b806001600160401b031683606001516001600160401b031610806114155750806001600160401b03168560a001516001600160401b0316115b1561143e57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610892565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114d061280b565b600301546110fc906001600160401b03841661552e565b6107068383835f612eab565b61110e8484848461282f565b611507612a6c565b5f61151061280b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561154957611549614d21565b600381111561155a5761155a614d21565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115d3576115d3614d21565b146115f4578051604051633b0d540d60e21b815261089291906004016154df565b60046116038260400151611e7a565b51600581111561161557611615614d21565b14611714575f6116248461242d565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116639190614fed565b606060405180830381865af415801561167e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a291906154f9565b5091509150818460400151146116ce5760405163089938b360e11b815260048101839052602401610892565b806001600160401b03168460c001516001600160401b0316111561171057604051632e19bc2d60e11b81526001600160401b0382166004820152602401610892565b5050505b61171d84612ed7565b505061173560015f80516020615ad883398151915255565b5050565b5f61174261280b565b90506001600160a01b0382166117765760405163caa903f960e01b81526001600160a01b0383166004820152602401610892565b5f8381526006820160205260409020546001600160a01b031633146117bc57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610892565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6117f361280b565b90505f6117ff83611e7a565b519050600481600581111561181657611816614d21565b14611836578060405163170cc93360e21b81526004016108929190614eb3565b5f8381526006830160205260409020546001600160a01b0316331461185b5733611797565b5f838152600683016020526040902054610706906001600160a01b031684612e5b565b610995848484846120bb565b5f80516020615a988339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118bd8661242d565b604001516040518263ffffffff1660e01b81526004016118dd9190614fed565b6040805180830381865af41580156118f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061191b9190615545565b915091508061194157604051632d07135360e01b81528115156004820152602401610892565b5f8281526004840160205260409020805461195b90614e81565b90505f0361197f5760405163089938b360e11b815260048101839052602401610892565b60015f838152600580860160205260409091205460ff16908111156119a6576119a6614d21565b146119d9575f8281526005840160205260409081902054905163170cc93360e21b81526108929160ff1690600401614eb3565b5f82815260048401602052604081206119f191614a53565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f611a89612a6c565b611a95848484346130d1565b9050611aad60015f80516020615ad883398151915255565b9392505050565b5f611abd61280b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611af657611af6614d21565b6003811115611b0757611b07614d21565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b8057611b80614d21565b14158015611ba15750600381516003811115611b9e57611b9e614d21565b14155b15611bc2578051604051633b0d540d60e21b815261089291906004016154df565b5f611bd08260400151611e7a565b905080606001516001600160401b03165f03611c02576040516339b894f960e21b815260048101859052602401610892565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c7093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c8a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cb19190810190614fbc565b6040518263ffffffff1660e01b8152600401611ccd9190614fed565b6020604051808303815f875af1158015611ce9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110e9190614fff565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615a988339815191529190611d5490614e81565b90505f03611d785760405163089938b360e11b815260048101839052602401610892565b60015f838152600580840160205260409091205460ff1690811115611d9f57611d9f614d21565b14611dd2575f8281526005820160205260409081902054905163170cc93360e21b81526108929160ff1690600401614eb3565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e099201615568565b6020604051808303815f875af1158015611e25573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107069190614fff565b5f611e52612a6c565b611e5d823334613246565b9050611e7560015f80516020615ad883398151915255565b919050565b611e82614a8a565b5f8281525f80516020615ab8833981519152602052604090819020815160e0810190925280545f80516020615a98833981519152929190829060ff166005811115611ecf57611ecf614d21565b6005811115611ee057611ee0614d21565b8152602001600182018054611ef490614e81565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2090614e81565b8015611f6b5780601f10611f4257610100808354040283529160200191611f6b565b820191905f5260205f20905b815481529060010190602001808311611f4e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ffb5760405163caa903f960e01b81526001600160a01b0382166004820152602401610892565b5f61200461280b565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146120325733611797565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615a98833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906120a390869086906155f2565b90815260200160405180910390205491505092915050565b6120c7848484846120f8565b61099557604051631036cf9160e11b815260048101859052602401610892565b6120ef613486565b6111f0816134d1565b5f8061210261280b565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561213b5761213b614d21565b600381111561214c5761214c614d21565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6121c282611e7a565b90506002835160038111156121d9576121d9614d21565b146121fa578251604051633b0d540d60e21b815261089291906004016154df565b60208301516001600160a01b03163314612296575f8281526006850160205260409020546001600160a01b031633146122335733611797565b5f82815260068501602052604090205460a082015161226291600160b01b90046001600160401b031690615294565b6001600160401b03164210156122965760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610892565b6002815160058111156122ab576122ab614d21565b036123cd57600284015460808401516122cd916001600160401b031690615294565b6001600160401b03164210156123015760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610892565b871561231357612311828861256c565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161234c9184916123479190615601565b61354b565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561238f84888c613722565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124259350505050565b6004815160058111156123e2576123e2614d21565b03612409576123f283878b613722565b506123fc89612ed7565b6001945050505050612425565b805160405163170cc93360e21b81526108929190600401614eb3565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612491573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124b89190810190615621565b91509150806124da57604051636b2f19e960e01b815260040160405180910390fd5b815115612500578151604051636ba589a560e01b81526004810191909152602401610892565b60208201516001600160a01b03161561253c576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610892565b5092915050565b5f8061254d61280b565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156125b7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125de9190810190615621565b915091508061260057604051636b2f19e960e01b815260040160405180910390fd5b5f61260961280b565b6005810154845191925014612637578251604051636ba589a560e01b81526004810191909152602401610892565b60208301516001600160a01b031615612673576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610892565b60208301516001600160a01b0316156126af576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610892565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126ec9190614fed565b6040805180830381865af4158015612706573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272a91906156b1565b915091508188146127515760405163089938b360e11b815260048101899052602401610892565b5f8881526006840160205260409020600101546001600160401b0390811690821611156127e2575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612800565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061283961280b565b90505f61284587613910565b905061285087612543565b61285f57600192505050612425565b5f8781526006830160205260409020546001600160a01b031633146128845733611797565b5f87815260068301602052604090205460a08201516128b391600160b01b90046001600160401b031690615294565b6001600160401b03168160c001516001600160401b031610156128fa5760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610892565b5f86156129125761290b888761256c565b9050612930565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612955906114c7565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156129be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129e29190614fff565b90506001600160a01b038616612a0e575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a2d9084906156d4565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615ad8833981519152805460011901612a9d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612aac614a8a565b5f80516020615a988339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612adf8861242d565b604001516040518263ffffffff1660e01b8152600401612aff9190614fed565b6040805180830381865af4158015612b19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b3d9190615545565b915091508015612b6457604051632d07135360e01b81528115156004820152602401610892565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612b9b57612b9b614d21565b6005811115612bac57612bac614d21565b8152602001600182018054612bc090614e81565b80601f0160208091040260200160405190810160405280929190818152602001828054612bec90614e81565b8015612c375780601f10612c0e57610100808354040283529160200191612c37565b820191905f5260205f20905b815481529060010190602001808311612c1a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612ca257612ca2614d21565b14158015612cc35750600181516005811115612cc057612cc0614d21565b14155b15612ce457805160405163170cc93360e21b81526108929190600401614eb3565b600381516005811115612cf957612cf9614d21565b03612d075760048152612d0c565b600581525b836006018160200151604051612d229190615170565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612d6557612d65614d21565b021790555060208201516001820190612d7e90826151c5565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e2457612e24614d21565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612e6461280b565b5f838152600a82016020526040812080549190559091506109958482613bf5565b6117356001600160a01b03831682613c53565b60015f80516020615ad883398151915255565b612eb78484848461282f565b61099557604051635bff683f60e11b815260048101859052602401610892565b5f612ee061280b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f1957612f19614d21565b6003811115612f2a57612f2a614d21565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612fc77fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612fd69190615294565b6001600160401b031642101561300a5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610892565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680613065575060208201515b5f80613072838886613ce6565b9150915061308b85602001516111cf87606001516114c7565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806130db61280b565b600281015490915061ffff600160401b90910481169086161080613104575061271061ffff8616115b1561312857604051635f12e6c360e11b815261ffff86166004820152602401610892565b60028101546001600160401b039081169085161015613164576040516202a06d60e11b81526001600160401b0385166004820152602401610892565b80548310806131765750806001015483115b156131975760405163222d164360e21b815260048101849052602401610892565b825f6131a2826110ae565b90505f6131af8983613d93565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061325061280b565b90505f61325c846110ae565b90505f61326887611e7a565b905061327387612543565b613293576040516330efa98b60e01b815260048101889052602401610892565b6002815160058111156132a8576132a8614d21565b146132c957805160405163170cc93360e21b81526108929190600401614eb3565b5f8282608001516132da9190615294565b905083600201600a9054906101000a90046001600160401b0316826040015161330391906152d6565b6001600160401b0316816001600160401b0316111561334057604051636d51fe0560e11b81526001600160401b0382166004820152602401610892565b5f8061334c8a8461354b565b915091505f8a8360405160200161337a92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166134cf57604051631afcd79f60e31b815260040160405180910390fd5b565b6134d9613486565b6134e281614305565b6134ea61431e565b6111f06060820135608083013561350760c0850160a08601614c66565b61351760e0860160c087016156e7565b613528610100870160e08801615700565b61010087013561354061014089016101208a01615016565b88610140013561432e565b5f8281525f80516020615ab8833981519152602052604081206002015481905f80516020615a9883398151915290600160801b90046001600160401b03166135938582614513565b5f61359d8761477d565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613646573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261366d9190810190614fbc565b6040518263ffffffff1660e01b81526004016136899190614fed565b6020604051808303815f875af11580156136a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136c99190614fff565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061372c61280b565b90505f61373c8660400151611e7a565b90505f60038251600581111561375457613754614d21565b1480613772575060048251600581111561377057613770614d21565b145b15613782575060c08101516137bf565b60028251600581111561379757613797614d21565b036137a35750426137bf565b815160405163170cc93360e21b81526108929190600401614eb3565b86608001516001600160401b0316816001600160401b0316116137e7575f9350505050611aad565b600483015460608801515f916001600160a01b031690634f22429f9061380c906114c7565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561388d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138b19190614fff565b90506001600160a01b0387166138c957876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b613918614a8a565b5f8281525f80516020615ab88339815191526020526040808220815160e0810190925280545f80516020615a9883398151915293929190829060ff16600581111561396557613965614d21565b600581111561397657613976614d21565b815260200160018201805461398a90614e81565b80601f01602080910402602001604051908101604052809291908181526020018280546139b690614e81565b8015613a015780601f106139d857610100808354040283529160200191613a01565b820191905f5260205f20905b8154815290600101906020018083116139e457829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613a6f57613a6f614d21565b14613aa2575f8481526005830160205260409081902054905163170cc93360e21b81526108929160ff1690600401614eb3565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff1916906001908490811115613ae757613ae7614d21565b021790555060208201516001820190613b0090826151c5565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613b9e858261354b565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c41575f80fd5b505af1158015611323573d5f803e3d5ffd5b80471015613c765760405163cd78605960e01b8152306004820152602401610892565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613cbf576040519150601f19603f3d011682016040523d82523d5f602084013e613cc4565b606091505b505090508061070657604051630a12f52160e11b815260040160405180910390fd5b5f805f613cf161280b565b5f86815260088201602052604081208054908290559192509081908015613d85575f87815260068501602052604090205461271090613d3b90600160a01b900461ffff168361552e565b613d4591906154c0565b91508184600a015f8981526020019081526020015f205f828254613d6991906156d4565b90915550613d7990508282615720565b9250613d858984613bf5565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613dd757604051637fab81e560e01b815260040160405180910390fd5b5f80516020615a9883398151915242613df66060860160408701614c66565b6001600160401b0316111580613e305750613e146202a300426156d4565b613e246060860160408701614c66565b6001600160401b031610155b15613e6a57613e456060850160408601614c66565b604051635879da1360e11b81526001600160401b039091166004820152602401610892565b60038101546001600160401b0390613e8d90600160401b900482168583166156d4565b1115613eb757604051633e1a785160e01b81526001600160401b0384166004820152602401610892565b613ecc613ec76060860186615733565b6147f2565b613edc613ec76080860186615733565b6030613eeb6020860186615747565b905014613f1d57613eff6020850185615747565b6040516326475b2f60e11b8152610892925060040190815260200190565b613f278480615747565b90505f03613f5457613f398480615747565b604051633e08a12560e11b8152600401610892929190615789565b5f60068201613f638680615747565b604051613f719291906155f2565b90815260200160405180910390205414613faa57613f8f8480615747565b60405163a41f772f60e01b8152600401610892929190615789565b613fb4835f614513565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613ff18a80615747565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614039908b018b615747565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161408260608b0160408c01614c66565b6001600160401b0316815260200161409d60608b018b615733565b6140a69061579c565b81526020016140b860808b018b615733565b6140c19061579c565b8152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016140ef91906158c9565b5f60405180830381865af4158015614109573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141309190810190615980565b5f8281526004860160205260409020919350915061414e82826151c5565b50816006840161415e8880615747565b60405161416c9291906155f2565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141a8908590600401614fed565b6020604051808303815f875af11580156141c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141e89190614fff565b5f8481526005860160205260409020805460ff19166001179055905061420e8780615747565b5f85815260058701602052604090206001019161422c9190836159c3565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff191690558061428b8880615747565b6040516142999291906155f2565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906142d79190614c66565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61430d613486565b61431561495b565b6111f081614963565b614326613486565b6134cf614a4b565b614336613486565b5f61433f61280b565b905061ffff86161580614357575061271061ffff8716115b1561437b57604051635f12e6c360e11b815261ffff87166004820152602401610892565b8789111561439f5760405163222d164360e21b8152600481018a9052602401610892565b60ff851615806143b25750600a60ff8616115b156143d55760405163170db35960e31b815260ff86166004820152602401610892565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b0316101561443c576040516202a06d60e11b81526001600160401b0388166004820152602401610892565b835f0361445c5760405163a733007160e01b815260040160405180910390fd5b8161447d57604051632f6bd1db60e01b815260048101839052602401610892565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615a988339815191525f6001600160401b038084169085161115614547576145408385615601565b9050614554565b6145518484615601565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c15750600184015481516145bd916001600160401b0316906156d4565b8210155b156145e9576001600160401b0380841660608301528282526040820151166020820152614608565b82816060018181516145fb9190615294565b6001600160401b03169052505b60608101516146189060646152d6565b602082015160018601546001600160401b0392909216916146439190600160401b900460ff166152d6565b6001600160401b0316101561467c57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610892565b858160400181815161468e9190615294565b6001600160401b03169052506040810180518691906146ae908390615601565b6001600160401b0316905250600184015460408201516064916146dc91600160401b90910460ff16906152d6565b6001600160401b03161015614715576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610892565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615ab88339815191526020526040812060020180545f80516020615a9883398151915291906008906147c790600160401b90046001600160401b0316615a7c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147ff6020820182614c39565b63ffffffff1615801561481f575061481a6020820182615031565b151590505b15614866576148316020820182614c39565b61483e6020830183615031565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610892565b6148736020820182615031565b90506148826020830183614c39565b63ffffffff16111561489b576148316020820182614c39565b60015b6148ab6020830183615031565b9050811015611735576148c16020830183615031565b6148cc600184615720565b8181106148db576148db615076565b90506020020160208101906148f09190615016565b6001600160a01b03166149066020840184615031565b8381811061491657614916615076565b905060200201602081019061492b9190615016565b6001600160a01b0316101561495357604051630dbc8d5f60e31b815260040160405180910390fd5b60010161489e565b6134cf613486565b61496b613486565b80355f80516020615a9883398151915290815560146149906060840160408501615700565b60ff1611806149af57506149aa6060830160408401615700565b60ff16155b156149e3576149c46060830160408401615700565b604051634a59bbff60e11b815260ff9091166004820152602401610892565b6149f36060830160408401615700565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a246040830160208401614c66565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612e98613486565b508054614a5f90614e81565b5f825580601f10614a6e575050565b601f0160209004905f5260205f20908101906111f09190614ac7565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614adb575f8155600101614ac8565b5090565b80151581146111f0575f80fd5b803563ffffffff81168114611e75575f80fd5b5f805f60608486031215614b11575f80fd5b833592506020840135614b2381614adf565b9150614b3160408501614aec565b90509250925092565b5f60208284031215614b4a575f80fd5b5035919050565b5f6101608284031215614b62575f80fd5b50919050565b5f8060408385031215614b79575f80fd5b82356001600160401b03811115614b8e575f80fd5b830160808186031215614b9f575f80fd5b9150614bad60208401614aec565b90509250929050565b5f8060408385031215614bc7575f80fd5b82359150614bad60208401614aec565b6001600160a01b03811681146111f0575f80fd5b5f805f8060808587031215614bfe575f80fd5b843593506020850135614c1081614adf565b9250614c1e60408601614aec565b91506060850135614c2e81614bd7565b939692955090935050565b5f60208284031215614c49575f80fd5b611aad82614aec565b6001600160401b03811681146111f0575f80fd5b5f60208284031215614c76575f80fd5b8135611aad81614c52565b5f8060408385031215614c92575f80fd5b823591506020830135614ca481614bd7565b809150509250929050565b803561ffff81168114611e75575f80fd5b5f805f60608486031215614cd2575f80fd5b83356001600160401b03811115614ce7575f80fd5b840160a08187031215614cf8575f80fd5b9250614d0660208501614caf565b91506040840135614d1681614c52565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d4557614d45614d21565b9052565b5f5b83811015614d63578181015183820152602001614d4b565b50505f910152565b5f8151808452614d82816020860160208601614d49565b601f01601f19169290920160200192915050565b60208152614da8602082018351614d35565b5f602083015160e06040840152614dc3610100840182614d6b565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e27575f80fd5b82356001600160401b0380821115614e3d575f80fd5b818501915085601f830112614e50575f80fd5b813581811115614e5e575f80fd5b866020828501011115614e6f575f80fd5b60209290920196919550909350505050565b600181811c90821680614e9557607f821691505b602082108103614b6257634e487b7160e01b5f52602260045260245ffd5b602081016110fc8284614d35565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ef757614ef7614ec1565b60405290565b604080519081016001600160401b0381118282101715614ef757614ef7614ec1565b604051601f8201601f191681016001600160401b0381118282101715614f4757614f47614ec1565b604052919050565b5f6001600160401b03821115614f6757614f67614ec1565b50601f01601f191660200190565b5f82601f830112614f84575f80fd5b8151614f97614f9282614f4f565b614f1f565b818152846020838601011115614fab575f80fd5b612425826020830160208701614d49565b5f60208284031215614fcc575f80fd5b81516001600160401b03811115614fe1575f80fd5b61242584828501614f75565b602081525f611aad6020830184614d6b565b5f6020828403121561500f575f80fd5b5051919050565b5f60208284031215615026575f80fd5b8135611aad81614bd7565b5f808335601e19843603018112615046575f80fd5b8301803591506001600160401b0382111561505f575f80fd5b6020019150600581901b360382131561371b575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261509e575f80fd5b9190910192915050565b5f82601f8301126150b7575f80fd5b81356150c5614f9282614f4f565b8181528460208386010111156150d9575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615105575f80fd5b61510d614ed5565b82356001600160401b0380821115615123575f80fd5b61512f368387016150a8565b83526020850135915080821115615144575f80fd5b50615151368286016150a8565b602083015250604083013561516581614c52565b604082015292915050565b5f825161509e818460208701614d49565b601f82111561070657805f5260205f20601f840160051c810160208510156151a65750805b601f840160051c820191505b8181101561110e575f81556001016151b2565b81516001600160401b038111156151de576151de614ec1565b6151f2816151ec8454614e81565b84615181565b602080601f831160018114615225575f841561520e5750858301515b5f19600386901b1c1916600185901b178555611323565b5f85815260208120601f198616915b8281101561525357888601518255948401946001909101908401615234565b508582101561527057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561253c5761253c615280565b5f63ffffffff8083168181036152cc576152cc615280565b6001019392505050565b6001600160401b038181168382160280821691908281146152f9576152f9615280565b505092915050565b5f808335601e19843603018112615316575f80fd5b83016020810192503590506001600160401b03811115615334575f80fd5b80360382131561371b575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561541f57848303601f19018952813536889003605e190181126153a6575f80fd5b870160606153b48280615301565b8287526153c48388018284615342565b925050506153d486830183615301565b868303888801526153e6838284615342565b9250505060408083013592506153fb83614c52565b6001600160401b039290921694909101939093529783019790830190600101615381565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561545081614bd7565b6001600160a01b031660608381019190915283013536849003601e19018112615477575f80fd5b83016020810190356001600160401b03811115615492575f80fd5b8060051b36038213156154a3575f80fd5b6080808501526154b760a08501828461536a565b95945050505050565b5f826154da57634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106154f3576154f3614d21565b91905290565b5f805f6060848603121561550b575f80fd5b83519250602084015161551d81614c52565b6040850151909250614d1681614c52565b80820281158282048414176110fc576110fc615280565b5f8060408385031215615556575f80fd5b825191506020830151614ca481614adf565b5f60208083525f845461557a81614e81565b806020870152604060018084165f811461559b57600181146155b7576155e4565b60ff19851660408a0152604084151560051b8a010195506155e4565b895f5260205f205f5b858110156155db5781548b82018601529083019088016155c0565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561253c5761253c615280565b5f8060408385031215615632575f80fd5b82516001600160401b0380821115615648575f80fd5b908401906060828703121561565b575f80fd5b615663614ed5565b82518152602083015161567581614bd7565b602082015260408301518281111561568b575f80fd5b61569788828601614f75565b6040830152508094505050506020830151614ca481614adf565b5f80604083850312156156c2575f80fd5b825191506020830151614ca481614c52565b808201808211156110fc576110fc615280565b5f602082840312156156f7575f80fd5b611aad82614caf565b5f60208284031215615710575f80fd5b813560ff81168114611aad575f80fd5b818103818111156110fc576110fc615280565b5f8235603e1983360301811261509e575f80fd5b5f808335601e1984360301811261575c575f80fd5b8301803591506001600160401b03821115615775575f80fd5b60200191503681900382131561371b575f80fd5b602081525f612425602083018486615342565b5f604082360312156157ac575f80fd5b6157b4614efd565b6157bd83614aec565b81526020808401356001600160401b03808211156157d9575f80fd5b9085019036601f8301126157eb575f80fd5b8135818111156157fd576157fd614ec1565b8060051b915061580e848301614f1f565b8181529183018401918481019036841115615827575f80fd5b938501935b83851015615851578435925061584183614bd7565b828252938501939085019061582c565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158be5784516001600160a01b03168252938301936001929092019190830190615895565b509695505050505050565b60208152815160208201525f602083015160e060408401526158ef610100840182614d6b565b90506040840151601f198085840301606086015261590d8383614d6b565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261593d8383615863565b925060a08601519150808584030160c08601525061595b8282615863565b91505060c084015161597860e08501826001600160401b03169052565b509392505050565b5f8060408385031215615991575f80fd5b8251915060208301516001600160401b038111156159ad575f80fd5b6159b985828601614f75565b9150509250929050565b6001600160401b038311156159da576159da614ec1565b6159ee836159e88354614e81565b83615181565b5f601f841160018114615a1f575f8515615a085750838201355b5f19600387901b1c1916600186901b17835561110e565b5f83815260208120601f198716915b82811015615a4e5786850135825560209485019460019092019101615a2e565b5086821015615a6a575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b038083168181036152cc576152cc61528056fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220c6b95b0cfc7fd2728184fa003095efa246be86e199b7ff9c5ccdf31a9ed4ecbd64736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122033f9e83c5be41943b2db5ab5ee83dc6bdd04808b64e5ddadb52bbfaca55b81a864736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -651,7 +652,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) WARPME // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_NativeTokenStakingManager *NativeTokenStakingManagerCaller) GetValidator(opts *bind.CallOpts, validationID [32]byte) (Validator, error) { var out []interface{} err := _NativeTokenStakingManager.contract.Call(opts, &out, "getValidator", validationID) @@ -668,18 +669,49 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerCaller) GetValidator( // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) GetValidator(validationID [32]byte) (Validator, error) { return _NativeTokenStakingManager.Contract.GetValidator(&_NativeTokenStakingManager.CallOpts, validationID) } // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) GetValidator(validationID [32]byte) (Validator, error) { return _NativeTokenStakingManager.Contract.GetValidator(&_NativeTokenStakingManager.CallOpts, validationID) } +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCaller) L1TotalWeight(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _NativeTokenStakingManager.contract.Call(opts, &out, "l1TotalWeight") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) L1TotalWeight() (uint64, error) { + return _NativeTokenStakingManager.Contract.L1TotalWeight(&_NativeTokenStakingManager.CallOpts) +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) L1TotalWeight() (uint64, error) { + return _NativeTokenStakingManager.Contract.L1TotalWeight(&_NativeTokenStakingManager.CallOpts) +} + // RegisteredValidators is a free data retrieval call binding the contract method 0xfd7ac5e7. // // Solidity: function registeredValidators(bytes nodeID) view returns(bytes32) @@ -711,6 +743,37 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) Regist return _NativeTokenStakingManager.Contract.RegisteredValidators(&_NativeTokenStakingManager.CallOpts, nodeID) } +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCaller) SubnetID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _NativeTokenStakingManager.contract.Call(opts, &out, "subnetID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) SubnetID() ([32]byte, error) { + return _NativeTokenStakingManager.Contract.SubnetID(&_NativeTokenStakingManager.CallOpts) +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) SubnetID() ([32]byte, error) { + return _NativeTokenStakingManager.Contract.SubnetID(&_NativeTokenStakingManager.CallOpts) +} + // ValueToWeight is a free data retrieval call binding the contract method 0x2e2194d8. // // Solidity: function valueToWeight(uint256 value) view returns(uint64) @@ -878,48 +941,69 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Co return _NativeTokenStakingManager.Contract.CompleteEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteEndValidation(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "completeEndValidation", messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.CompleteEndValidation(&_NativeTokenStakingManager.TransactOpts, messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.CompleteEndValidation(&_NativeTokenStakingManager.TransactOpts, messageIndex) -} - // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteValidatorRegistration(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { return _NativeTokenStakingManager.contract.Transact(opts, "completeValidatorRegistration", messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { return _NativeTokenStakingManager.Contract.CompleteValidatorRegistration(&_NativeTokenStakingManager.TransactOpts, messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { return _NativeTokenStakingManager.Contract.CompleteValidatorRegistration(&_NativeTokenStakingManager.TransactOpts, messageIndex) } +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteValidatorRemoval(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "completeValidatorRemoval", messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteValidatorRemoval(&_NativeTokenStakingManager.TransactOpts, messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteValidatorRemoval(&_NativeTokenStakingManager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteValidatorWeightUpdate(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "completeValidatorWeightUpdate", messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteValidatorWeightUpdate(&_NativeTokenStakingManager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteValidatorWeightUpdate(&_NativeTokenStakingManager.TransactOpts, messageIndex) +} + // ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. // // Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() @@ -1256,9 +1340,9 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Su return _NativeTokenStakingManager.Contract.SubmitUptimeProof(&_NativeTokenStakingManager.TransactOpts, validationID, messageIndex) } -// NativeTokenStakingManagerDelegationEndedIterator is returned from FilterDelegationEnded and is used to iterate over the raw logs and unpacked data for DelegationEnded events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegationEndedIterator struct { - Event *NativeTokenStakingManagerDelegationEnded // Event containing the contract specifics and raw log +// NativeTokenStakingManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRegistrationIterator struct { + Event *NativeTokenStakingManagerCompletedValidatorRegistration // 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 @@ -1272,7 +1356,7 @@ type NativeTokenStakingManagerDelegationEndedIterator struct { // 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 *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { +func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1281,7 +1365,7 @@ func (it *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegationEnded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1296,7 +1380,7 @@ func (it *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegationEnded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1312,62 +1396,53 @@ func (it *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegationEndedIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegationEndedIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegationEnded represents a DelegationEnded event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegationEnded struct { - DelegationID [32]byte +// NativeTokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRegistration struct { ValidationID [32]byte - Rewards *big.Int - Fees *big.Int + NodeID []byte + Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegationEnded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegationEndedIterator, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorRegistrationIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegationEndedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedValidatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegationEnded(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegationEnded, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } @@ -1377,8 +1452,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerDelegationEnded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { + event := new(NativeTokenStakingManagerCompletedValidatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -1399,21 +1474,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegationEnded(log types.Log) (*NativeTokenStakingManagerDelegationEnded, error) { - event := new(NativeTokenStakingManagerDelegationEnded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*NativeTokenStakingManagerCompletedValidatorRegistration, error) { + event := new(NativeTokenStakingManagerCompletedValidatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerDelegatorAddedIterator is returned from FilterDelegatorAdded and is used to iterate over the raw logs and unpacked data for DelegatorAdded events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorAddedIterator struct { - Event *NativeTokenStakingManagerDelegatorAdded // Event containing the contract specifics and raw log +// NativeTokenStakingManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRemovalIterator struct { + Event *NativeTokenStakingManagerCompletedValidatorRemoval // 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 @@ -1427,7 +1502,7 @@ type NativeTokenStakingManagerDelegatorAddedIterator struct { // 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 *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { +func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1436,7 +1511,7 @@ func (it *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorAdded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1451,7 +1526,7 @@ func (it *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorAdded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1467,73 +1542,51 @@ func (it *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegatorAddedIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegatorAddedIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegatorAdded represents a DelegatorAdded event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorAdded struct { - DelegationID [32]byte - ValidationID [32]byte - DelegatorAddress common.Address - Nonce uint64 - ValidatorWeight uint64 - DelegatorWeight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRemoval struct { + ValidationID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorAdded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*NativeTokenStakingManagerDelegatorAddedIterator, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorRemovalIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegatorAddedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedValidatorRemovalIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegatorAdded(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegatorAdded, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -1543,8 +1596,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerDelegatorAdded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { + event := new(NativeTokenStakingManagerCompletedValidatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -1565,21 +1618,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegatorAdded(log types.Log) (*NativeTokenStakingManagerDelegatorAdded, error) { - event := new(NativeTokenStakingManagerDelegatorAdded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*NativeTokenStakingManagerCompletedValidatorRemoval, error) { + event := new(NativeTokenStakingManagerCompletedValidatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerDelegatorRegisteredIterator is returned from FilterDelegatorRegistered and is used to iterate over the raw logs and unpacked data for DelegatorRegistered events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRegisteredIterator struct { - Event *NativeTokenStakingManagerDelegatorRegistered // Event containing the contract specifics and raw log +// NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator struct { + Event *NativeTokenStakingManagerCompletedValidatorWeightUpdate // 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 @@ -1593,7 +1646,7 @@ type NativeTokenStakingManagerDelegatorRegisteredIterator struct { // 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 *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { +func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1602,7 +1655,7 @@ func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRegistered) + it.Event = new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1617,7 +1670,7 @@ func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRegistered) + it.Event = new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1633,61 +1686,53 @@ func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegatorRegistered represents a DelegatorRegistered event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRegistered struct { - DelegationID [32]byte +// NativeTokenStakingManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorWeightUpdate struct { ValidationID [32]byte - StartTime *big.Int + Nonce uint64 + Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorRegistered(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegatorRegisteredIterator, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegatorRegisteredIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegatorRegistered(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegatorRegistered, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -1697,8 +1742,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerDelegatorRegistered) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { + event := new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -1719,21 +1764,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegatorRegistered(log types.Log) (*NativeTokenStakingManagerDelegatorRegistered, error) { - event := new(NativeTokenStakingManagerDelegatorRegistered) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*NativeTokenStakingManagerCompletedValidatorWeightUpdate, error) { + event := new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerDelegatorRemovalInitializedIterator is returned from FilterDelegatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for DelegatorRemovalInitialized events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRemovalInitializedIterator struct { - Event *NativeTokenStakingManagerDelegatorRemovalInitialized // Event containing the contract specifics and raw log +// NativeTokenStakingManagerDelegationEndedIterator is returned from FilterDelegationEnded and is used to iterate over the raw logs and unpacked data for DelegationEnded events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerDelegationEndedIterator struct { + Event *NativeTokenStakingManagerDelegationEnded // 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 @@ -1747,7 +1792,7 @@ type NativeTokenStakingManagerDelegatorRemovalInitializedIterator struct { // 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 *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() bool { +func (it *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1756,7 +1801,7 @@ func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() b if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(NativeTokenStakingManagerDelegationEnded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1771,7 +1816,7 @@ func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() b // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(NativeTokenStakingManagerDelegationEnded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1787,28 +1832,30 @@ func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() b } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Error() error { +func (it *NativeTokenStakingManagerDelegationEndedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Close() error { +func (it *NativeTokenStakingManagerDelegationEndedIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRemovalInitialized struct { +// NativeTokenStakingManagerDelegationEnded represents a DelegationEnded event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerDelegationEnded struct { DelegationID [32]byte ValidationID [32]byte + Rewards *big.Int + Fees *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegatorRemovalInitializedIterator, error) { +// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegationEnded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegationEndedIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1819,17 +1866,17 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDeleg validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegatorRemovalInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerDelegationEndedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil } -// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegatorRemovalInitialized, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegationEnded(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegationEnded, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1840,7 +1887,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1850,8 +1897,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerDelegatorRemovalInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { + event := new(NativeTokenStakingManagerDelegationEnded) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { return err } event.Raw = log @@ -1872,21 +1919,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegatorRemovalInitialized(log types.Log) (*NativeTokenStakingManagerDelegatorRemovalInitialized, error) { - event := new(NativeTokenStakingManagerDelegatorRemovalInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { +// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegationEnded(log types.Log) (*NativeTokenStakingManagerDelegationEnded, error) { + event := new(NativeTokenStakingManagerDelegationEnded) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerInitialValidatorCreatedIterator is returned from FilterInitialValidatorCreated and is used to iterate over the raw logs and unpacked data for InitialValidatorCreated events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerInitialValidatorCreatedIterator struct { - Event *NativeTokenStakingManagerInitialValidatorCreated // Event containing the contract specifics and raw log +// NativeTokenStakingManagerDelegatorAddedIterator is returned from FilterDelegatorAdded and is used to iterate over the raw logs and unpacked data for DelegatorAdded events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerDelegatorAddedIterator struct { + Event *NativeTokenStakingManagerDelegatorAdded // 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 @@ -1900,7 +1947,7 @@ type NativeTokenStakingManagerInitialValidatorCreatedIterator struct { // 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 *NativeTokenStakingManagerInitialValidatorCreatedIterator) Next() bool { +func (it *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1909,7 +1956,7 @@ func (it *NativeTokenStakingManagerInitialValidatorCreatedIterator) Next() bool if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerInitialValidatorCreated) + it.Event = new(NativeTokenStakingManagerDelegatorAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1924,7 +1971,7 @@ func (it *NativeTokenStakingManagerInitialValidatorCreatedIterator) Next() bool // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerInitialValidatorCreated) + it.Event = new(NativeTokenStakingManagerDelegatorAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1940,61 +1987,73 @@ func (it *NativeTokenStakingManagerInitialValidatorCreatedIterator) Next() bool } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerInitialValidatorCreatedIterator) Error() error { +func (it *NativeTokenStakingManagerDelegatorAddedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerInitialValidatorCreatedIterator) Close() error { +func (it *NativeTokenStakingManagerDelegatorAddedIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerInitialValidatorCreated represents a InitialValidatorCreated event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerInitialValidatorCreated struct { - ValidationID [32]byte - NodeID common.Hash - Weight uint64 - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerDelegatorAdded represents a DelegatorAdded event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerDelegatorAdded struct { + DelegationID [32]byte + ValidationID [32]byte + DelegatorAddress common.Address + Nonce uint64 + ValidatorWeight uint64 + DelegatorWeight uint64 + SetWeightMessageID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialValidatorCreated is a free log retrieval operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. +// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitialValidatorCreated(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][]byte) (*NativeTokenStakingManagerInitialValidatorCreatedIterator, error) { +// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorAdded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*NativeTokenStakingManagerDelegatorAddedIterator, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "InitialValidatorCreated", validationIDRule, nodeIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerInitialValidatorCreatedIterator{contract: _NativeTokenStakingManager.contract, event: "InitialValidatorCreated", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerDelegatorAddedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil } -// WatchInitialValidatorCreated is a free log subscription operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. +// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitialValidatorCreated(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitialValidatorCreated, validationID [][32]byte, nodeID [][]byte) (event.Subscription, error) { +// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegatorAdded(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegatorAdded, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "InitialValidatorCreated", validationIDRule, nodeIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } @@ -2004,8 +2063,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitia select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerInitialValidatorCreated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { + event := new(NativeTokenStakingManagerDelegatorAdded) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { return err } event.Raw = log @@ -2026,21 +2085,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitia }), nil } -// ParseInitialValidatorCreated is a log parse operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. +// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitialValidatorCreated(log types.Log) (*NativeTokenStakingManagerInitialValidatorCreated, error) { - event := new(NativeTokenStakingManagerInitialValidatorCreated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { +// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegatorAdded(log types.Log) (*NativeTokenStakingManagerDelegatorAdded, error) { + event := new(NativeTokenStakingManagerDelegatorAdded) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerInitializedIterator struct { - Event *NativeTokenStakingManagerInitialized // Event containing the contract specifics and raw log +// NativeTokenStakingManagerDelegatorRegisteredIterator is returned from FilterDelegatorRegistered and is used to iterate over the raw logs and unpacked data for DelegatorRegistered events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerDelegatorRegisteredIterator struct { + Event *NativeTokenStakingManagerDelegatorRegistered // 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 @@ -2054,7 +2113,7 @@ type NativeTokenStakingManagerInitializedIterator struct { // 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 *NativeTokenStakingManagerInitializedIterator) Next() bool { +func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2063,7 +2122,7 @@ func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerInitialized) + it.Event = new(NativeTokenStakingManagerDelegatorRegistered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2078,7 +2137,7 @@ func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerInitialized) + it.Event = new(NativeTokenStakingManagerDelegatorRegistered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2094,41 +2153,61 @@ func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerInitializedIterator) Error() error { +func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerInitializedIterator) Close() error { +func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerInitialized represents a Initialized event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerInitialized struct { - Version uint64 - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerDelegatorRegistered represents a DelegatorRegistered event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerDelegatorRegistered struct { + DelegationID [32]byte + ValidationID [32]byte + StartTime *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. // -// Solidity: event Initialized(uint64 version) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*NativeTokenStakingManagerInitializedIterator, error) { +// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorRegistered(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegatorRegisteredIterator, error) { - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "Initialized") + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerDelegatorRegisteredIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. // -// Solidity: event Initialized(uint64 version) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitialized) (event.Subscription, error) { +// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegatorRegistered(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegatorRegistered, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "Initialized") + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -2138,8 +2217,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitia select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(NativeTokenStakingManagerDelegatorRegistered) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { return err } event.Raw = log @@ -2160,21 +2239,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitia }), nil } -// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. // -// Solidity: event Initialized(uint64 version) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitialized(log types.Log) (*NativeTokenStakingManagerInitialized, error) { - event := new(NativeTokenStakingManagerInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegatorRegistered(log types.Log) (*NativeTokenStakingManagerDelegatorRegistered, error) { + event := new(NativeTokenStakingManagerDelegatorRegistered) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerUptimeUpdatedIterator is returned from FilterUptimeUpdated and is used to iterate over the raw logs and unpacked data for UptimeUpdated events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerUptimeUpdatedIterator struct { - Event *NativeTokenStakingManagerUptimeUpdated // Event containing the contract specifics and raw log +// NativeTokenStakingManagerDelegatorRemovalInitializedIterator is returned from FilterDelegatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for DelegatorRemovalInitialized events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerDelegatorRemovalInitializedIterator struct { + Event *NativeTokenStakingManagerDelegatorRemovalInitialized // 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 @@ -2188,7 +2267,7 @@ type NativeTokenStakingManagerUptimeUpdatedIterator struct { // 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 *NativeTokenStakingManagerUptimeUpdatedIterator) Next() bool { +func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2197,7 +2276,7 @@ func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerUptimeUpdated) + it.Event = new(NativeTokenStakingManagerDelegatorRemovalInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2212,7 +2291,7 @@ func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerUptimeUpdated) + it.Event = new(NativeTokenStakingManagerDelegatorRemovalInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2228,52 +2307,60 @@ func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Error() error { +func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Close() error { +func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerUptimeUpdated represents a UptimeUpdated event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerUptimeUpdated struct { +// NativeTokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerDelegatorRemovalInitialized struct { + DelegationID [32]byte ValidationID [32]byte - Uptime uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterUptimeUpdated is a free log retrieval operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. +// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. // -// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterUptimeUpdated(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerUptimeUpdatedIterator, error) { +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegatorRemovalInitializedIterator, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "UptimeUpdated", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerUptimeUpdatedIterator{contract: _NativeTokenStakingManager.contract, event: "UptimeUpdated", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerDelegatorRemovalInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil } -// WatchUptimeUpdated is a free log subscription operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. +// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. // -// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchUptimeUpdated(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerUptimeUpdated, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) +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 { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "UptimeUpdated", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -2283,8 +2370,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchUptime select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerUptimeUpdated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { + event := new(NativeTokenStakingManagerDelegatorRemovalInitialized) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { return err } event.Raw = log @@ -2305,21 +2392,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchUptime }), nil } -// ParseUptimeUpdated is a log parse operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. +// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. // -// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseUptimeUpdated(log types.Log) (*NativeTokenStakingManagerUptimeUpdated, error) { - event := new(NativeTokenStakingManagerUptimeUpdated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { +// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegatorRemovalInitialized(log types.Log) (*NativeTokenStakingManagerDelegatorRemovalInitialized, error) { + event := new(NativeTokenStakingManagerDelegatorRemovalInitialized) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerValidationPeriodCreatedIterator is returned from FilterValidationPeriodCreated and is used to iterate over the raw logs and unpacked data for ValidationPeriodCreated events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationPeriodCreatedIterator struct { - Event *NativeTokenStakingManagerValidationPeriodCreated // Event containing the contract specifics and raw log +// NativeTokenStakingManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitializedIterator struct { + Event *NativeTokenStakingManagerInitialized // 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 @@ -2333,7 +2420,7 @@ type NativeTokenStakingManagerValidationPeriodCreatedIterator struct { // 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 *NativeTokenStakingManagerValidationPeriodCreatedIterator) Next() bool { +func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2342,7 +2429,7 @@ func (it *NativeTokenStakingManagerValidationPeriodCreatedIterator) Next() bool if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationPeriodCreated) + it.Event = new(NativeTokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2357,7 +2444,7 @@ func (it *NativeTokenStakingManagerValidationPeriodCreatedIterator) Next() bool // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationPeriodCreated) + it.Event = new(NativeTokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2373,71 +2460,189 @@ func (it *NativeTokenStakingManagerValidationPeriodCreatedIterator) Next() bool } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerValidationPeriodCreatedIterator) Error() error { +func (it *NativeTokenStakingManagerInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerValidationPeriodCreatedIterator) Close() error { +func (it *NativeTokenStakingManagerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// NativeTokenStakingManagerInitialized represents a Initialized event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*NativeTokenStakingManagerInitializedIterator, error) { + + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &NativeTokenStakingManagerInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitialized) (event.Subscription, error) { + + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "Initialized") + 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(NativeTokenStakingManagerInitialized) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "Initialized", 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 +} + +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitialized(log types.Log) (*NativeTokenStakingManagerInitialized, error) { + event := new(NativeTokenStakingManagerInitialized) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// NativeTokenStakingManagerInitiatedValidatorRegistrationIterator is returned from FilterInitiatedValidatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRegistration events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedValidatorRegistrationIterator struct { + Event *NativeTokenStakingManagerInitiatedValidatorRegistration // 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 *NativeTokenStakingManagerInitiatedValidatorRegistrationIterator) 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(NativeTokenStakingManagerInitiatedValidatorRegistration) + 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(NativeTokenStakingManagerInitiatedValidatorRegistration) + 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 *NativeTokenStakingManagerInitiatedValidatorRegistrationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *NativeTokenStakingManagerInitiatedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerValidationPeriodCreated represents a ValidationPeriodCreated event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationPeriodCreated struct { - ValidationID [32]byte - NodeID common.Hash - RegisterValidationMessageID [32]byte - Weight uint64 - RegistrationExpiry uint64 - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerInitiatedValidatorRegistration represents a InitiatedValidatorRegistration event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedValidatorRegistration struct { + ValidationID [32]byte + NodeID []byte + RegistrationMessageID [32]byte + RegistrationExpiry uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodCreated is a free log retrieval operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. +// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterValidationPeriodCreated(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][]byte, registerValidationMessageID [][32]byte) (*NativeTokenStakingManagerValidationPeriodCreatedIterator, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerInitiatedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "ValidationPeriodCreated", validationIDRule, nodeIDRule, registerValidationMessageIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerValidationPeriodCreatedIterator{contract: _NativeTokenStakingManager.contract, event: "ValidationPeriodCreated", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerInitiatedValidatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "InitiatedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchValidationPeriodCreated is a free log subscription operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. +// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValidationPeriodCreated(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerValidationPeriodCreated, validationID [][32]byte, nodeID [][]byte, registerValidationMessageID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitiatedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "ValidationPeriodCreated", validationIDRule, nodeIDRule, registerValidationMessageIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule) if err != nil { return nil, err } @@ -2447,8 +2652,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerValidationPeriodCreated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { + event := new(NativeTokenStakingManagerInitiatedValidatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -2469,21 +2674,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida }), nil } -// ParseValidationPeriodCreated is a log parse operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. +// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValidationPeriodCreated(log types.Log) (*NativeTokenStakingManagerValidationPeriodCreated, error) { - event := new(NativeTokenStakingManagerValidationPeriodCreated) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitiatedValidatorRegistration(log types.Log) (*NativeTokenStakingManagerInitiatedValidatorRegistration, error) { + event := new(NativeTokenStakingManagerInitiatedValidatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerValidationPeriodEndedIterator is returned from FilterValidationPeriodEnded and is used to iterate over the raw logs and unpacked data for ValidationPeriodEnded events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationPeriodEndedIterator struct { - Event *NativeTokenStakingManagerValidationPeriodEnded // Event containing the contract specifics and raw log +// NativeTokenStakingManagerInitiatedValidatorRemovalIterator is returned from FilterInitiatedValidatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRemoval events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedValidatorRemovalIterator struct { + Event *NativeTokenStakingManagerInitiatedValidatorRemoval // 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 @@ -2497,7 +2702,7 @@ type NativeTokenStakingManagerValidationPeriodEndedIterator struct { // 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 *NativeTokenStakingManagerValidationPeriodEndedIterator) Next() bool { +func (it *NativeTokenStakingManagerInitiatedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2506,7 +2711,7 @@ func (it *NativeTokenStakingManagerValidationPeriodEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationPeriodEnded) + it.Event = new(NativeTokenStakingManagerInitiatedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2521,7 +2726,7 @@ func (it *NativeTokenStakingManagerValidationPeriodEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationPeriodEnded) + it.Event = new(NativeTokenStakingManagerInitiatedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2537,60 +2742,54 @@ func (it *NativeTokenStakingManagerValidationPeriodEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerValidationPeriodEndedIterator) Error() error { +func (it *NativeTokenStakingManagerInitiatedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerValidationPeriodEndedIterator) Close() error { +func (it *NativeTokenStakingManagerInitiatedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerValidationPeriodEnded represents a ValidationPeriodEnded event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationPeriodEnded struct { - ValidationID [32]byte - Status uint8 - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerInitiatedValidatorRemoval represents a InitiatedValidatorRemoval event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedValidatorRemoval struct { + ValidationID [32]byte + ValidatorWeightMessageID [32]byte + Weight uint64 + EndTime uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodEnded is a free log retrieval operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// FilterInitiatedValidatorRemoval is a free log retrieval operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterValidationPeriodEnded(opts *bind.FilterOpts, validationID [][32]byte, status []uint8) (*NativeTokenStakingManagerValidationPeriodEndedIterator, error) { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitiatedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerInitiatedValidatorRemovalIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerValidationPeriodEndedIterator{contract: _NativeTokenStakingManager.contract, event: "ValidationPeriodEnded", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerInitiatedValidatorRemovalIterator{contract: _NativeTokenStakingManager.contract, event: "InitiatedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchValidationPeriodEnded is a free log subscription operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// WatchInitiatedValidatorRemoval is a free log subscription operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValidationPeriodEnded(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerValidationPeriodEnded, validationID [][32]byte, status []uint8) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitiatedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitiatedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -2600,8 +2799,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerValidationPeriodEnded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { + event := new(NativeTokenStakingManagerInitiatedValidatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -2622,21 +2821,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida }), nil } -// ParseValidationPeriodEnded is a log parse operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// ParseInitiatedValidatorRemoval is a log parse operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValidationPeriodEnded(log types.Log) (*NativeTokenStakingManagerValidationPeriodEnded, error) { - event := new(NativeTokenStakingManagerValidationPeriodEnded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitiatedValidatorRemoval(log types.Log) (*NativeTokenStakingManagerInitiatedValidatorRemoval, error) { + event := new(NativeTokenStakingManagerInitiatedValidatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerValidationPeriodRegisteredIterator is returned from FilterValidationPeriodRegistered and is used to iterate over the raw logs and unpacked data for ValidationPeriodRegistered events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationPeriodRegisteredIterator struct { - Event *NativeTokenStakingManagerValidationPeriodRegistered // Event containing the contract specifics and raw log +// NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator is returned from FilterInitiatedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for InitiatedValidatorWeightUpdate events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator struct { + Event *NativeTokenStakingManagerInitiatedValidatorWeightUpdate // 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 @@ -2650,7 +2849,7 @@ type NativeTokenStakingManagerValidationPeriodRegisteredIterator struct { // 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 *NativeTokenStakingManagerValidationPeriodRegisteredIterator) Next() bool { +func (it *NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2659,7 +2858,7 @@ func (it *NativeTokenStakingManagerValidationPeriodRegisteredIterator) Next() bo if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationPeriodRegistered) + it.Event = new(NativeTokenStakingManagerInitiatedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2674,7 +2873,7 @@ func (it *NativeTokenStakingManagerValidationPeriodRegisteredIterator) Next() bo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidationPeriodRegistered) + it.Event = new(NativeTokenStakingManagerInitiatedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2690,53 +2889,54 @@ func (it *NativeTokenStakingManagerValidationPeriodRegisteredIterator) Next() bo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerValidationPeriodRegisteredIterator) Error() error { +func (it *NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerValidationPeriodRegisteredIterator) Close() error { +func (it *NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerValidationPeriodRegistered represents a ValidationPeriodRegistered event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidationPeriodRegistered struct { - ValidationID [32]byte - Weight uint64 - Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerInitiatedValidatorWeightUpdate represents a InitiatedValidatorWeightUpdate event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + WeightUpdateMessageID [32]byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodRegistered is a free log retrieval operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// FilterInitiatedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterValidationPeriodRegistered(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerValidationPeriodRegisteredIterator, error) { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitiatedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "ValidationPeriodRegistered", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerValidationPeriodRegisteredIterator{contract: _NativeTokenStakingManager.contract, event: "ValidationPeriodRegistered", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerInitiatedValidatorWeightUpdateIterator{contract: _NativeTokenStakingManager.contract, event: "InitiatedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchValidationPeriodRegistered is a free log subscription operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// WatchInitiatedValidatorWeightUpdate is a free log subscription operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValidationPeriodRegistered(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerValidationPeriodRegistered, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitiatedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitiatedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "ValidationPeriodRegistered", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -2746,8 +2946,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerValidationPeriodRegistered) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { + event := new(NativeTokenStakingManagerInitiatedValidatorWeightUpdate) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -2768,21 +2968,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida }), nil } -// ParseValidationPeriodRegistered is a log parse operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// ParseInitiatedValidatorWeightUpdate is a log parse operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValidationPeriodRegistered(log types.Log) (*NativeTokenStakingManagerValidationPeriodRegistered, error) { - event := new(NativeTokenStakingManagerValidationPeriodRegistered) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitiatedValidatorWeightUpdate(log types.Log) (*NativeTokenStakingManagerInitiatedValidatorWeightUpdate, error) { + event := new(NativeTokenStakingManagerInitiatedValidatorWeightUpdate) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidatorRemovalInitializedIterator struct { - Event *NativeTokenStakingManagerValidatorRemovalInitialized // Event containing the contract specifics and raw log +// NativeTokenStakingManagerRegisteredInitialValidatorIterator is returned from FilterRegisteredInitialValidator and is used to iterate over the raw logs and unpacked data for RegisteredInitialValidator events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerRegisteredInitialValidatorIterator struct { + Event *NativeTokenStakingManagerRegisteredInitialValidator // 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 @@ -2796,7 +2996,7 @@ type NativeTokenStakingManagerValidatorRemovalInitializedIterator struct { // 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 *NativeTokenStakingManagerValidatorRemovalInitializedIterator) Next() bool { +func (it *NativeTokenStakingManagerRegisteredInitialValidatorIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2805,7 +3005,7 @@ func (it *NativeTokenStakingManagerValidatorRemovalInitializedIterator) Next() b if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidatorRemovalInitialized) + it.Event = new(NativeTokenStakingManagerRegisteredInitialValidator) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2820,7 +3020,7 @@ func (it *NativeTokenStakingManagerValidatorRemovalInitializedIterator) Next() b // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidatorRemovalInitialized) + it.Event = new(NativeTokenStakingManagerRegisteredInitialValidator) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2836,62 +3036,53 @@ func (it *NativeTokenStakingManagerValidatorRemovalInitializedIterator) Next() b } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerValidatorRemovalInitializedIterator) Error() error { +func (it *NativeTokenStakingManagerRegisteredInitialValidatorIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerValidatorRemovalInitializedIterator) Close() error { +func (it *NativeTokenStakingManagerRegisteredInitialValidatorIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerValidatorRemovalInitialized represents a ValidatorRemovalInitialized event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerValidatorRemovalInitialized struct { - ValidationID [32]byte - SetWeightMessageID [32]byte - Weight uint64 - EndTime *big.Int - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerRegisteredInitialValidator represents a RegisteredInitialValidator event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerRegisteredInitialValidator struct { + ValidationID [32]byte + NodeID []byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidatorRemovalInitialized is a free log retrieval operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterValidatorRemovalInitialized(opts *bind.FilterOpts, validationID [][32]byte, setWeightMessageID [][32]byte) (*NativeTokenStakingManagerValidatorRemovalInitializedIterator, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerRegisteredInitialValidatorIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerValidatorRemovalInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "ValidatorRemovalInitialized", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerRegisteredInitialValidatorIterator{contract: _NativeTokenStakingManager.contract, event: "RegisteredInitialValidator", logs: logs, sub: sub}, nil } -// WatchValidatorRemovalInitialized is a free log subscription operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValidatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerValidatorRemovalInitialized, validationID [][32]byte, setWeightMessageID [][32]byte) (event.Subscription, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerRegisteredInitialValidator, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule) if err != nil { return nil, err } @@ -2901,8 +3092,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerValidatorRemovalInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { + event := new(NativeTokenStakingManagerRegisteredInitialValidator) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { return err } event.Raw = log @@ -2923,21 +3114,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida }), nil } -// ParseValidatorRemovalInitialized is a log parse operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValidatorRemovalInitialized(log types.Log) (*NativeTokenStakingManagerValidatorRemovalInitialized, error) { - event := new(NativeTokenStakingManagerValidatorRemovalInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseRegisteredInitialValidator(log types.Log) (*NativeTokenStakingManagerRegisteredInitialValidator, error) { + event := new(NativeTokenStakingManagerRegisteredInitialValidator) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { return nil, err } 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 +// NativeTokenStakingManagerUptimeUpdatedIterator is returned from FilterUptimeUpdated and is used to iterate over the raw logs and unpacked data for UptimeUpdated events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerUptimeUpdatedIterator struct { + Event *NativeTokenStakingManagerUptimeUpdated // 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 @@ -2951,7 +3142,7 @@ type NativeTokenStakingManagerValidatorWeightUpdateIterator struct { // 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 { +func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2960,7 +3151,7 @@ func (it *NativeTokenStakingManagerValidatorWeightUpdateIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidatorWeightUpdate) + it.Event = new(NativeTokenStakingManagerUptimeUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2975,7 +3166,7 @@ func (it *NativeTokenStakingManagerValidatorWeightUpdateIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerValidatorWeightUpdate) + it.Event = new(NativeTokenStakingManagerUptimeUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2991,62 +3182,52 @@ func (it *NativeTokenStakingManagerValidatorWeightUpdateIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerValidatorWeightUpdateIterator) Error() error { +func (it *NativeTokenStakingManagerUptimeUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerValidatorWeightUpdateIterator) Close() error { +func (it *NativeTokenStakingManagerUptimeUpdatedIterator) 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 - Weight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerUptimeUpdated represents a UptimeUpdated event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerUptimeUpdated struct { + ValidationID [32]byte + Uptime uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// FilterUptimeUpdated is a free log retrieval operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte, nonce []uint64) (*NativeTokenStakingManagerValidatorWeightUpdateIterator, error) { +// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterUptimeUpdated(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerUptimeUpdatedIterator, 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) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "UptimeUpdated", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerValidatorWeightUpdateIterator{contract: _NativeTokenStakingManager.contract, event: "ValidatorWeightUpdate", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerUptimeUpdatedIterator{contract: _NativeTokenStakingManager.contract, event: "UptimeUpdated", logs: logs, sub: sub}, nil } -// WatchValidatorWeightUpdate is a free log subscription operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// WatchUptimeUpdated is a free log subscription operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerValidatorWeightUpdate, validationID [][32]byte, nonce []uint64) (event.Subscription, error) { +// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchUptimeUpdated(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerUptimeUpdated, validationID [][32]byte) (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) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "UptimeUpdated", validationIDRule) if err != nil { return nil, err } @@ -3056,8 +3237,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida 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 { + event := new(NativeTokenStakingManagerUptimeUpdated) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { return err } event.Raw = log @@ -3078,12 +3259,12 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValida }), nil } -// ParseValidatorWeightUpdate is a log parse operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// ParseUptimeUpdated is a log parse operation binding the contract event 0xec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValidatorWeightUpdate(log types.Log) (*NativeTokenStakingManagerValidatorWeightUpdate, error) { - event := new(NativeTokenStakingManagerValidatorWeightUpdate) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { +// Solidity: event UptimeUpdated(bytes32 indexed validationID, uint64 uptime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseUptimeUpdated(log types.Log) (*NativeTokenStakingManagerUptimeUpdated, error) { + event := new(NativeTokenStakingManagerUptimeUpdated) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "UptimeUpdated", log); err != nil { return nil, err } event.Raw = log @@ -3093,7 +3274,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValida // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212209b053b8f4b1240668e63fcf61c1058f38e82bf86a5ffafe8ef50c8ba2c10a75564736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212208f97dd615e4586f85eec84c3dcf6f765032d5b15f7beb22c22fa9f8b3c7f72de64736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index e8e382790..e13dd5f25 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -55,10 +55,11 @@ type Validator struct { Status uint8 NodeID []byte StartingWeight uint64 - MessageNonce uint64 + SentNonce uint64 + ReceivedNonce uint64 Weight uint64 - StartedAt uint64 - EndedAt uint64 + StartTime uint64 + EndTime uint64 } // ValidatorManagerSettings is an auto generated low-level Go binding around an user-defined struct. @@ -90,8 +91,8 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"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\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b506040516137d63803806137d683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6136898061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610127575f3560e01c8063a3a65e48116100a9578063d588c18f1161006e578063d588c18f14610279578063d5f20ff61461028c578063df93d8de146102ac578063f2fde38b146102ce578063fd7ac5e7146102e1575f80fd5b8063a3a65e4814610229578063b771b3bc1461023c578063bc5fbfec1461024a578063bee0a03f1461025e578063c974d1b614610271575f80fd5b8063732214f8116100ef578063732214f8146101905780638280a25a146101a55780638da5cb5b146101bf57806397fb70d4146102035780639ba96b8614610216575f80fd5b80630322ed981461012b57806320d91b7a14610140578063467ef06f1461015357806360305d6214610166578063715018a614610188575b5f80fd5b61013e6101393660046127d8565b6102f4565b005b61013e61014e366004612807565b610584565b61013e610161366004612855565b610b3f565b61016e601481565b60405163ffffffff90911681526020015b60405180910390f35b61013e610b4d565b6101975f81565b60405190815260200161017f565b6101ad603081565b60405160ff909116815260200161017f565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161017f565b61013e6102113660046127d8565b610b60565b610197610224366004612884565b610b75565b61013e610237366004612855565b610b91565b6101eb6005600160991b0181565b6101975f8051602061361483398151915281565b61013e61026c3660046127d8565b610d87565b6101ad601481565b61013e6102873660046128dd565b610ec3565b61029f61029a3660046127d8565b610fd1565b60405161017f919061299a565b6102b66202a30081565b6040516001600160401b03909116815260200161017f565b61013e6102dc366004612a1a565b611120565b6101976102ef366004612a3c565b61115d565b5f8181525f805160206136348339815191526020526040808220815160e0810190925280545f8051602061361483398151915293929190829060ff16600581111561034157610341612919565b600581111561035257610352612919565b815260200160018201805461036690612aa7565b80601f016020809104026020016040519081016040528092919081815260200182805461039290612aa7565b80156103dd5780601f106103b4576101008083540402835291602001916103dd565b820191905f5260205f20905b8154815290600101906020018083116103c057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561044857610448612919565b14610484575f8381526005830160205260409081902054905163170cc93360e21b815261047b9160ff1690600401612adf565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156104fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105229190810190612bf0565b6040518263ffffffff1660e01b815260040161053e9190612c21565b6020604051808303815f875af115801561055a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061057e9190612c33565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206136148339815191529060ff16156105d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610619573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063d9190612c33565b836020013514610666576040516372b0a7e760e11b81526020840135600482015260240161047b565b306106776060850160408601612a1a565b6001600160a01b0316146106ba576106956060840160408501612a1a565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161047b565b5f6106c86060850185612c4a565b905090505f805b828163ffffffff161015610930575f6106eb6060880188612c4a565b8363ffffffff1681811061070157610701612c8f565b90506020028101906107139190612ca3565b61071c90612d0e565b80516040519192505f91600688019161073491612d87565b9081526020016040518091039020541461076457805160405163a41f772f60e01b815261047b9190600401612c21565b5f6002885f01358460405160200161079392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526107ad91612d87565b602060405180830381855afa1580156107c8573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906107eb9190612c33565b90508086600601835f01516040516108039190612d87565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108439082612de3565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff191690556108c39085612eb6565b82516040519195506108d491612d87565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a350508061092990612ed6565b90506106cf565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610978910460ff1683612ef8565b6001600160401b031610156109ab57604051633e1a785160e01b81526001600160401b038216600482015260240161047b565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d8478846109cf876111b8565b604001516040518263ffffffff1660e01b81526004016109ef9190612c21565b602060405180830381865af4158015610a0a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2e9190612c33565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610a689190613046565b5f60405180830381865af4158015610a82573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610aa99190810190612bf0565b90505f600282604051610abc9190612d87565b602060405180830381855afa158015610ad7573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610afa9190612c33565b9050828114610b265760405163baaea89d60e01b8152600481018290526024810184905260440161047b565b5050506007909201805460ff1916600117905550505050565b610b48816112ce565b505050565b610b55611686565b610b5e5f6116e1565b565b610b68611686565b610b7181611751565b5050565b5f610b7e611686565b610b888383611a36565b90505b92915050565b5f805160206136148339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610bc4866111b8565b604001516040518263ffffffff1660e01b8152600401610be49190612c21565b6040805180830381865af4158015610bfe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2291906130e9565b9150915080610c4857604051632d07135360e01b8152811515600482015260240161047b565b5f82815260048401602052604090208054610c6290612aa7565b90505f03610c865760405163089938b360e11b81526004810183905260240161047b565b60015f838152600580860160205260409091205460ff1690811115610cad57610cad612919565b14610ce0575f8281526005840160205260409081902054905163170cc93360e21b815261047b9160ff1690600401612adf565b5f8281526004840160205260408120610cf89161274c565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206136148339815191529190610dce90612aa7565b90505f03610df25760405163089938b360e11b81526004810183905260240161047b565b60015f838152600580840160205260409091205460ff1690811115610e1957610e19612919565b14610e4c575f8281526005820160205260409081902054905163170cc93360e21b815261047b9160ff1690600401612adf565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610e83920161310a565b6020604051808303815f875af1158015610e9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b489190612c33565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610f075750825b90505f826001600160401b03166001148015610f225750303b155b905081158015610f30575080155b15610f4e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f7857845460ff60401b1916600160401b1785555b610f828787611fa8565b8315610fc857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610fd9612783565b5f8281525f80516020613634833981519152602052604090819020815160e0810190925280545f80516020613614833981519152929190829060ff16600581111561102657611026612919565b600581111561103757611037612919565b815260200160018201805461104b90612aa7565b80601f016020809104026020016040519081016040528092919081815260200182805461107790612aa7565b80156110c25780601f10611099576101008083540402835291602001916110c2565b820191905f5260205f20905b8154815290600101906020018083116110a557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b611128611686565b6001600160a01b03811661115157604051631e4fbdf760e01b81525f600482015260240161047b565b61115a816116e1565b50565b6040515f905f80516020613614833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906111a09086908690613194565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561121c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261124391908101906131a3565b915091508061126557604051636b2f19e960e01b815260040160405180910390fd5b81511561128b578151604051636ba589a560e01b8152600481019190915260240161047b565b60208201516001600160a01b0316156112c7576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161047b565b5092915050565b5f6112d7612783565b5f805160206136148339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61130a886111b8565b604001516040518263ffffffff1660e01b815260040161132a9190612c21565b6040805180830381865af4158015611344573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136891906130e9565b91509150801561138f57604051632d07135360e01b8152811515600482015260240161047b565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff909116908111156113c6576113c6612919565b60058111156113d7576113d7612919565b81526020016001820180546113eb90612aa7565b80601f016020809104026020016040519081016040528092919081815260200182805461141790612aa7565b80156114625780601f1061143957610100808354040283529160200191611462565b820191905f5260205f20905b81548152906001019060200180831161144557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156114cd576114cd612919565b141580156114ee57506001815160058111156114eb576114eb612919565b14155b1561150f57805160405163170cc93360e21b815261047b9190600401612adf565b60038151600581111561152457611524612919565b036115325760048152611537565b600581525b83600601816020015160405161154d9190612d87565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561159057611590612919565b0217905550602082015160018201906115a99082612de3565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790558051600581111561164f5761164f612919565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b336116b87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610b5e5760405163118cdaa760e01b815233600482015260240161047b565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611759612783565b5f8281525f805160206136348339815191526020526040808220815160e0810190925280545f8051602061361483398151915293929190829060ff1660058111156117a6576117a6612919565b60058111156117b7576117b7612919565b81526020016001820180546117cb90612aa7565b80601f01602080910402602001604051908101604052809291908181526020018280546117f790612aa7565b80156118425780601f1061181957610100808354040283529160200191611842565b820191905f5260205f20905b81548152906001019060200180831161182557829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156118b0576118b0612919565b146118e3575f8481526005830160205260409081902054905163170cc93360e21b815261047b9160ff1690600401612adf565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff191690600190849081111561192857611928612919565b0217905550602082015160018201906119419082612de3565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6119df8582611fc2565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611a7a57604051637fab81e560e01b815260040160405180910390fd5b5f8051602061361483398151915242611a996060860160408701613230565b6001600160401b0316111580611ad35750611ab76202a30042613249565b611ac76060860160408701613230565b6001600160401b031610155b15611b0d57611ae86060850160408601613230565b604051635879da1360e11b81526001600160401b03909116600482015260240161047b565b60038101546001600160401b0390611b3090600160401b90048216858316613249565b1115611b5a57604051633e1a785160e01b81526001600160401b038416600482015260240161047b565b611b6f611b6a606086018661325c565b612199565b611b7f611b6a608086018661325c565b6030611b8e6020860186613270565b905014611bc057611ba26020850185613270565b6040516326475b2f60e11b815261047b925060040190815260200190565b611bca8480613270565b90505f03611bf757611bdc8480613270565b604051633e08a12560e11b815260040161047b9291906132b2565b5f60068201611c068680613270565b604051611c14929190613194565b90815260200160405180910390205414611c4d57611c328480613270565b60405163a41f772f60e01b815260040161047b9291906132b2565b611c57835f612302565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101611c948a80613270565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190611cdc908b018b613270565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001611d2560608b0160408c01613230565b6001600160401b03168152602001611d4060608b018b61325c565b611d49906132c5565b8152602001611d5b60808b018b61325c565b611d64906132c5565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611d9291906133f2565b5f60405180830381865af4158015611dac573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611dd391908101906134a9565b5f82815260048601602052604090209193509150611df18282612de3565b508160068401611e018880613270565b604051611e0f929190613194565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611e4b908590600401612c21565b6020604051808303815f875af1158015611e67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e8b9190612c33565b5f8481526005860160205260409020805460ff191660011790559050611eb18780613270565b5f858152600587016020526040902060010191611ecf9190836134ec565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580611f2e8880613270565b604051611f3c929190613194565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b6040016020810190611f7a9190613230565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b611fb061256c565b611fb9826125b5565b610b71816125ce565b5f8281525f80516020613634833981519152602052604081206002015481905f8051602061361483398151915290600160801b90046001600160401b031661200a8582612302565b5f612014876125df565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156120bd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120e49190810190612bf0565b6040518263ffffffff1660e01b81526004016121009190612c21565b6020604051808303815f875af115801561211c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121409190612c33565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b6121a66020820182612855565b63ffffffff161580156121c657506121c16020820182612c4a565b151590505b1561220d576121d86020820182612855565b6121e56020830183612c4a565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161047b565b61221a6020820182612c4a565b90506122296020830183612855565b63ffffffff161115612242576121d86020820182612855565b60015b6122526020830183612c4a565b9050811015610b71576122686020830183612c4a565b6122736001846135a5565b81811061228257612282612c8f565b90506020020160208101906122979190612a1a565b6001600160a01b03166122ad6020840184612c4a565b838181106122bd576122bd612c8f565b90506020020160208101906122d29190612a1a565b6001600160a01b031610156122fa57604051630dbc8d5f60e31b815260040160405180910390fd5b600101612245565b5f805160206136148339815191525f6001600160401b0380841690851611156123365761232f83856135b8565b9050612343565b61234084846135b8565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806123b05750600184015481516123ac916001600160401b031690613249565b8210155b156123d8576001600160401b03808416606083015282825260408201511660208201526123f7565b82816060018181516123ea9190612eb6565b6001600160401b03169052505b6060810151612407906064612ef8565b602082015160018601546001600160401b0392909216916124329190600160401b900460ff16612ef8565b6001600160401b0316101561246b57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161047b565b858160400181815161247d9190612eb6565b6001600160401b031690525060408101805186919061249d9083906135b8565b6001600160401b0316905250600184015460408201516064916124cb91600160401b90910460ff1690612ef8565b6001600160401b03161015612504576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161047b565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b5e57604051631afcd79f60e31b815260040160405180910390fd5b6125bd61256c565b6125c5612654565b61115a8161265c565b6125d661256c565b61115a81612744565b5f8181525f805160206136348339815191526020526040812060020180545f80516020613614833981519152919060089061262990600160401b90046001600160401b03166135d8565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610b5e61256c565b61266461256c565b80355f80516020613614833981519152908155601461268960608401604085016135f3565b60ff1611806126a857506126a360608301604084016135f3565b60ff16155b156126dc576126bd60608301604084016135f3565b604051634a59bbff60e11b815260ff909116600482015260240161047b565b6126ec60608301604084016135f3565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561271d6040830160208401613230565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b61112861256c565b50805461275890612aa7565b5f825580601f10612767575050565b601f0160209004905f5260205f209081019061115a91906127c0565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b808211156127d4575f81556001016127c1565b5090565b5f602082840312156127e8575f80fd5b5035919050565b803563ffffffff81168114612802575f80fd5b919050565b5f8060408385031215612818575f80fd5b82356001600160401b0381111561282d575f80fd5b83016080818603121561283e575f80fd5b915061284c602084016127ef565b90509250929050565b5f60208284031215612865575f80fd5b610b88826127ef565b80356001600160401b0381168114612802575f80fd5b5f8060408385031215612895575f80fd5b82356001600160401b038111156128aa575f80fd5b830160a081860312156128bb575f80fd5b915061284c6020840161286e565b6001600160a01b038116811461115a575f80fd5b5f8082840360808112156128ef575f80fd5b60608112156128fc575f80fd5b50829150606083013561290e816128c9565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6006811061294957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b8381101561296757818101518382015260200161294f565b50505f910152565b5f815180845261298681602086016020860161294d565b601f01601f19169290920160200192915050565b602081526129ac60208201835161292d565b5f602083015160e060408401526129c761010084018261296f565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f60208284031215612a2a575f80fd5b8135612a35816128c9565b9392505050565b5f8060208385031215612a4d575f80fd5b82356001600160401b0380821115612a63575f80fd5b818501915085601f830112612a76575f80fd5b813581811115612a84575f80fd5b866020828501011115612a95575f80fd5b60209290920196919550909350505050565b600181811c90821680612abb57607f821691505b602082108103612ad957634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610b8b828461292d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612b2357612b23612aed565b60405290565b604080519081016001600160401b0381118282101715612b2357612b23612aed565b604051601f8201601f191681016001600160401b0381118282101715612b7357612b73612aed565b604052919050565b5f6001600160401b03821115612b9357612b93612aed565b50601f01601f191660200190565b5f82601f830112612bb0575f80fd5b8151612bc3612bbe82612b7b565b612b4b565b818152846020838601011115612bd7575f80fd5b612be882602083016020870161294d565b949350505050565b5f60208284031215612c00575f80fd5b81516001600160401b03811115612c15575f80fd5b612be884828501612ba1565b602081525f610b88602083018461296f565b5f60208284031215612c43575f80fd5b5051919050565b5f808335601e19843603018112612c5f575f80fd5b8301803591506001600160401b03821115612c78575f80fd5b6020019150600581901b3603821315612192575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612cb7575f80fd5b9190910192915050565b5f82601f830112612cd0575f80fd5b8135612cde612bbe82612b7b565b818152846020838601011115612cf2575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612d1e575f80fd5b612d26612b01565b82356001600160401b0380821115612d3c575f80fd5b612d4836838701612cc1565b83526020850135915080821115612d5d575f80fd5b50612d6a36828601612cc1565b602083015250612d7c6040840161286e565b604082015292915050565b5f8251612cb781846020870161294d565b601f821115610b4857805f5260205f20601f840160051c81016020851015612dbd5750805b601f840160051c820191505b81811015612ddc575f8155600101612dc9565b5050505050565b81516001600160401b03811115612dfc57612dfc612aed565b612e1081612e0a8454612aa7565b84612d98565b602080601f831160018114612e43575f8415612e2c5750858301515b5f19600386901b1c1916600185901b178555612e9a565b5f85815260208120601f198616915b82811015612e7157888601518255948401946001909101908401612e52565b5085821015612e8e57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156112c7576112c7612ea2565b5f63ffffffff808316818103612eee57612eee612ea2565b6001019392505050565b6001600160401b03818116838216028082169190828114612f1b57612f1b612ea2565b505092915050565b5f808335601e19843603018112612f38575f80fd5b83016020810192503590506001600160401b03811115612f56575f80fd5b803603821315612192575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561303957848303601f19018952813536889003605e19018112612fc8575f80fd5b87016060612fd68280612f23565b828752612fe68388018284612f64565b92505050612ff686830183612f23565b86830388880152613008838284612f64565b9250505060406001600160401b0361302182850161286e565b16950194909452509783019790830190600101612fa3565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561306a816128c9565b6001600160a01b031660608381019190915283013536849003601e19018112613091575f80fd5b83016020810190356001600160401b038111156130ac575f80fd5b8060051b36038213156130bd575f80fd5b6080808501526130d160a085018284612f8c565b95945050505050565b80518015158114612802575f80fd5b5f80604083850312156130fa575f80fd5b8251915061284c602084016130da565b5f60208083525f845461311c81612aa7565b806020870152604060018084165f811461313d576001811461315957613186565b60ff19851660408a0152604084151560051b8a01019550613186565b895f5260205f205f5b8581101561317d5781548b8201860152908301908801613162565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b5f80604083850312156131b4575f80fd5b82516001600160401b03808211156131ca575f80fd5b90840190606082870312156131dd575f80fd5b6131e5612b01565b8251815260208301516131f7816128c9565b602082015260408301518281111561320d575f80fd5b61321988828601612ba1565b604083015250935061284c915050602084016130da565b5f60208284031215613240575f80fd5b610b888261286e565b80820180821115610b8b57610b8b612ea2565b5f8235603e19833603018112612cb7575f80fd5b5f808335601e19843603018112613285575f80fd5b8301803591506001600160401b0382111561329e575f80fd5b602001915036819003821315612192575f80fd5b602081525f612be8602083018486612f64565b5f604082360312156132d5575f80fd5b6132dd612b29565b6132e6836127ef565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612aed565b8060051b9150613337848301612b4b565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836128c9565b8282529385019390850190613355565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156133e75784516001600160a01b031682529383019360019290920191908301906133be565b509695505050505050565b60208152815160208201525f602083015160e0604084015261341861010084018261296f565b90506040840151601f1980858403016060860152613436838361296f565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152613466838361338c565b925060a08601519150808584030160c086015250613484828261338c565b91505060c08401516134a160e08501826001600160401b03169052565b509392505050565b5f80604083850312156134ba575f80fd5b8251915060208301516001600160401b038111156134d6575f80fd5b6134e285828601612ba1565b9150509250929050565b6001600160401b0383111561350357613503612aed565b613517836135118354612aa7565b83612d98565b5f601f841160018114613548575f85156135315750838201355b5f19600387901b1c1916600186901b178355612ddc565b5f83815260208120601f198716915b828110156135775786850135825560209485019460019092019101613557565b5086821015613593575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610b8b57610b8b612ea2565b6001600160401b038281168282160390808211156112c7576112c7612ea2565b5f6001600160401b03808316818103612eee57612eee612ea2565b5f60208284031215613603575f80fd5b813560ff81168114612a35575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a2646970667358221220ebc25064c3cd73a57273c4ba714e3c512faf23351ee58c0e2dc9fb2f791944eb64736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a26469706673582212200344ea5162788621c90091a422dac98859ef101120074f4171ebe105b7399bd464736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. @@ -483,7 +484,7 @@ func (_PoAValidatorManager *PoAValidatorManagerCallerSession) WARPMESSENGER() (c // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_PoAValidatorManager *PoAValidatorManagerCaller) GetValidator(opts *bind.CallOpts, validationID [32]byte) (Validator, error) { var out []interface{} err := _PoAValidatorManager.contract.Call(opts, &out, "getValidator", validationID) @@ -500,18 +501,49 @@ func (_PoAValidatorManager *PoAValidatorManagerCaller) GetValidator(opts *bind.C // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_PoAValidatorManager *PoAValidatorManagerSession) GetValidator(validationID [32]byte) (Validator, error) { return _PoAValidatorManager.Contract.GetValidator(&_PoAValidatorManager.CallOpts, validationID) } // GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. // -// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64)) +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64)) func (_PoAValidatorManager *PoAValidatorManagerCallerSession) GetValidator(validationID [32]byte) (Validator, error) { return _PoAValidatorManager.Contract.GetValidator(&_PoAValidatorManager.CallOpts, validationID) } +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_PoAValidatorManager *PoAValidatorManagerCaller) L1TotalWeight(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _PoAValidatorManager.contract.Call(opts, &out, "l1TotalWeight") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_PoAValidatorManager *PoAValidatorManagerSession) L1TotalWeight() (uint64, error) { + return _PoAValidatorManager.Contract.L1TotalWeight(&_PoAValidatorManager.CallOpts) +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64) +func (_PoAValidatorManager *PoAValidatorManagerCallerSession) L1TotalWeight() (uint64, error) { + return _PoAValidatorManager.Contract.L1TotalWeight(&_PoAValidatorManager.CallOpts) +} + // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // // Solidity: function owner() view returns(address) @@ -574,48 +606,100 @@ func (_PoAValidatorManager *PoAValidatorManagerCallerSession) RegisteredValidato return _PoAValidatorManager.Contract.RegisteredValidators(&_PoAValidatorManager.CallOpts, nodeID) } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. // -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_PoAValidatorManager *PoAValidatorManagerTransactor) CompleteEndValidation(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _PoAValidatorManager.contract.Transact(opts, "completeEndValidation", messageIndex) +// Solidity: function subnetID() view returns(bytes32) +func (_PoAValidatorManager *PoAValidatorManagerCaller) SubnetID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _PoAValidatorManager.contract.Call(opts, &out, "subnetID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. // -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_PoAValidatorManager *PoAValidatorManagerSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.CompleteEndValidation(&_PoAValidatorManager.TransactOpts, messageIndex) +// Solidity: function subnetID() view returns(bytes32) +func (_PoAValidatorManager *PoAValidatorManagerSession) SubnetID() ([32]byte, error) { + return _PoAValidatorManager.Contract.SubnetID(&_PoAValidatorManager.CallOpts) } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. // -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.CompleteEndValidation(&_PoAValidatorManager.TransactOpts, messageIndex) +// Solidity: function subnetID() view returns(bytes32) +func (_PoAValidatorManager *PoAValidatorManagerCallerSession) SubnetID() ([32]byte, error) { + return _PoAValidatorManager.Contract.SubnetID(&_PoAValidatorManager.CallOpts) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_PoAValidatorManager *PoAValidatorManagerTransactor) CompleteValidatorRegistration(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { return _PoAValidatorManager.contract.Transact(opts, "completeValidatorRegistration", messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_PoAValidatorManager *PoAValidatorManagerSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { return _PoAValidatorManager.Contract.CompleteValidatorRegistration(&_PoAValidatorManager.TransactOpts, messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. // -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32) func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { return _PoAValidatorManager.Contract.CompleteValidatorRegistration(&_PoAValidatorManager.TransactOpts, messageIndex) } +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_PoAValidatorManager *PoAValidatorManagerTransactor) CompleteValidatorRemoval(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.contract.Transact(opts, "completeValidatorRemoval", messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_PoAValidatorManager *PoAValidatorManagerSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.CompleteValidatorRemoval(&_PoAValidatorManager.TransactOpts, messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32) +func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.CompleteValidatorRemoval(&_PoAValidatorManager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_PoAValidatorManager *PoAValidatorManagerTransactor) CompleteValidatorWeightUpdate(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.contract.Transact(opts, "completeValidatorWeightUpdate", messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_PoAValidatorManager *PoAValidatorManagerSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.CompleteValidatorWeightUpdate(&_PoAValidatorManager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32, uint64) +func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.CompleteValidatorWeightUpdate(&_PoAValidatorManager.TransactOpts, messageIndex) +} + // Initialize is a paid mutator transaction binding the contract method 0xd588c18f. // // Solidity: function initialize((bytes32,uint64,uint8) settings, address initialOwner) returns() @@ -784,9 +868,9 @@ func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) TransferOwners return _PoAValidatorManager.Contract.TransferOwnership(&_PoAValidatorManager.TransactOpts, newOwner) } -// PoAValidatorManagerInitialValidatorCreatedIterator is returned from FilterInitialValidatorCreated and is used to iterate over the raw logs and unpacked data for InitialValidatorCreated events raised by the PoAValidatorManager contract. -type PoAValidatorManagerInitialValidatorCreatedIterator struct { - Event *PoAValidatorManagerInitialValidatorCreated // Event containing the contract specifics and raw log +// PoAValidatorManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the PoAValidatorManager contract. +type PoAValidatorManagerCompletedValidatorRegistrationIterator struct { + Event *PoAValidatorManagerCompletedValidatorRegistration // 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 @@ -800,7 +884,7 @@ type PoAValidatorManagerInitialValidatorCreatedIterator struct { // 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 *PoAValidatorManagerInitialValidatorCreatedIterator) Next() bool { +func (it *PoAValidatorManagerCompletedValidatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -809,7 +893,7 @@ func (it *PoAValidatorManagerInitialValidatorCreatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerInitialValidatorCreated) + it.Event = new(PoAValidatorManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -824,7 +908,7 @@ func (it *PoAValidatorManagerInitialValidatorCreatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerInitialValidatorCreated) + it.Event = new(PoAValidatorManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -840,61 +924,53 @@ func (it *PoAValidatorManagerInitialValidatorCreatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerInitialValidatorCreatedIterator) Error() error { +func (it *PoAValidatorManagerCompletedValidatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerInitialValidatorCreatedIterator) Close() error { +func (it *PoAValidatorManagerCompletedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerInitialValidatorCreated represents a InitialValidatorCreated event raised by the PoAValidatorManager contract. -type PoAValidatorManagerInitialValidatorCreated struct { +// PoAValidatorManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the PoAValidatorManager contract. +type PoAValidatorManagerCompletedValidatorRegistration struct { ValidationID [32]byte - NodeID common.Hash + NodeID []byte Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterInitialValidatorCreated is a free log retrieval operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitialValidatorCreated(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][]byte) (*PoAValidatorManagerInitialValidatorCreatedIterator, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerCompletedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "InitialValidatorCreated", validationIDRule, nodeIDRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerInitialValidatorCreatedIterator{contract: _PoAValidatorManager.contract, event: "InitialValidatorCreated", logs: logs, sub: sub}, nil + return &PoAValidatorManagerCompletedValidatorRegistrationIterator{contract: _PoAValidatorManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchInitialValidatorCreated is a free log subscription operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialValidatorCreated(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitialValidatorCreated, validationID [][32]byte, nodeID [][]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "InitialValidatorCreated", validationIDRule, nodeIDRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } @@ -904,8 +980,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialValidatorCr select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerInitialValidatorCreated) - if err := _PoAValidatorManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { + event := new(PoAValidatorManagerCompletedValidatorRegistration) + if err := _PoAValidatorManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -926,21 +1002,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialValidatorCr }), nil } -// ParseInitialValidatorCreated is a log parse operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseInitialValidatorCreated(log types.Log) (*PoAValidatorManagerInitialValidatorCreated, error) { - event := new(PoAValidatorManagerInitialValidatorCreated) - if err := _PoAValidatorManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*PoAValidatorManagerCompletedValidatorRegistration, error) { + event := new(PoAValidatorManagerCompletedValidatorRegistration) + if err := _PoAValidatorManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the PoAValidatorManager contract. -type PoAValidatorManagerInitializedIterator struct { - Event *PoAValidatorManagerInitialized // Event containing the contract specifics and raw log +// PoAValidatorManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the PoAValidatorManager contract. +type PoAValidatorManagerCompletedValidatorRemovalIterator struct { + Event *PoAValidatorManagerCompletedValidatorRemoval // 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 @@ -954,7 +1030,7 @@ type PoAValidatorManagerInitializedIterator struct { // 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 *PoAValidatorManagerInitializedIterator) Next() bool { +func (it *PoAValidatorManagerCompletedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -963,7 +1039,7 @@ func (it *PoAValidatorManagerInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerInitialized) + it.Event = new(PoAValidatorManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -978,7 +1054,7 @@ func (it *PoAValidatorManagerInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerInitialized) + it.Event = new(PoAValidatorManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -994,41 +1070,51 @@ func (it *PoAValidatorManagerInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerInitializedIterator) Error() error { +func (it *PoAValidatorManagerCompletedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerInitializedIterator) Close() error { +func (it *PoAValidatorManagerCompletedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerInitialized represents a Initialized event raised by the PoAValidatorManager contract. -type PoAValidatorManagerInitialized struct { - Version uint64 - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the PoAValidatorManager contract. +type PoAValidatorManagerCompletedValidatorRemoval struct { + ValidationID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event Initialized(uint64 version) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*PoAValidatorManagerInitializedIterator, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerCompletedValidatorRemovalIterator, error) { - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "Initialized") + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerInitializedIterator{contract: _PoAValidatorManager.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &PoAValidatorManagerCompletedValidatorRemovalIterator{contract: _PoAValidatorManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event Initialized(uint64 version) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitialized) (event.Subscription, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "Initialized") + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -1038,8 +1124,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialized(opts * select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerInitialized) - if err := _PoAValidatorManager.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(PoAValidatorManagerCompletedValidatorRemoval) + if err := _PoAValidatorManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -1060,21 +1146,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialized(opts * }), nil } -// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event Initialized(uint64 version) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseInitialized(log types.Log) (*PoAValidatorManagerInitialized, error) { - event := new(PoAValidatorManagerInitialized) - if err := _PoAValidatorManager.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*PoAValidatorManagerCompletedValidatorRemoval, error) { + event := new(PoAValidatorManagerCompletedValidatorRemoval) + if err := _PoAValidatorManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the PoAValidatorManager contract. -type PoAValidatorManagerOwnershipTransferredIterator struct { - Event *PoAValidatorManagerOwnershipTransferred // Event containing the contract specifics and raw log +// PoAValidatorManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the PoAValidatorManager contract. +type PoAValidatorManagerCompletedValidatorWeightUpdateIterator struct { + Event *PoAValidatorManagerCompletedValidatorWeightUpdate // 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 @@ -1088,7 +1174,7 @@ type PoAValidatorManagerOwnershipTransferredIterator struct { // 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 *PoAValidatorManagerOwnershipTransferredIterator) Next() bool { +func (it *PoAValidatorManagerCompletedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1097,7 +1183,7 @@ func (it *PoAValidatorManagerOwnershipTransferredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerOwnershipTransferred) + it.Event = new(PoAValidatorManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1112,7 +1198,7 @@ func (it *PoAValidatorManagerOwnershipTransferredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerOwnershipTransferred) + it.Event = new(PoAValidatorManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1128,60 +1214,187 @@ func (it *PoAValidatorManagerOwnershipTransferredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerOwnershipTransferredIterator) Error() error { +func (it *PoAValidatorManagerCompletedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerOwnershipTransferredIterator) Close() error { +func (it *PoAValidatorManagerCompletedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerOwnershipTransferred represents a OwnershipTransferred event raised by the PoAValidatorManager contract. -type PoAValidatorManagerOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the PoAValidatorManager contract. +type PoAValidatorManagerCompletedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*PoAValidatorManagerOwnershipTransferredIterator, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerCompletedValidatorWeightUpdateIterator, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + if err != nil { + return nil, err } + return &PoAValidatorManagerCompletedValidatorWeightUpdateIterator{contract: _PoAValidatorManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil +} - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) +// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerOwnershipTransferredIterator{contract: _PoAValidatorManager.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil + 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(PoAValidatorManagerCompletedValidatorWeightUpdate) + if err := _PoAValidatorManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", 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 } -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*PoAValidatorManagerCompletedValidatorWeightUpdate, error) { + event := new(PoAValidatorManagerCompletedValidatorWeightUpdate) + if err := _PoAValidatorManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) +// PoAValidatorManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitializedIterator struct { + Event *PoAValidatorManagerInitialized // 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 *PoAValidatorManagerInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(PoAValidatorManagerInitialized) + 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(PoAValidatorManagerInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + 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 *PoAValidatorManagerInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PoAValidatorManagerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PoAValidatorManagerInitialized represents a Initialized event raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*PoAValidatorManagerInitializedIterator, error) { + + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &PoAValidatorManagerInitializedIterator{contract: _PoAValidatorManager.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitialized) (event.Subscription, error) { + + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "Initialized") if err != nil { return nil, err } @@ -1191,8 +1404,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchOwnershipTransferr select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerOwnershipTransferred) - if err := _PoAValidatorManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + event := new(PoAValidatorManagerInitialized) + if err := _PoAValidatorManager.contract.UnpackLog(event, "Initialized", log); err != nil { return err } event.Raw = log @@ -1213,21 +1426,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchOwnershipTransferr }), nil } -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseOwnershipTransferred(log types.Log) (*PoAValidatorManagerOwnershipTransferred, error) { - event := new(PoAValidatorManagerOwnershipTransferred) - if err := _PoAValidatorManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { +// Solidity: event Initialized(uint64 version) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseInitialized(log types.Log) (*PoAValidatorManagerInitialized, error) { + event := new(PoAValidatorManagerInitialized) + if err := _PoAValidatorManager.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerValidationPeriodCreatedIterator is returned from FilterValidationPeriodCreated and is used to iterate over the raw logs and unpacked data for ValidationPeriodCreated events raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidationPeriodCreatedIterator struct { - Event *PoAValidatorManagerValidationPeriodCreated // Event containing the contract specifics and raw log +// PoAValidatorManagerInitiatedValidatorRegistrationIterator is returned from FilterInitiatedValidatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRegistration events raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitiatedValidatorRegistrationIterator struct { + Event *PoAValidatorManagerInitiatedValidatorRegistration // 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 @@ -1241,7 +1454,7 @@ type PoAValidatorManagerValidationPeriodCreatedIterator struct { // 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 *PoAValidatorManagerValidationPeriodCreatedIterator) Next() bool { +func (it *PoAValidatorManagerInitiatedValidatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1250,7 +1463,7 @@ func (it *PoAValidatorManagerValidationPeriodCreatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidationPeriodCreated) + it.Event = new(PoAValidatorManagerInitiatedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1265,7 +1478,7 @@ func (it *PoAValidatorManagerValidationPeriodCreatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidationPeriodCreated) + it.Event = new(PoAValidatorManagerInitiatedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1281,71 +1494,55 @@ func (it *PoAValidatorManagerValidationPeriodCreatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerValidationPeriodCreatedIterator) Error() error { +func (it *PoAValidatorManagerInitiatedValidatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerValidationPeriodCreatedIterator) Close() error { +func (it *PoAValidatorManagerInitiatedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerValidationPeriodCreated represents a ValidationPeriodCreated event raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidationPeriodCreated struct { - ValidationID [32]byte - NodeID common.Hash - RegisterValidationMessageID [32]byte - Weight uint64 - RegistrationExpiry uint64 - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerInitiatedValidatorRegistration represents a InitiatedValidatorRegistration event raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitiatedValidatorRegistration struct { + ValidationID [32]byte + NodeID []byte + RegistrationMessageID [32]byte + RegistrationExpiry uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodCreated is a free log retrieval operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. +// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterValidationPeriodCreated(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][]byte, registerValidationMessageID [][32]byte) (*PoAValidatorManagerValidationPeriodCreatedIterator, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerInitiatedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "ValidationPeriodCreated", validationIDRule, nodeIDRule, registerValidationMessageIDRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerValidationPeriodCreatedIterator{contract: _PoAValidatorManager.contract, event: "ValidationPeriodCreated", logs: logs, sub: sub}, nil + return &PoAValidatorManagerInitiatedValidatorRegistrationIterator{contract: _PoAValidatorManager.contract, event: "InitiatedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchValidationPeriodCreated is a free log subscription operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. +// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodCreated(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerValidationPeriodCreated, validationID [][32]byte, nodeID [][]byte, registerValidationMessageID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitiatedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "ValidationPeriodCreated", validationIDRule, nodeIDRule, registerValidationMessageIDRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule) if err != nil { return nil, err } @@ -1355,8 +1552,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodCr select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerValidationPeriodCreated) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { + event := new(PoAValidatorManagerInitiatedValidatorRegistration) + if err := _PoAValidatorManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -1377,21 +1574,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodCr }), nil } -// ParseValidationPeriodCreated is a log parse operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. +// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. // -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidationPeriodCreated(log types.Log) (*PoAValidatorManagerValidationPeriodCreated, error) { - event := new(PoAValidatorManagerValidationPeriodCreated) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseInitiatedValidatorRegistration(log types.Log) (*PoAValidatorManagerInitiatedValidatorRegistration, error) { + event := new(PoAValidatorManagerInitiatedValidatorRegistration) + if err := _PoAValidatorManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerValidationPeriodEndedIterator is returned from FilterValidationPeriodEnded and is used to iterate over the raw logs and unpacked data for ValidationPeriodEnded events raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidationPeriodEndedIterator struct { - Event *PoAValidatorManagerValidationPeriodEnded // Event containing the contract specifics and raw log +// PoAValidatorManagerInitiatedValidatorRemovalIterator is returned from FilterInitiatedValidatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRemoval events raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitiatedValidatorRemovalIterator struct { + Event *PoAValidatorManagerInitiatedValidatorRemoval // 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 @@ -1405,7 +1602,7 @@ type PoAValidatorManagerValidationPeriodEndedIterator struct { // 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 *PoAValidatorManagerValidationPeriodEndedIterator) Next() bool { +func (it *PoAValidatorManagerInitiatedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1414,7 +1611,7 @@ func (it *PoAValidatorManagerValidationPeriodEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidationPeriodEnded) + it.Event = new(PoAValidatorManagerInitiatedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1429,7 +1626,7 @@ func (it *PoAValidatorManagerValidationPeriodEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidationPeriodEnded) + it.Event = new(PoAValidatorManagerInitiatedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1445,60 +1642,54 @@ func (it *PoAValidatorManagerValidationPeriodEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerValidationPeriodEndedIterator) Error() error { +func (it *PoAValidatorManagerInitiatedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerValidationPeriodEndedIterator) Close() error { +func (it *PoAValidatorManagerInitiatedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerValidationPeriodEnded represents a ValidationPeriodEnded event raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidationPeriodEnded struct { - ValidationID [32]byte - Status uint8 - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerInitiatedValidatorRemoval represents a InitiatedValidatorRemoval event raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitiatedValidatorRemoval struct { + ValidationID [32]byte + ValidatorWeightMessageID [32]byte + Weight uint64 + EndTime uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodEnded is a free log retrieval operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// FilterInitiatedValidatorRemoval is a free log retrieval operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterValidationPeriodEnded(opts *bind.FilterOpts, validationID [][32]byte, status []uint8) (*PoAValidatorManagerValidationPeriodEndedIterator, error) { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitiatedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerInitiatedValidatorRemovalIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "InitiatedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerValidationPeriodEndedIterator{contract: _PoAValidatorManager.contract, event: "ValidationPeriodEnded", logs: logs, sub: sub}, nil + return &PoAValidatorManagerInitiatedValidatorRemovalIterator{contract: _PoAValidatorManager.contract, event: "InitiatedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchValidationPeriodEnded is a free log subscription operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// WatchInitiatedValidatorRemoval is a free log subscription operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodEnded(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerValidationPeriodEnded, validationID [][32]byte, status []uint8) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitiatedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitiatedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "InitiatedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -1508,8 +1699,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodEn select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerValidationPeriodEnded) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { + event := new(PoAValidatorManagerInitiatedValidatorRemoval) + if err := _PoAValidatorManager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -1530,21 +1721,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodEn }), nil } -// ParseValidationPeriodEnded is a log parse operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. +// ParseInitiatedValidatorRemoval is a log parse operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. // -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidationPeriodEnded(log types.Log) (*PoAValidatorManagerValidationPeriodEnded, error) { - event := new(PoAValidatorManagerValidationPeriodEnded) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseInitiatedValidatorRemoval(log types.Log) (*PoAValidatorManagerInitiatedValidatorRemoval, error) { + event := new(PoAValidatorManagerInitiatedValidatorRemoval) + if err := _PoAValidatorManager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerValidationPeriodRegisteredIterator is returned from FilterValidationPeriodRegistered and is used to iterate over the raw logs and unpacked data for ValidationPeriodRegistered events raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidationPeriodRegisteredIterator struct { - Event *PoAValidatorManagerValidationPeriodRegistered // Event containing the contract specifics and raw log +// PoAValidatorManagerInitiatedValidatorWeightUpdateIterator is returned from FilterInitiatedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for InitiatedValidatorWeightUpdate events raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitiatedValidatorWeightUpdateIterator struct { + Event *PoAValidatorManagerInitiatedValidatorWeightUpdate // 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 @@ -1558,7 +1749,7 @@ type PoAValidatorManagerValidationPeriodRegisteredIterator struct { // 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 *PoAValidatorManagerValidationPeriodRegisteredIterator) Next() bool { +func (it *PoAValidatorManagerInitiatedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1567,7 +1758,7 @@ func (it *PoAValidatorManagerValidationPeriodRegisteredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidationPeriodRegistered) + it.Event = new(PoAValidatorManagerInitiatedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1582,7 +1773,7 @@ func (it *PoAValidatorManagerValidationPeriodRegisteredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidationPeriodRegistered) + it.Event = new(PoAValidatorManagerInitiatedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1598,53 +1789,54 @@ func (it *PoAValidatorManagerValidationPeriodRegisteredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerValidationPeriodRegisteredIterator) Error() error { +func (it *PoAValidatorManagerInitiatedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerValidationPeriodRegisteredIterator) Close() error { +func (it *PoAValidatorManagerInitiatedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerValidationPeriodRegistered represents a ValidationPeriodRegistered event raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidationPeriodRegistered struct { - ValidationID [32]byte - Weight uint64 - Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerInitiatedValidatorWeightUpdate represents a InitiatedValidatorWeightUpdate event raised by the PoAValidatorManager contract. +type PoAValidatorManagerInitiatedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + WeightUpdateMessageID [32]byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidationPeriodRegistered is a free log retrieval operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// FilterInitiatedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterValidationPeriodRegistered(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerValidationPeriodRegisteredIterator, error) { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitiatedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerInitiatedValidatorWeightUpdateIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "ValidationPeriodRegistered", validationIDRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerValidationPeriodRegisteredIterator{contract: _PoAValidatorManager.contract, event: "ValidationPeriodRegistered", logs: logs, sub: sub}, nil + return &PoAValidatorManagerInitiatedValidatorWeightUpdateIterator{contract: _PoAValidatorManager.contract, event: "InitiatedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchValidationPeriodRegistered is a free log subscription operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// WatchInitiatedValidatorWeightUpdate is a free log subscription operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodRegistered(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerValidationPeriodRegistered, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitiatedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitiatedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "ValidationPeriodRegistered", validationIDRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -1654,8 +1846,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodRe select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerValidationPeriodRegistered) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { + event := new(PoAValidatorManagerInitiatedValidatorWeightUpdate) + if err := _PoAValidatorManager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -1676,21 +1868,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidationPeriodRe }), nil } -// ParseValidationPeriodRegistered is a log parse operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. +// ParseInitiatedValidatorWeightUpdate is a log parse operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. // -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidationPeriodRegistered(log types.Log) (*PoAValidatorManagerValidationPeriodRegistered, error) { - event := new(PoAValidatorManagerValidationPeriodRegistered) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseInitiatedValidatorWeightUpdate(log types.Log) (*PoAValidatorManagerInitiatedValidatorWeightUpdate, error) { + event := new(PoAValidatorManagerInitiatedValidatorWeightUpdate) + if err := _PoAValidatorManager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidatorRemovalInitializedIterator struct { - Event *PoAValidatorManagerValidatorRemovalInitialized // Event containing the contract specifics and raw log +// PoAValidatorManagerOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the PoAValidatorManager contract. +type PoAValidatorManagerOwnershipTransferredIterator struct { + Event *PoAValidatorManagerOwnershipTransferred // 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 @@ -1704,7 +1896,7 @@ type PoAValidatorManagerValidatorRemovalInitializedIterator struct { // 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 *PoAValidatorManagerValidatorRemovalInitializedIterator) Next() bool { +func (it *PoAValidatorManagerOwnershipTransferredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1713,7 +1905,7 @@ func (it *PoAValidatorManagerValidatorRemovalInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidatorRemovalInitialized) + it.Event = new(PoAValidatorManagerOwnershipTransferred) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1728,7 +1920,7 @@ func (it *PoAValidatorManagerValidatorRemovalInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidatorRemovalInitialized) + it.Event = new(PoAValidatorManagerOwnershipTransferred) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1744,62 +1936,60 @@ func (it *PoAValidatorManagerValidatorRemovalInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerValidatorRemovalInitializedIterator) Error() error { +func (it *PoAValidatorManagerOwnershipTransferredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerValidatorRemovalInitializedIterator) Close() error { +func (it *PoAValidatorManagerOwnershipTransferredIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerValidatorRemovalInitialized represents a ValidatorRemovalInitialized event raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidatorRemovalInitialized struct { - ValidationID [32]byte - SetWeightMessageID [32]byte - Weight uint64 - EndTime *big.Int - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerOwnershipTransferred represents a OwnershipTransferred event raised by the PoAValidatorManager contract. +type PoAValidatorManagerOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterValidatorRemovalInitialized is a free log retrieval operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterValidatorRemovalInitialized(opts *bind.FilterOpts, validationID [][32]byte, setWeightMessageID [][32]byte) (*PoAValidatorManagerValidatorRemovalInitializedIterator, error) { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*PoAValidatorManagerOwnershipTransferredIterator, error) { - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) if err != nil { return nil, err } - return &PoAValidatorManagerValidatorRemovalInitializedIterator{contract: _PoAValidatorManager.contract, event: "ValidatorRemovalInitialized", logs: logs, sub: sub}, nil + return &PoAValidatorManagerOwnershipTransferredIterator{contract: _PoAValidatorManager.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil } -// WatchValidatorRemovalInitialized is a free log subscription operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerValidatorRemovalInitialized, validationID [][32]byte, setWeightMessageID [][32]byte) (event.Subscription, error) { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) if err != nil { return nil, err } @@ -1809,8 +1999,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidatorRemovalIn select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerValidatorRemovalInitialized) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { + event := new(PoAValidatorManagerOwnershipTransferred) + if err := _PoAValidatorManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { return err } event.Raw = log @@ -1831,21 +2021,21 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidatorRemovalIn }), nil } -// ParseValidatorRemovalInitialized is a log parse operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidatorRemovalInitialized(log types.Log) (*PoAValidatorManagerValidatorRemovalInitialized, error) { - event := new(PoAValidatorManagerValidatorRemovalInitialized) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseOwnershipTransferred(log types.Log) (*PoAValidatorManagerOwnershipTransferred, error) { + event := new(PoAValidatorManagerOwnershipTransferred) + if err := _PoAValidatorManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { return nil, err } event.Raw = log return event, nil } -// PoAValidatorManagerValidatorWeightUpdateIterator is returned from FilterValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for ValidatorWeightUpdate events raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidatorWeightUpdateIterator struct { - Event *PoAValidatorManagerValidatorWeightUpdate // Event containing the contract specifics and raw log +// PoAValidatorManagerRegisteredInitialValidatorIterator is returned from FilterRegisteredInitialValidator and is used to iterate over the raw logs and unpacked data for RegisteredInitialValidator events raised by the PoAValidatorManager contract. +type PoAValidatorManagerRegisteredInitialValidatorIterator struct { + Event *PoAValidatorManagerRegisteredInitialValidator // 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 @@ -1859,7 +2049,7 @@ type PoAValidatorManagerValidatorWeightUpdateIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Next() bool { +func (it *PoAValidatorManagerRegisteredInitialValidatorIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1868,7 +2058,7 @@ func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidatorWeightUpdate) + it.Event = new(PoAValidatorManagerRegisteredInitialValidator) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1883,7 +2073,7 @@ func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(PoAValidatorManagerValidatorWeightUpdate) + it.Event = new(PoAValidatorManagerRegisteredInitialValidator) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1899,62 +2089,53 @@ func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Error() error { +func (it *PoAValidatorManagerRegisteredInitialValidatorIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *PoAValidatorManagerValidatorWeightUpdateIterator) Close() error { +func (it *PoAValidatorManagerRegisteredInitialValidatorIterator) Close() error { it.sub.Unsubscribe() return nil } -// PoAValidatorManagerValidatorWeightUpdate represents a ValidatorWeightUpdate event raised by the PoAValidatorManager contract. -type PoAValidatorManagerValidatorWeightUpdate struct { - ValidationID [32]byte - Nonce uint64 - Weight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// PoAValidatorManagerRegisteredInitialValidator represents a RegisteredInitialValidator event raised by the PoAValidatorManager contract. +type PoAValidatorManagerRegisteredInitialValidator struct { + ValidationID [32]byte + NodeID []byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte, nonce []uint64) (*PoAValidatorManagerValidatorWeightUpdateIterator, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerRegisteredInitialValidatorIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule) if err != nil { return nil, err } - return &PoAValidatorManagerValidatorWeightUpdateIterator{contract: _PoAValidatorManager.contract, event: "ValidatorWeightUpdate", logs: logs, sub: sub}, nil + return &PoAValidatorManagerRegisteredInitialValidatorIterator{contract: _PoAValidatorManager.contract, event: "RegisteredInitialValidator", logs: logs, sub: sub}, nil } -// WatchValidatorWeightUpdate is a free log subscription operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerValidatorWeightUpdate, validationID [][32]byte, nonce []uint64) (event.Subscription, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerRegisteredInitialValidator, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var nonceRule []interface{} - for _, nonceItem := range nonce { - nonceRule = append(nonceRule, nonceItem) - } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule) if err != nil { return nil, err } @@ -1964,8 +2145,8 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidatorWeightUpd select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(PoAValidatorManagerValidatorWeightUpdate) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { + event := new(PoAValidatorManagerRegisteredInitialValidator) + if err := _PoAValidatorManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { return err } event.Raw = log @@ -1986,12 +2167,12 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchValidatorWeightUpd }), nil } -// ParseValidatorWeightUpdate is a log parse operation binding the contract event 0x07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df. +// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. // -// Solidity: event ValidatorWeightUpdate(bytes32 indexed validationID, uint64 indexed nonce, uint64 weight, bytes32 setWeightMessageID) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidatorWeightUpdate(log types.Log) (*PoAValidatorManagerValidatorWeightUpdate, error) { - event := new(PoAValidatorManagerValidatorWeightUpdate) - if err := _PoAValidatorManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseRegisteredInitialValidator(log types.Log) (*PoAValidatorManagerRegisteredInitialValidator, error) { + event := new(PoAValidatorManagerRegisteredInitialValidator) + if err := _PoAValidatorManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { return nil, err } event.Raw = log @@ -2001,7 +2182,7 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseValidatorWeightUpd // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212209b053b8f4b1240668e63fcf61c1058f38e82bf86a5ffafe8ef50c8ba2c10a75564736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea26469706673582212208f97dd615e4586f85eec84c3dcf6f765032d5b15f7beb22c22fa9f8b3c7f72de64736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go b/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go index 5acc40a14..a9a1ef28a 100644 --- a/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go +++ b/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go @@ -29,24 +29,9 @@ var ( _ = abi.ConvertType ) -// ConversionData is an auto generated low-level Go binding around an user-defined struct. -type ConversionData struct { - SubnetID [32]byte - ValidatorManagerBlockchainID [32]byte - ValidatorManagerAddress common.Address - InitialValidators []InitialValidator -} - -// InitialValidator is an auto generated low-level Go binding around an user-defined struct. -type InitialValidator struct { - NodeID []byte - BlsPublicKey []byte - Weight uint64 -} - // IPoSValidatorManagerMetaData contains all meta data concerning the IPoSValidatorManager contract. var IPoSValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messsageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // IPoSValidatorManagerABI is the input ABI used to generate the binding from. @@ -300,48 +285,6 @@ func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) CompleteEndD return _IPoSValidatorManager.Contract.CompleteEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) CompleteEndValidation(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "completeEndValidation", messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.CompleteEndValidation(&_IPoSValidatorManager.TransactOpts, messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.CompleteEndValidation(&_IPoSValidatorManager.TransactOpts, messageIndex) -} - -// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. -// -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) CompleteValidatorRegistration(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "completeValidatorRegistration", messageIndex) -} - -// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. -// -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.CompleteValidatorRegistration(&_IPoSValidatorManager.TransactOpts, messageIndex) -} - -// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. -// -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.CompleteValidatorRegistration(&_IPoSValidatorManager.TransactOpts, messageIndex) -} - // ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. // // Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() @@ -510,27 +453,6 @@ func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeEn return _IPoSValidatorManager.Contract.InitializeEndValidation0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. -// -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messsageIndex) -} - -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. -// -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitializeValidatorSet(conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeValidatorSet(&_IPoSValidatorManager.TransactOpts, conversionData, messsageIndex) -} - -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. -// -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeValidatorSet(&_IPoSValidatorManager.TransactOpts, conversionData, messsageIndex) -} - // ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. // // Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() @@ -1243,160 +1165,6 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseDelegatorRemoval return event, nil } -// IPoSValidatorManagerInitialValidatorCreatedIterator is returned from FilterInitialValidatorCreated and is used to iterate over the raw logs and unpacked data for InitialValidatorCreated events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerInitialValidatorCreatedIterator struct { - Event *IPoSValidatorManagerInitialValidatorCreated // 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 *IPoSValidatorManagerInitialValidatorCreatedIterator) 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(IPoSValidatorManagerInitialValidatorCreated) - 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(IPoSValidatorManagerInitialValidatorCreated) - 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 *IPoSValidatorManagerInitialValidatorCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IPoSValidatorManagerInitialValidatorCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IPoSValidatorManagerInitialValidatorCreated represents a InitialValidatorCreated event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerInitialValidatorCreated struct { - ValidationID [32]byte - NodeID common.Hash - Weight uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialValidatorCreated is a free log retrieval operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. -// -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterInitialValidatorCreated(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][]byte) (*IPoSValidatorManagerInitialValidatorCreatedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "InitialValidatorCreated", validationIDRule, nodeIDRule) - if err != nil { - return nil, err - } - return &IPoSValidatorManagerInitialValidatorCreatedIterator{contract: _IPoSValidatorManager.contract, event: "InitialValidatorCreated", logs: logs, sub: sub}, nil -} - -// WatchInitialValidatorCreated is a free log subscription operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. -// -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchInitialValidatorCreated(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerInitialValidatorCreated, validationID [][32]byte, nodeID [][]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "InitialValidatorCreated", validationIDRule, nodeIDRule) - 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(IPoSValidatorManagerInitialValidatorCreated) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "InitialValidatorCreated", 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 -} - -// ParseInitialValidatorCreated is a log parse operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. -// -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseInitialValidatorCreated(log types.Log) (*IPoSValidatorManagerInitialValidatorCreated, error) { - event := new(IPoSValidatorManagerInitialValidatorCreated) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // IPoSValidatorManagerUptimeUpdatedIterator is returned from FilterUptimeUpdated and is used to iterate over the raw logs and unpacked data for UptimeUpdated events raised by the IPoSValidatorManager contract. type IPoSValidatorManagerUptimeUpdatedIterator struct { Event *IPoSValidatorManagerUptimeUpdated // Event containing the contract specifics and raw log @@ -1541,776 +1309,3 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseUptimeUpdated(lo event.Raw = log return event, nil } - -// IPoSValidatorManagerValidationPeriodCreatedIterator is returned from FilterValidationPeriodCreated and is used to iterate over the raw logs and unpacked data for ValidationPeriodCreated events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidationPeriodCreatedIterator struct { - Event *IPoSValidatorManagerValidationPeriodCreated // 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 *IPoSValidatorManagerValidationPeriodCreatedIterator) 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(IPoSValidatorManagerValidationPeriodCreated) - 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(IPoSValidatorManagerValidationPeriodCreated) - 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 *IPoSValidatorManagerValidationPeriodCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IPoSValidatorManagerValidationPeriodCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IPoSValidatorManagerValidationPeriodCreated represents a ValidationPeriodCreated event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidationPeriodCreated struct { - ValidationID [32]byte - NodeID common.Hash - RegisterValidationMessageID [32]byte - Weight uint64 - RegistrationExpiry uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationPeriodCreated is a free log retrieval operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. -// -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterValidationPeriodCreated(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][]byte, registerValidationMessageID [][32]byte) (*IPoSValidatorManagerValidationPeriodCreatedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "ValidationPeriodCreated", validationIDRule, nodeIDRule, registerValidationMessageIDRule) - if err != nil { - return nil, err - } - return &IPoSValidatorManagerValidationPeriodCreatedIterator{contract: _IPoSValidatorManager.contract, event: "ValidationPeriodCreated", logs: logs, sub: sub}, nil -} - -// WatchValidationPeriodCreated is a free log subscription operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. -// -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchValidationPeriodCreated(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerValidationPeriodCreated, validationID [][32]byte, nodeID [][]byte, registerValidationMessageID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "ValidationPeriodCreated", validationIDRule, nodeIDRule, registerValidationMessageIDRule) - 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(IPoSValidatorManagerValidationPeriodCreated) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidationPeriodCreated", 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 -} - -// ParseValidationPeriodCreated is a log parse operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. -// -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseValidationPeriodCreated(log types.Log) (*IPoSValidatorManagerValidationPeriodCreated, error) { - event := new(IPoSValidatorManagerValidationPeriodCreated) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IPoSValidatorManagerValidationPeriodEndedIterator is returned from FilterValidationPeriodEnded and is used to iterate over the raw logs and unpacked data for ValidationPeriodEnded events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidationPeriodEndedIterator struct { - Event *IPoSValidatorManagerValidationPeriodEnded // 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 *IPoSValidatorManagerValidationPeriodEndedIterator) 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(IPoSValidatorManagerValidationPeriodEnded) - 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(IPoSValidatorManagerValidationPeriodEnded) - 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 *IPoSValidatorManagerValidationPeriodEndedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IPoSValidatorManagerValidationPeriodEndedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IPoSValidatorManagerValidationPeriodEnded represents a ValidationPeriodEnded event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidationPeriodEnded struct { - ValidationID [32]byte - Status uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationPeriodEnded is a free log retrieval operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. -// -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterValidationPeriodEnded(opts *bind.FilterOpts, validationID [][32]byte, status []uint8) (*IPoSValidatorManagerValidationPeriodEndedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) - if err != nil { - return nil, err - } - return &IPoSValidatorManagerValidationPeriodEndedIterator{contract: _IPoSValidatorManager.contract, event: "ValidationPeriodEnded", logs: logs, sub: sub}, nil -} - -// WatchValidationPeriodEnded is a free log subscription operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. -// -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchValidationPeriodEnded(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerValidationPeriodEnded, validationID [][32]byte, status []uint8) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) - 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(IPoSValidatorManagerValidationPeriodEnded) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidationPeriodEnded", 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 -} - -// ParseValidationPeriodEnded is a log parse operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. -// -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseValidationPeriodEnded(log types.Log) (*IPoSValidatorManagerValidationPeriodEnded, error) { - event := new(IPoSValidatorManagerValidationPeriodEnded) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IPoSValidatorManagerValidationPeriodRegisteredIterator is returned from FilterValidationPeriodRegistered and is used to iterate over the raw logs and unpacked data for ValidationPeriodRegistered events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidationPeriodRegisteredIterator struct { - Event *IPoSValidatorManagerValidationPeriodRegistered // 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 *IPoSValidatorManagerValidationPeriodRegisteredIterator) 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(IPoSValidatorManagerValidationPeriodRegistered) - 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(IPoSValidatorManagerValidationPeriodRegistered) - 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 *IPoSValidatorManagerValidationPeriodRegisteredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IPoSValidatorManagerValidationPeriodRegisteredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IPoSValidatorManagerValidationPeriodRegistered represents a ValidationPeriodRegistered event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidationPeriodRegistered struct { - ValidationID [32]byte - Weight uint64 - Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationPeriodRegistered is a free log retrieval operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. -// -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterValidationPeriodRegistered(opts *bind.FilterOpts, validationID [][32]byte) (*IPoSValidatorManagerValidationPeriodRegisteredIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "ValidationPeriodRegistered", validationIDRule) - if err != nil { - return nil, err - } - return &IPoSValidatorManagerValidationPeriodRegisteredIterator{contract: _IPoSValidatorManager.contract, event: "ValidationPeriodRegistered", logs: logs, sub: sub}, nil -} - -// WatchValidationPeriodRegistered is a free log subscription operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. -// -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchValidationPeriodRegistered(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerValidationPeriodRegistered, validationID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "ValidationPeriodRegistered", validationIDRule) - 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(IPoSValidatorManagerValidationPeriodRegistered) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidationPeriodRegistered", 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 -} - -// ParseValidationPeriodRegistered is a log parse operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. -// -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseValidationPeriodRegistered(log types.Log) (*IPoSValidatorManagerValidationPeriodRegistered, error) { - event := new(IPoSValidatorManagerValidationPeriodRegistered) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IPoSValidatorManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidatorRemovalInitializedIterator struct { - Event *IPoSValidatorManagerValidatorRemovalInitialized // 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 *IPoSValidatorManagerValidatorRemovalInitializedIterator) 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(IPoSValidatorManagerValidatorRemovalInitialized) - 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(IPoSValidatorManagerValidatorRemovalInitialized) - 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 *IPoSValidatorManagerValidatorRemovalInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IPoSValidatorManagerValidatorRemovalInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IPoSValidatorManagerValidatorRemovalInitialized represents a ValidatorRemovalInitialized event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidatorRemovalInitialized struct { - ValidationID [32]byte - SetWeightMessageID [32]byte - Weight uint64 - EndTime *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidatorRemovalInitialized is a free log retrieval operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. -// -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterValidatorRemovalInitialized(opts *bind.FilterOpts, validationID [][32]byte, setWeightMessageID [][32]byte) (*IPoSValidatorManagerValidatorRemovalInitializedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) - if err != nil { - return nil, err - } - return &IPoSValidatorManagerValidatorRemovalInitializedIterator{contract: _IPoSValidatorManager.contract, event: "ValidatorRemovalInitialized", logs: logs, sub: sub}, nil -} - -// WatchValidatorRemovalInitialized is a free log subscription operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. -// -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchValidatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerValidatorRemovalInitialized, validationID [][32]byte, setWeightMessageID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) - } - - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) - 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(IPoSValidatorManagerValidatorRemovalInitialized) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", 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 -} - -// ParseValidatorRemovalInitialized is a log parse operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. -// -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseValidatorRemovalInitialized(log types.Log) (*IPoSValidatorManagerValidatorRemovalInitialized, error) { - event := new(IPoSValidatorManagerValidatorRemovalInitialized) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IPoSValidatorManagerValidatorWeightUpdateIterator is returned from FilterValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for ValidatorWeightUpdate events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidatorWeightUpdateIterator struct { - Event *IPoSValidatorManagerValidatorWeightUpdate // 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 *IPoSValidatorManagerValidatorWeightUpdateIterator) 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(IPoSValidatorManagerValidatorWeightUpdate) - 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(IPoSValidatorManagerValidatorWeightUpdate) - 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 *IPoSValidatorManagerValidatorWeightUpdateIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IPoSValidatorManagerValidatorWeightUpdateIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IPoSValidatorManagerValidatorWeightUpdate represents a ValidatorWeightUpdate event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerValidatorWeightUpdate struct { - ValidationID [32]byte - Nonce uint64 - Weight 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 weight, bytes32 setWeightMessageID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte, nonce []uint64) (*IPoSValidatorManagerValidatorWeightUpdateIterator, 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 := _IPoSValidatorManager.contract.FilterLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) - if err != nil { - return nil, err - } - return &IPoSValidatorManagerValidatorWeightUpdateIterator{contract: _IPoSValidatorManager.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 weight, bytes32 setWeightMessageID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerValidatorWeightUpdate, 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 := _IPoSValidatorManager.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(IPoSValidatorManagerValidatorWeightUpdate) - if err := _IPoSValidatorManager.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 weight, bytes32 setWeightMessageID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseValidatorWeightUpdate(log types.Log) (*IPoSValidatorManagerValidatorWeightUpdate, error) { - event := new(IPoSValidatorManagerValidatorWeightUpdate) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go b/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go index 9135c7b1b..b09593664 100644 --- a/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go +++ b/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go @@ -29,24 +29,9 @@ var ( _ = abi.ConvertType ) -// ConversionData is an auto generated low-level Go binding around an user-defined struct. -type ConversionData struct { - SubnetID [32]byte - ValidatorManagerBlockchainID [32]byte - ValidatorManagerAddress common.Address - InitialValidators []InitialValidator -} - -// InitialValidator is an auto generated low-level Go binding around an user-defined struct. -type InitialValidator struct { - NodeID []byte - BlsPublicKey []byte - Weight uint64 -} - // IValidatorManagerMetaData contains all meta data concerning the IValidatorManager contract. var IValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messsageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // IValidatorManagerABI is the input ABI used to generate the binding from. @@ -195,69 +180,6 @@ func (_IValidatorManager *IValidatorManagerTransactorRaw) Transact(opts *bind.Tr return _IValidatorManager.Contract.contract.Transact(opts, method, params...) } -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_IValidatorManager *IValidatorManagerTransactor) CompleteEndValidation(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.contract.Transact(opts, "completeEndValidation", messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_IValidatorManager *IValidatorManagerSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.Contract.CompleteEndValidation(&_IValidatorManager.TransactOpts, messageIndex) -} - -// CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. -// -// Solidity: function completeEndValidation(uint32 messageIndex) returns() -func (_IValidatorManager *IValidatorManagerTransactorSession) CompleteEndValidation(messageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.Contract.CompleteEndValidation(&_IValidatorManager.TransactOpts, messageIndex) -} - -// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. -// -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() -func (_IValidatorManager *IValidatorManagerTransactor) CompleteValidatorRegistration(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.contract.Transact(opts, "completeValidatorRegistration", messageIndex) -} - -// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. -// -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() -func (_IValidatorManager *IValidatorManagerSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.Contract.CompleteValidatorRegistration(&_IValidatorManager.TransactOpts, messageIndex) -} - -// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. -// -// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns() -func (_IValidatorManager *IValidatorManagerTransactorSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.Contract.CompleteValidatorRegistration(&_IValidatorManager.TransactOpts, messageIndex) -} - -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. -// -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() -func (_IValidatorManager *IValidatorManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messsageIndex) -} - -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. -// -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() -func (_IValidatorManager *IValidatorManagerSession) InitializeValidatorSet(conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.Contract.InitializeValidatorSet(&_IValidatorManager.TransactOpts, conversionData, messsageIndex) -} - -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. -// -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() -func (_IValidatorManager *IValidatorManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { - return _IValidatorManager.Contract.InitializeValidatorSet(&_IValidatorManager.TransactOpts, conversionData, messsageIndex) -} - // ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. // // Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() @@ -299,930 +221,3 @@ func (_IValidatorManager *IValidatorManagerSession) ResendRegisterValidatorMessa func (_IValidatorManager *IValidatorManagerTransactorSession) ResendRegisterValidatorMessage(validationID [32]byte) (*types.Transaction, error) { return _IValidatorManager.Contract.ResendRegisterValidatorMessage(&_IValidatorManager.TransactOpts, validationID) } - -// IValidatorManagerInitialValidatorCreatedIterator is returned from FilterInitialValidatorCreated and is used to iterate over the raw logs and unpacked data for InitialValidatorCreated events raised by the IValidatorManager contract. -type IValidatorManagerInitialValidatorCreatedIterator struct { - Event *IValidatorManagerInitialValidatorCreated // 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 *IValidatorManagerInitialValidatorCreatedIterator) 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(IValidatorManagerInitialValidatorCreated) - 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(IValidatorManagerInitialValidatorCreated) - 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 *IValidatorManagerInitialValidatorCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IValidatorManagerInitialValidatorCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IValidatorManagerInitialValidatorCreated represents a InitialValidatorCreated event raised by the IValidatorManager contract. -type IValidatorManagerInitialValidatorCreated struct { - ValidationID [32]byte - NodeID common.Hash - Weight uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialValidatorCreated is a free log retrieval operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. -// -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_IValidatorManager *IValidatorManagerFilterer) FilterInitialValidatorCreated(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][]byte) (*IValidatorManagerInitialValidatorCreatedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - - logs, sub, err := _IValidatorManager.contract.FilterLogs(opts, "InitialValidatorCreated", validationIDRule, nodeIDRule) - if err != nil { - return nil, err - } - return &IValidatorManagerInitialValidatorCreatedIterator{contract: _IValidatorManager.contract, event: "InitialValidatorCreated", logs: logs, sub: sub}, nil -} - -// WatchInitialValidatorCreated is a free log subscription operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. -// -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_IValidatorManager *IValidatorManagerFilterer) WatchInitialValidatorCreated(opts *bind.WatchOpts, sink chan<- *IValidatorManagerInitialValidatorCreated, validationID [][32]byte, nodeID [][]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - - logs, sub, err := _IValidatorManager.contract.WatchLogs(opts, "InitialValidatorCreated", validationIDRule, nodeIDRule) - 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(IValidatorManagerInitialValidatorCreated) - if err := _IValidatorManager.contract.UnpackLog(event, "InitialValidatorCreated", 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 -} - -// ParseInitialValidatorCreated is a log parse operation binding the contract event 0xfe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c. -// -// Solidity: event InitialValidatorCreated(bytes32 indexed validationID, bytes indexed nodeID, uint64 weight) -func (_IValidatorManager *IValidatorManagerFilterer) ParseInitialValidatorCreated(log types.Log) (*IValidatorManagerInitialValidatorCreated, error) { - event := new(IValidatorManagerInitialValidatorCreated) - if err := _IValidatorManager.contract.UnpackLog(event, "InitialValidatorCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IValidatorManagerValidationPeriodCreatedIterator is returned from FilterValidationPeriodCreated and is used to iterate over the raw logs and unpacked data for ValidationPeriodCreated events raised by the IValidatorManager contract. -type IValidatorManagerValidationPeriodCreatedIterator struct { - Event *IValidatorManagerValidationPeriodCreated // 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 *IValidatorManagerValidationPeriodCreatedIterator) 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(IValidatorManagerValidationPeriodCreated) - 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(IValidatorManagerValidationPeriodCreated) - 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 *IValidatorManagerValidationPeriodCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IValidatorManagerValidationPeriodCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IValidatorManagerValidationPeriodCreated represents a ValidationPeriodCreated event raised by the IValidatorManager contract. -type IValidatorManagerValidationPeriodCreated struct { - ValidationID [32]byte - NodeID common.Hash - RegisterValidationMessageID [32]byte - Weight uint64 - RegistrationExpiry uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationPeriodCreated is a free log retrieval operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. -// -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_IValidatorManager *IValidatorManagerFilterer) FilterValidationPeriodCreated(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][]byte, registerValidationMessageID [][32]byte) (*IValidatorManagerValidationPeriodCreatedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - - logs, sub, err := _IValidatorManager.contract.FilterLogs(opts, "ValidationPeriodCreated", validationIDRule, nodeIDRule, registerValidationMessageIDRule) - if err != nil { - return nil, err - } - return &IValidatorManagerValidationPeriodCreatedIterator{contract: _IValidatorManager.contract, event: "ValidationPeriodCreated", logs: logs, sub: sub}, nil -} - -// WatchValidationPeriodCreated is a free log subscription operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. -// -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_IValidatorManager *IValidatorManagerFilterer) WatchValidationPeriodCreated(opts *bind.WatchOpts, sink chan<- *IValidatorManagerValidationPeriodCreated, validationID [][32]byte, nodeID [][]byte, registerValidationMessageID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var nodeIDRule []interface{} - for _, nodeIDItem := range nodeID { - nodeIDRule = append(nodeIDRule, nodeIDItem) - } - var registerValidationMessageIDRule []interface{} - for _, registerValidationMessageIDItem := range registerValidationMessageID { - registerValidationMessageIDRule = append(registerValidationMessageIDRule, registerValidationMessageIDItem) - } - - logs, sub, err := _IValidatorManager.contract.WatchLogs(opts, "ValidationPeriodCreated", validationIDRule, nodeIDRule, registerValidationMessageIDRule) - 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(IValidatorManagerValidationPeriodCreated) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidationPeriodCreated", 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 -} - -// ParseValidationPeriodCreated is a log parse operation binding the contract event 0xd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49. -// -// Solidity: event ValidationPeriodCreated(bytes32 indexed validationID, bytes indexed nodeID, bytes32 indexed registerValidationMessageID, uint64 weight, uint64 registrationExpiry) -func (_IValidatorManager *IValidatorManagerFilterer) ParseValidationPeriodCreated(log types.Log) (*IValidatorManagerValidationPeriodCreated, error) { - event := new(IValidatorManagerValidationPeriodCreated) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidationPeriodCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IValidatorManagerValidationPeriodEndedIterator is returned from FilterValidationPeriodEnded and is used to iterate over the raw logs and unpacked data for ValidationPeriodEnded events raised by the IValidatorManager contract. -type IValidatorManagerValidationPeriodEndedIterator struct { - Event *IValidatorManagerValidationPeriodEnded // 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 *IValidatorManagerValidationPeriodEndedIterator) 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(IValidatorManagerValidationPeriodEnded) - 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(IValidatorManagerValidationPeriodEnded) - 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 *IValidatorManagerValidationPeriodEndedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IValidatorManagerValidationPeriodEndedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IValidatorManagerValidationPeriodEnded represents a ValidationPeriodEnded event raised by the IValidatorManager contract. -type IValidatorManagerValidationPeriodEnded struct { - ValidationID [32]byte - Status uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationPeriodEnded is a free log retrieval operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. -// -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_IValidatorManager *IValidatorManagerFilterer) FilterValidationPeriodEnded(opts *bind.FilterOpts, validationID [][32]byte, status []uint8) (*IValidatorManagerValidationPeriodEndedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - - logs, sub, err := _IValidatorManager.contract.FilterLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) - if err != nil { - return nil, err - } - return &IValidatorManagerValidationPeriodEndedIterator{contract: _IValidatorManager.contract, event: "ValidationPeriodEnded", logs: logs, sub: sub}, nil -} - -// WatchValidationPeriodEnded is a free log subscription operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. -// -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_IValidatorManager *IValidatorManagerFilterer) WatchValidationPeriodEnded(opts *bind.WatchOpts, sink chan<- *IValidatorManagerValidationPeriodEnded, validationID [][32]byte, status []uint8) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var statusRule []interface{} - for _, statusItem := range status { - statusRule = append(statusRule, statusItem) - } - - logs, sub, err := _IValidatorManager.contract.WatchLogs(opts, "ValidationPeriodEnded", validationIDRule, statusRule) - 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(IValidatorManagerValidationPeriodEnded) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidationPeriodEnded", 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 -} - -// ParseValidationPeriodEnded is a log parse operation binding the contract event 0x1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16. -// -// Solidity: event ValidationPeriodEnded(bytes32 indexed validationID, uint8 indexed status) -func (_IValidatorManager *IValidatorManagerFilterer) ParseValidationPeriodEnded(log types.Log) (*IValidatorManagerValidationPeriodEnded, error) { - event := new(IValidatorManagerValidationPeriodEnded) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidationPeriodEnded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IValidatorManagerValidationPeriodRegisteredIterator is returned from FilterValidationPeriodRegistered and is used to iterate over the raw logs and unpacked data for ValidationPeriodRegistered events raised by the IValidatorManager contract. -type IValidatorManagerValidationPeriodRegisteredIterator struct { - Event *IValidatorManagerValidationPeriodRegistered // 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 *IValidatorManagerValidationPeriodRegisteredIterator) 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(IValidatorManagerValidationPeriodRegistered) - 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(IValidatorManagerValidationPeriodRegistered) - 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 *IValidatorManagerValidationPeriodRegisteredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IValidatorManagerValidationPeriodRegisteredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IValidatorManagerValidationPeriodRegistered represents a ValidationPeriodRegistered event raised by the IValidatorManager contract. -type IValidatorManagerValidationPeriodRegistered struct { - ValidationID [32]byte - Weight uint64 - Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidationPeriodRegistered is a free log retrieval operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. -// -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_IValidatorManager *IValidatorManagerFilterer) FilterValidationPeriodRegistered(opts *bind.FilterOpts, validationID [][32]byte) (*IValidatorManagerValidationPeriodRegisteredIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _IValidatorManager.contract.FilterLogs(opts, "ValidationPeriodRegistered", validationIDRule) - if err != nil { - return nil, err - } - return &IValidatorManagerValidationPeriodRegisteredIterator{contract: _IValidatorManager.contract, event: "ValidationPeriodRegistered", logs: logs, sub: sub}, nil -} - -// WatchValidationPeriodRegistered is a free log subscription operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. -// -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_IValidatorManager *IValidatorManagerFilterer) WatchValidationPeriodRegistered(opts *bind.WatchOpts, sink chan<- *IValidatorManagerValidationPeriodRegistered, validationID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - - logs, sub, err := _IValidatorManager.contract.WatchLogs(opts, "ValidationPeriodRegistered", validationIDRule) - 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(IValidatorManagerValidationPeriodRegistered) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidationPeriodRegistered", 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 -} - -// ParseValidationPeriodRegistered is a log parse operation binding the contract event 0x8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b. -// -// Solidity: event ValidationPeriodRegistered(bytes32 indexed validationID, uint64 weight, uint256 timestamp) -func (_IValidatorManager *IValidatorManagerFilterer) ParseValidationPeriodRegistered(log types.Log) (*IValidatorManagerValidationPeriodRegistered, error) { - event := new(IValidatorManagerValidationPeriodRegistered) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidationPeriodRegistered", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IValidatorManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the IValidatorManager contract. -type IValidatorManagerValidatorRemovalInitializedIterator struct { - Event *IValidatorManagerValidatorRemovalInitialized // 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 *IValidatorManagerValidatorRemovalInitializedIterator) 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(IValidatorManagerValidatorRemovalInitialized) - 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(IValidatorManagerValidatorRemovalInitialized) - 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 *IValidatorManagerValidatorRemovalInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IValidatorManagerValidatorRemovalInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IValidatorManagerValidatorRemovalInitialized represents a ValidatorRemovalInitialized event raised by the IValidatorManager contract. -type IValidatorManagerValidatorRemovalInitialized struct { - ValidationID [32]byte - SetWeightMessageID [32]byte - Weight uint64 - EndTime *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterValidatorRemovalInitialized is a free log retrieval operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. -// -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_IValidatorManager *IValidatorManagerFilterer) FilterValidatorRemovalInitialized(opts *bind.FilterOpts, validationID [][32]byte, setWeightMessageID [][32]byte) (*IValidatorManagerValidatorRemovalInitializedIterator, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) - } - - logs, sub, err := _IValidatorManager.contract.FilterLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) - if err != nil { - return nil, err - } - return &IValidatorManagerValidatorRemovalInitializedIterator{contract: _IValidatorManager.contract, event: "ValidatorRemovalInitialized", logs: logs, sub: sub}, nil -} - -// WatchValidatorRemovalInitialized is a free log subscription operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. -// -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_IValidatorManager *IValidatorManagerFilterer) WatchValidatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *IValidatorManagerValidatorRemovalInitialized, validationID [][32]byte, setWeightMessageID [][32]byte) (event.Subscription, error) { - - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } - var setWeightMessageIDRule []interface{} - for _, setWeightMessageIDItem := range setWeightMessageID { - setWeightMessageIDRule = append(setWeightMessageIDRule, setWeightMessageIDItem) - } - - logs, sub, err := _IValidatorManager.contract.WatchLogs(opts, "ValidatorRemovalInitialized", validationIDRule, setWeightMessageIDRule) - 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(IValidatorManagerValidatorRemovalInitialized) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", 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 -} - -// ParseValidatorRemovalInitialized is a log parse operation binding the contract event 0xfbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42. -// -// Solidity: event ValidatorRemovalInitialized(bytes32 indexed validationID, bytes32 indexed setWeightMessageID, uint64 weight, uint256 endTime) -func (_IValidatorManager *IValidatorManagerFilterer) ParseValidatorRemovalInitialized(log types.Log) (*IValidatorManagerValidatorRemovalInitialized, error) { - event := new(IValidatorManagerValidatorRemovalInitialized) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidatorRemovalInitialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IValidatorManagerValidatorWeightUpdateIterator is returned from FilterValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for ValidatorWeightUpdate events raised by the IValidatorManager contract. -type IValidatorManagerValidatorWeightUpdateIterator struct { - Event *IValidatorManagerValidatorWeightUpdate // 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 *IValidatorManagerValidatorWeightUpdateIterator) 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(IValidatorManagerValidatorWeightUpdate) - 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(IValidatorManagerValidatorWeightUpdate) - 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 *IValidatorManagerValidatorWeightUpdateIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IValidatorManagerValidatorWeightUpdateIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IValidatorManagerValidatorWeightUpdate represents a ValidatorWeightUpdate event raised by the IValidatorManager contract. -type IValidatorManagerValidatorWeightUpdate struct { - ValidationID [32]byte - Nonce uint64 - Weight 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 weight, bytes32 setWeightMessageID) -func (_IValidatorManager *IValidatorManagerFilterer) FilterValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte, nonce []uint64) (*IValidatorManagerValidatorWeightUpdateIterator, 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 := _IValidatorManager.contract.FilterLogs(opts, "ValidatorWeightUpdate", validationIDRule, nonceRule) - if err != nil { - return nil, err - } - return &IValidatorManagerValidatorWeightUpdateIterator{contract: _IValidatorManager.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 weight, bytes32 setWeightMessageID) -func (_IValidatorManager *IValidatorManagerFilterer) WatchValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *IValidatorManagerValidatorWeightUpdate, 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 := _IValidatorManager.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(IValidatorManagerValidatorWeightUpdate) - if err := _IValidatorManager.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 weight, bytes32 setWeightMessageID) -func (_IValidatorManager *IValidatorManagerFilterer) ParseValidatorWeightUpdate(log types.Log) (*IValidatorManagerValidatorWeightUpdate, error) { - event := new(IValidatorManagerValidatorWeightUpdate) - if err := _IValidatorManager.contract.UnpackLog(event, "ValidatorWeightUpdate", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} From 42eac39b198c7c23f979bf5fd1e1c42cfde55fda Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Tue, 14 Jan 2025 15:24:45 -0600 Subject: [PATCH 07/29] acp-99 manager bindings --- scripts/abi_bindings.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/abi_bindings.sh b/scripts/abi_bindings.sh index b7a2d58f2..0f8604905 100755 --- a/scripts/abi_bindings.sh +++ b/scripts/abi_bindings.sh @@ -18,7 +18,7 @@ echo "ARCH set to $ARCH" DEFAULT_CONTRACT_LIST="TeleporterMessenger TeleporterRegistry ExampleERC20 ExampleRewardCalculator TestMessenger ValidatorSetSig NativeTokenStakingManager ERC20TokenStakingManager PoAValidatorManager TokenHome TokenRemote ERC20TokenHome ERC20TokenHomeUpgradeable ERC20TokenRemote ERC20TokenRemoteUpgradeable NativeTokenHome NativeTokenHomeUpgradeable NativeTokenRemote NativeTokenRemoteUpgradeable -WrappedNativeToken MockERC20SendAndCallReceiver MockNativeSendAndCallReceiver ExampleERC20Decimals IValidatorManager IPoSValidatorManager" +WrappedNativeToken MockERC20SendAndCallReceiver MockNativeSendAndCallReceiver ExampleERC20Decimals IValidatorManager IPoSValidatorManager ACP99Manager" PROXY_LIST="TransparentUpgradeableProxy ProxyAdmin" SUBNET_EVM_LIST="INativeMinter" From 9bafc159e6ae36ff619075bf535bd5e60444de96 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Tue, 14 Jan 2025 16:09:49 -0600 Subject: [PATCH 08/29] e2e passing --- tests/utils/validator_manager.go | 77 +++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 26 deletions(-) diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go index 6ce66a40e..fc872fe5c 100644 --- a/tests/utils/validator_manager.go +++ b/tests/utils/validator_manager.go @@ -25,6 +25,7 @@ import ( pwallet "github.com/ava-labs/avalanchego/wallet/chain/p/wallet" proxyadmin "github.com/ava-labs/icm-contracts/abi-bindings/go/ProxyAdmin" exampleerc20 "github.com/ava-labs/icm-contracts/abi-bindings/go/mocks/ExampleERC20" + acp99manager "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/ACP99Manager" erc20tokenstakingmanager "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/ERC20TokenStakingManager" examplerewardcalculator "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/ExampleRewardCalculator" nativetokenstakingmanager "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/NativeTokenStakingManager" @@ -278,14 +279,14 @@ func InitializeValidatorSet( ) []ids.ID { log.Println("Initializing validator set", "subnetID", l1Info.SubnetID) initialValidators := make([]warpMessage.SubnetToL1ConversionValidatorData, len(nodes)) - initialValidatorsABI := make([]ivalidatormanager.InitialValidator, len(nodes)) + initialValidatorsABI := make([]acp99manager.InitialValidator, len(nodes)) for i, node := range nodes { initialValidators[i] = warpMessage.SubnetToL1ConversionValidatorData{ NodeID: node.NodeID.Bytes(), BLSPublicKey: node.NodePoP.PublicKey, Weight: nodes[i].Weight, } - initialValidatorsABI[i] = ivalidatormanager.InitialValidator{ + initialValidatorsABI[i] = acp99manager.InitialValidator{ NodeID: node.NodeID.Bytes(), BlsPublicKey: node.NodePoP.PublicKey[:], Weight: nodes[i].Weight, @@ -298,7 +299,7 @@ func InitializeValidatorSet( ManagerAddress: validatorManagerAddress[:], Validators: initialValidators, } - l1ConversionDataABI := ivalidatormanager.ConversionData{ + l1ConversionDataABI := acp99manager.ConversionData{ SubnetID: l1Info.SubnetID, ValidatorManagerBlockchainID: l1Info.BlockchainID, ValidatorManagerAddress: validatorManagerAddress, @@ -323,11 +324,11 @@ func InitializeValidatorSet( l1ConversionSignedMessage, l1ConversionDataABI, ) - manager, err := ivalidatormanager.NewIValidatorManager(validatorManagerAddress, l1Info.RPCClient) + manager, err := acp99manager.NewACP99Manager(validatorManagerAddress, l1Info.RPCClient) Expect(err).Should(BeNil()) initialValidatorCreatedEvent, err := GetEventFromLogs( receipt.Logs, - manager.ParseInitialValidatorCreated, + manager.ParseRegisteredInitialValidator, ) Expect(err).Should(BeNil()) var validationIDs []ids.ID @@ -349,9 +350,9 @@ func DeliverL1Conversion( l1 interfaces.L1TestInfo, validatorManagerAddress common.Address, l1ConversionSignedMessage *avalancheWarp.Message, - l1ConversionData ivalidatormanager.ConversionData, + l1ConversionData acp99manager.ConversionData, ) *types.Receipt { - abi, err := ivalidatormanager.IValidatorManagerMetaData.GetAbi() + abi, err := acp99manager.ACP99ManagerMetaData.GetAbi() Expect(err).Should(BeNil()) callData, err := abi.Pack("initializeValidatorSet", l1ConversionData, uint32(0)) Expect(err).Should(BeNil()) @@ -377,6 +378,7 @@ func InitializeNativeValidatorRegistration( node Node, expiry uint64, stakingManager *nativetokenstakingmanager.NativeTokenStakingManager, + stakingManagerAddress common.Address, ) (*types.Receipt, ids.ID) { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) @@ -394,9 +396,11 @@ func InitializeNativeValidatorRegistration( ) Expect(err).Should(BeNil()) receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash()) + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1.RPCClient) + Expect(err).Should(BeNil()) registrationInitiatedEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodCreated, + acp99Manager.ParseInitiatedValidatorRegistration, ) Expect(err).Should(BeNil()) return receipt, ids.ID(registrationInitiatedEvent.ValidationID) @@ -438,9 +442,11 @@ func InitializeERC20ValidatorRegistration( ) Expect(err).Should(BeNil()) receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash()) + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1.RPCClient) + Expect(err).Should(BeNil()) registrationInitiatedEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodCreated, + acp99Manager.ParseInitiatedValidatorRegistration, ) Expect(err).Should(BeNil()) return receipt, ids.ID(registrationInitiatedEvent.ValidationID) @@ -453,6 +459,7 @@ func InitializePoAValidatorRegistration( node Node, expiry uint64, validatorManager *poavalidatormanager.PoAValidatorManager, + validatorManagerAddress common.Address, ) (*types.Receipt, ids.ID) { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) @@ -468,9 +475,11 @@ func InitializePoAValidatorRegistration( ) Expect(err).Should(BeNil()) receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash()) + acp99Manager, err := acp99manager.NewACP99Manager(validatorManagerAddress, l1.RPCClient) + Expect(err).Should(BeNil()) registrationInitiatedEvent, err := GetEventFromLogs( receipt.Logs, - validatorManager.ParseValidationPeriodCreated, + acp99Manager.ParseInitiatedValidatorRegistration, ) Expect(err).Should(BeNil()) return receipt, ids.ID(registrationInitiatedEvent.ValidationID) @@ -483,7 +492,7 @@ func CompleteValidatorRegistration( stakingManagerContractAddress common.Address, registrationSignedMessage *avalancheWarp.Message, ) *types.Receipt { - abi, err := ivalidatormanager.IValidatorManagerMetaData.GetAbi() + abi, err := acp99manager.ACP99ManagerMetaData.GetAbi() Expect(err).Should(BeNil()) callData, err := abi.Pack("completeValidatorRegistration", uint32(0)) Expect(err).Should(BeNil()) @@ -531,7 +540,7 @@ func InitializeAndCompleteNativeValidatorRegistration( l1Info interfaces.L1TestInfo, pChainInfo interfaces.L1TestInfo, stakingManager *nativetokenstakingmanager.NativeTokenStakingManager, - stakingManagerContractAddress common.Address, + stakingManagerAddress common.Address, expiry uint64, node Node, pchainWallet pwallet.Wallet, @@ -551,6 +560,7 @@ func InitializeAndCompleteNativeValidatorRegistration( node, expiry, stakingManager, + stakingManagerAddress, ) // Gather subnet-evm Warp signatures for the RegisterL1ValidatorMessage & relay to the P-Chain @@ -584,13 +594,15 @@ func InitializeAndCompleteNativeValidatorRegistration( ctx, fundedKey, l1Info, - stakingManagerContractAddress, + stakingManagerAddress, registrationSignedMessage, ) // Check that the validator is registered in the staking contract + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) registrationEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodRegistered, + acp99Manager.ParseCompletedValidatorRegistration, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -666,9 +678,11 @@ func InitializeAndCompleteERC20ValidatorRegistration( registrationSignedMessage, ) // Check that the validator is registered in the staking contract + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) registrationEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodRegistered, + acp99Manager.ParseCompletedValidatorRegistration, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -698,6 +712,7 @@ func InitializeAndCompletePoAValidatorRegistration( node, expiry, validatorManager, + validatorManagerAddress, ) // Gather subnet-evm Warp signatures for the RegisterL1ValidatorMessage & relay to the P-Chain @@ -734,9 +749,11 @@ func InitializeAndCompletePoAValidatorRegistration( registrationSignedMessage, ) // Check that the validator is registered in the staking contract + acp99Manager, err := acp99manager.NewACP99Manager(validatorManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) registrationEvent, err := GetEventFromLogs( receipt.Logs, - validatorManager.ParseValidationPeriodRegistered, + acp99Manager.ParseCompletedValidatorRegistration, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -898,9 +915,9 @@ func CompleteEndValidation( stakingManagerContractAddress common.Address, registrationSignedMessage *avalancheWarp.Message, ) *types.Receipt { - abi, err := ivalidatormanager.IValidatorManagerMetaData.GetAbi() + abi, err := acp99manager.ACP99ManagerMetaData.GetAbi() Expect(err).Should(BeNil()) - callData, err := abi.Pack("completeEndValidation", uint32(0)) + callData, err := abi.Pack("completeValidatorRemoval", uint32(0)) Expect(err).Should(BeNil()) return CallWarpReceiver( ctx, @@ -1065,9 +1082,11 @@ func InitializeAndCompleteEndInitialPoSValidation( stakingManager, validationID, ) + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) validatorRemovalEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidatorRemovalInitialized, + acp99Manager.ParseInitiatedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(validatorRemovalEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1113,7 +1132,7 @@ func InitializeAndCompleteEndInitialPoSValidation( // Check that the validator is has been delisted from the staking contract validationEndedEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodEnded, + acp99Manager.ParseCompletedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(validationEndedEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1162,9 +1181,11 @@ func InitializeAndCompleteEndPoSValidation( ) } + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) validatorRemovalEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidatorRemovalInitialized, + acp99Manager.ParseInitiatedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(validatorRemovalEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1210,7 +1231,7 @@ func InitializeAndCompleteEndPoSValidation( // Check that the validator is has been delisted from the staking contract registrationEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodEnded, + acp99Manager.ParseCompletedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1240,9 +1261,11 @@ func InitializeAndCompleteEndInitialPoAValidation( stakingManager, validationID, ) + acp99Manager, err := acp99manager.NewACP99Manager(stakingManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) validatorRemovalEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidatorRemovalInitialized, + acp99Manager.ParseInitiatedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(validatorRemovalEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1288,7 +1311,7 @@ func InitializeAndCompleteEndInitialPoAValidation( // Check that the validator is has been delisted from the staking contract validationEndedEvent, err := GetEventFromLogs( receipt.Logs, - stakingManager.ParseValidationPeriodEnded, + acp99Manager.ParseCompletedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(validationEndedEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1315,9 +1338,11 @@ func InitializeAndCompleteEndPoAValidation( validatorManager, validationID, ) + acp99Manager, err := acp99manager.NewACP99Manager(validatorManagerAddress, l1Info.RPCClient) + Expect(err).Should(BeNil()) validatorRemovalEvent, err := GetEventFromLogs( receipt.Logs, - validatorManager.ParseValidatorRemovalInitialized, + acp99Manager.ParseInitiatedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(validatorRemovalEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -1355,7 +1380,7 @@ func InitializeAndCompleteEndPoAValidation( // Check that the validator is has been delisted from the staking contract registrationEvent, err := GetEventFromLogs( receipt.Logs, - validatorManager.ParseValidationPeriodEnded, + acp99Manager.ParseCompletedValidatorRemoval, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) From cd8499ce5a612e9651fda25a19a4acb91b1d55ea Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Tue, 14 Jan 2025 16:25:43 -0600 Subject: [PATCH 09/29] acp-99 manager bindings --- .../ACP99Manager/ACP99Manager.go | 1409 +++++++++++++++++ 1 file changed, 1409 insertions(+) create mode 100644 abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go diff --git a/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go b/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go new file mode 100644 index 000000000..05e7f57b6 --- /dev/null +++ b/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go @@ -0,0 +1,1409 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package acp99manager + +import ( + "errors" + "math/big" + "strings" + + "github.com/ava-labs/subnet-evm/accounts/abi" + "github.com/ava-labs/subnet-evm/accounts/abi/bind" + "github.com/ava-labs/subnet-evm/core/types" + "github.com/ava-labs/subnet-evm/interfaces" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = interfaces.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ConversionData is an auto generated low-level Go binding around an user-defined struct. +type ConversionData struct { + SubnetID [32]byte + ValidatorManagerBlockchainID [32]byte + ValidatorManagerAddress common.Address + InitialValidators []InitialValidator +} + +// InitialValidator is an auto generated low-level Go binding around an user-defined struct. +type InitialValidator struct { + NodeID []byte + BlsPublicKey []byte + Weight uint64 +} + +// Validator is an auto generated low-level Go binding around an user-defined struct. +type Validator struct { + Status uint8 + NodeID []byte + StartingWeight uint64 + SentNonce uint64 + ReceivedNonce uint64 + Weight uint64 + StartTime uint64 + EndTime uint64 +} + +// ACP99ManagerMetaData contains all meta data concerning the ACP99Manager contract. +var ACP99ManagerMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"validator\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messsageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", +} + +// ACP99ManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use ACP99ManagerMetaData.ABI instead. +var ACP99ManagerABI = ACP99ManagerMetaData.ABI + +// ACP99Manager is an auto generated Go binding around an Ethereum contract. +type ACP99Manager struct { + ACP99ManagerCaller // Read-only binding to the contract + ACP99ManagerTransactor // Write-only binding to the contract + ACP99ManagerFilterer // Log filterer for contract events +} + +// ACP99ManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type ACP99ManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ACP99ManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ACP99ManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ACP99ManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ACP99ManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ACP99ManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ACP99ManagerSession struct { + Contract *ACP99Manager // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ACP99ManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ACP99ManagerCallerSession struct { + Contract *ACP99ManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ACP99ManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ACP99ManagerTransactorSession struct { + Contract *ACP99ManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ACP99ManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type ACP99ManagerRaw struct { + Contract *ACP99Manager // Generic contract binding to access the raw methods on +} + +// ACP99ManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ACP99ManagerCallerRaw struct { + Contract *ACP99ManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// ACP99ManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ACP99ManagerTransactorRaw struct { + Contract *ACP99ManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewACP99Manager creates a new instance of ACP99Manager, bound to a specific deployed contract. +func NewACP99Manager(address common.Address, backend bind.ContractBackend) (*ACP99Manager, error) { + contract, err := bindACP99Manager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ACP99Manager{ACP99ManagerCaller: ACP99ManagerCaller{contract: contract}, ACP99ManagerTransactor: ACP99ManagerTransactor{contract: contract}, ACP99ManagerFilterer: ACP99ManagerFilterer{contract: contract}}, nil +} + +// NewACP99ManagerCaller creates a new read-only instance of ACP99Manager, bound to a specific deployed contract. +func NewACP99ManagerCaller(address common.Address, caller bind.ContractCaller) (*ACP99ManagerCaller, error) { + contract, err := bindACP99Manager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ACP99ManagerCaller{contract: contract}, nil +} + +// NewACP99ManagerTransactor creates a new write-only instance of ACP99Manager, bound to a specific deployed contract. +func NewACP99ManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*ACP99ManagerTransactor, error) { + contract, err := bindACP99Manager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ACP99ManagerTransactor{contract: contract}, nil +} + +// NewACP99ManagerFilterer creates a new log filterer instance of ACP99Manager, bound to a specific deployed contract. +func NewACP99ManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*ACP99ManagerFilterer, error) { + contract, err := bindACP99Manager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ACP99ManagerFilterer{contract: contract}, nil +} + +// bindACP99Manager binds a generic wrapper to an already deployed contract. +func bindACP99Manager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ACP99ManagerMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ACP99Manager *ACP99ManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ACP99Manager.Contract.ACP99ManagerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ACP99Manager *ACP99ManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ACP99Manager.Contract.ACP99ManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ACP99Manager *ACP99ManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ACP99Manager.Contract.ACP99ManagerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ACP99Manager *ACP99ManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ACP99Manager.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ACP99Manager *ACP99ManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ACP99Manager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ACP99Manager *ACP99ManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ACP99Manager.Contract.contract.Transact(opts, method, params...) +} + +// GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. +// +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64) validator) +func (_ACP99Manager *ACP99ManagerCaller) GetValidator(opts *bind.CallOpts, validationID [32]byte) (Validator, error) { + var out []interface{} + err := _ACP99Manager.contract.Call(opts, &out, "getValidator", validationID) + + if err != nil { + return *new(Validator), err + } + + out0 := *abi.ConvertType(out[0], new(Validator)).(*Validator) + + return out0, err + +} + +// GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. +// +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64) validator) +func (_ACP99Manager *ACP99ManagerSession) GetValidator(validationID [32]byte) (Validator, error) { + return _ACP99Manager.Contract.GetValidator(&_ACP99Manager.CallOpts, validationID) +} + +// GetValidator is a free data retrieval call binding the contract method 0xd5f20ff6. +// +// Solidity: function getValidator(bytes32 validationID) view returns((uint8,bytes,uint64,uint64,uint64,uint64,uint64,uint64) validator) +func (_ACP99Manager *ACP99ManagerCallerSession) GetValidator(validationID [32]byte) (Validator, error) { + return _ACP99Manager.Contract.GetValidator(&_ACP99Manager.CallOpts, validationID) +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64 weight) +func (_ACP99Manager *ACP99ManagerCaller) L1TotalWeight(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ACP99Manager.contract.Call(opts, &out, "l1TotalWeight") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64 weight) +func (_ACP99Manager *ACP99ManagerSession) L1TotalWeight() (uint64, error) { + return _ACP99Manager.Contract.L1TotalWeight(&_ACP99Manager.CallOpts) +} + +// L1TotalWeight is a free data retrieval call binding the contract method 0xbb0b1938. +// +// Solidity: function l1TotalWeight() view returns(uint64 weight) +func (_ACP99Manager *ACP99ManagerCallerSession) L1TotalWeight() (uint64, error) { + return _ACP99Manager.Contract.L1TotalWeight(&_ACP99Manager.CallOpts) +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32 subnetID) +func (_ACP99Manager *ACP99ManagerCaller) SubnetID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ACP99Manager.contract.Call(opts, &out, "subnetID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32 subnetID) +func (_ACP99Manager *ACP99ManagerSession) SubnetID() ([32]byte, error) { + return _ACP99Manager.Contract.SubnetID(&_ACP99Manager.CallOpts) +} + +// SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. +// +// Solidity: function subnetID() view returns(bytes32 subnetID) +func (_ACP99Manager *ACP99ManagerCallerSession) SubnetID() ([32]byte, error) { + return _ACP99Manager.Contract.SubnetID(&_ACP99Manager.CallOpts) +} + +// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. +// +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32 validationID) +func (_ACP99Manager *ACP99ManagerTransactor) CompleteValidatorRegistration(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.contract.Transact(opts, "completeValidatorRegistration", messageIndex) +} + +// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. +// +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32 validationID) +func (_ACP99Manager *ACP99ManagerSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.CompleteValidatorRegistration(&_ACP99Manager.TransactOpts, messageIndex) +} + +// CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. +// +// Solidity: function completeValidatorRegistration(uint32 messageIndex) returns(bytes32 validationID) +func (_ACP99Manager *ACP99ManagerTransactorSession) CompleteValidatorRegistration(messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.CompleteValidatorRegistration(&_ACP99Manager.TransactOpts, messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32 validationID) +func (_ACP99Manager *ACP99ManagerTransactor) CompleteValidatorRemoval(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.contract.Transact(opts, "completeValidatorRemoval", messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32 validationID) +func (_ACP99Manager *ACP99ManagerSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.CompleteValidatorRemoval(&_ACP99Manager.TransactOpts, messageIndex) +} + +// CompleteValidatorRemoval is a paid mutator transaction binding the contract method 0x9681d940. +// +// Solidity: function completeValidatorRemoval(uint32 messageIndex) returns(bytes32 validationID) +func (_ACP99Manager *ACP99ManagerTransactorSession) CompleteValidatorRemoval(messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.CompleteValidatorRemoval(&_ACP99Manager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32 validationID, uint64 nonce) +func (_ACP99Manager *ACP99ManagerTransactor) CompleteValidatorWeightUpdate(opts *bind.TransactOpts, messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.contract.Transact(opts, "completeValidatorWeightUpdate", messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32 validationID, uint64 nonce) +func (_ACP99Manager *ACP99ManagerSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.CompleteValidatorWeightUpdate(&_ACP99Manager.TransactOpts, messageIndex) +} + +// CompleteValidatorWeightUpdate is a paid mutator transaction binding the contract method 0xce161f14. +// +// Solidity: function completeValidatorWeightUpdate(uint32 messageIndex) returns(bytes32 validationID, uint64 nonce) +func (_ACP99Manager *ACP99ManagerTransactorSession) CompleteValidatorWeightUpdate(messageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.CompleteValidatorWeightUpdate(&_ACP99Manager.TransactOpts, messageIndex) +} + +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() +func (_ACP99Manager *ACP99ManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.contract.Transact(opts, "initializeValidatorSet", conversionData, messsageIndex) +} + +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() +func (_ACP99Manager *ACP99ManagerSession) InitializeValidatorSet(conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.InitializeValidatorSet(&_ACP99Manager.TransactOpts, conversionData, messsageIndex) +} + +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messsageIndex) returns() +func (_ACP99Manager *ACP99ManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messsageIndex uint32) (*types.Transaction, error) { + return _ACP99Manager.Contract.InitializeValidatorSet(&_ACP99Manager.TransactOpts, conversionData, messsageIndex) +} + +// ACP99ManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the ACP99Manager contract. +type ACP99ManagerCompletedValidatorRegistrationIterator struct { + Event *ACP99ManagerCompletedValidatorRegistration // 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 *ACP99ManagerCompletedValidatorRegistrationIterator) 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(ACP99ManagerCompletedValidatorRegistration) + 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(ACP99ManagerCompletedValidatorRegistration) + 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 *ACP99ManagerCompletedValidatorRegistrationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerCompletedValidatorRegistrationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the ACP99Manager contract. +type ACP99ManagerCompletedValidatorRegistration struct { + ValidationID [32]byte + NodeID []byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerCompletedValidatorRegistrationIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerCompletedValidatorRegistrationIterator{contract: _ACP99Manager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil +} + +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ACP99ManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) + 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(ACP99ManagerCompletedValidatorRegistration) + if err := _ACP99Manager.contract.UnpackLog(event, "CompletedValidatorRegistration", 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 +} + +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*ACP99ManagerCompletedValidatorRegistration, error) { + event := new(ACP99ManagerCompletedValidatorRegistration) + if err := _ACP99Manager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ACP99ManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the ACP99Manager contract. +type ACP99ManagerCompletedValidatorRemovalIterator struct { + Event *ACP99ManagerCompletedValidatorRemoval // 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 *ACP99ManagerCompletedValidatorRemovalIterator) 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(ACP99ManagerCompletedValidatorRemoval) + 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(ACP99ManagerCompletedValidatorRemoval) + 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 *ACP99ManagerCompletedValidatorRemovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerCompletedValidatorRemovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the ACP99Manager contract. +type ACP99ManagerCompletedValidatorRemoval struct { + ValidationID [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ACP99Manager *ACP99ManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerCompletedValidatorRemovalIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerCompletedValidatorRemovalIterator{contract: _ACP99Manager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil +} + +// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ACP99Manager *ACP99ManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *ACP99ManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) + 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(ACP99ManagerCompletedValidatorRemoval) + if err := _ACP99Manager.contract.UnpackLog(event, "CompletedValidatorRemoval", 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 +} + +// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ACP99Manager *ACP99ManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*ACP99ManagerCompletedValidatorRemoval, error) { + event := new(ACP99ManagerCompletedValidatorRemoval) + if err := _ACP99Manager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ACP99ManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the ACP99Manager contract. +type ACP99ManagerCompletedValidatorWeightUpdateIterator struct { + Event *ACP99ManagerCompletedValidatorWeightUpdate // 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 *ACP99ManagerCompletedValidatorWeightUpdateIterator) 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(ACP99ManagerCompletedValidatorWeightUpdate) + 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(ACP99ManagerCompletedValidatorWeightUpdate) + 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 *ACP99ManagerCompletedValidatorWeightUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerCompletedValidatorWeightUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the ACP99Manager contract. +type ACP99ManagerCompletedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerCompletedValidatorWeightUpdateIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerCompletedValidatorWeightUpdateIterator{contract: _ACP99Manager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil +} + +// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ACP99ManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + 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(ACP99ManagerCompletedValidatorWeightUpdate) + if err := _ACP99Manager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", 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 +} + +// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*ACP99ManagerCompletedValidatorWeightUpdate, error) { + event := new(ACP99ManagerCompletedValidatorWeightUpdate) + if err := _ACP99Manager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ACP99ManagerInitiatedValidatorRegistrationIterator is returned from FilterInitiatedValidatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRegistration events raised by the ACP99Manager contract. +type ACP99ManagerInitiatedValidatorRegistrationIterator struct { + Event *ACP99ManagerInitiatedValidatorRegistration // 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 *ACP99ManagerInitiatedValidatorRegistrationIterator) 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(ACP99ManagerInitiatedValidatorRegistration) + 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(ACP99ManagerInitiatedValidatorRegistration) + 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 *ACP99ManagerInitiatedValidatorRegistrationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerInitiatedValidatorRegistrationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerInitiatedValidatorRegistration represents a InitiatedValidatorRegistration event raised by the ACP99Manager contract. +type ACP99ManagerInitiatedValidatorRegistration struct { + ValidationID [32]byte + NodeID []byte + RegistrationMessageID [32]byte + RegistrationExpiry uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerInitiatedValidatorRegistrationIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerInitiatedValidatorRegistrationIterator{contract: _ACP99Manager.contract, event: "InitiatedValidatorRegistration", logs: logs, sub: sub}, nil +} + +// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ACP99ManagerInitiatedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule) + 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(ACP99ManagerInitiatedValidatorRegistration) + if err := _ACP99Manager.contract.UnpackLog(event, "InitiatedValidatorRegistration", 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 +} + +// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) ParseInitiatedValidatorRegistration(log types.Log) (*ACP99ManagerInitiatedValidatorRegistration, error) { + event := new(ACP99ManagerInitiatedValidatorRegistration) + if err := _ACP99Manager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ACP99ManagerInitiatedValidatorRemovalIterator is returned from FilterInitiatedValidatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedValidatorRemoval events raised by the ACP99Manager contract. +type ACP99ManagerInitiatedValidatorRemovalIterator struct { + Event *ACP99ManagerInitiatedValidatorRemoval // 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 *ACP99ManagerInitiatedValidatorRemovalIterator) 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(ACP99ManagerInitiatedValidatorRemoval) + 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(ACP99ManagerInitiatedValidatorRemoval) + 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 *ACP99ManagerInitiatedValidatorRemovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerInitiatedValidatorRemovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerInitiatedValidatorRemoval represents a InitiatedValidatorRemoval event raised by the ACP99Manager contract. +type ACP99ManagerInitiatedValidatorRemoval struct { + ValidationID [32]byte + ValidatorWeightMessageID [32]byte + Weight uint64 + EndTime uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitiatedValidatorRemoval is a free log retrieval operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. +// +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_ACP99Manager *ACP99ManagerFilterer) FilterInitiatedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerInitiatedValidatorRemovalIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "InitiatedValidatorRemoval", validationIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerInitiatedValidatorRemovalIterator{contract: _ACP99Manager.contract, event: "InitiatedValidatorRemoval", logs: logs, sub: sub}, nil +} + +// WatchInitiatedValidatorRemoval is a free log subscription operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. +// +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_ACP99Manager *ACP99ManagerFilterer) WatchInitiatedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *ACP99ManagerInitiatedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "InitiatedValidatorRemoval", validationIDRule) + 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(ACP99ManagerInitiatedValidatorRemoval) + if err := _ACP99Manager.contract.UnpackLog(event, "InitiatedValidatorRemoval", 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 +} + +// ParseInitiatedValidatorRemoval is a log parse operation binding the contract event 0xbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273. +// +// Solidity: event InitiatedValidatorRemoval(bytes32 indexed validationID, bytes32 validatorWeightMessageID, uint64 weight, uint64 endTime) +func (_ACP99Manager *ACP99ManagerFilterer) ParseInitiatedValidatorRemoval(log types.Log) (*ACP99ManagerInitiatedValidatorRemoval, error) { + event := new(ACP99ManagerInitiatedValidatorRemoval) + if err := _ACP99Manager.contract.UnpackLog(event, "InitiatedValidatorRemoval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ACP99ManagerInitiatedValidatorWeightUpdateIterator is returned from FilterInitiatedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for InitiatedValidatorWeightUpdate events raised by the ACP99Manager contract. +type ACP99ManagerInitiatedValidatorWeightUpdateIterator struct { + Event *ACP99ManagerInitiatedValidatorWeightUpdate // 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 *ACP99ManagerInitiatedValidatorWeightUpdateIterator) 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(ACP99ManagerInitiatedValidatorWeightUpdate) + 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(ACP99ManagerInitiatedValidatorWeightUpdate) + 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 *ACP99ManagerInitiatedValidatorWeightUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerInitiatedValidatorWeightUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerInitiatedValidatorWeightUpdate represents a InitiatedValidatorWeightUpdate event raised by the ACP99Manager contract. +type ACP99ManagerInitiatedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + WeightUpdateMessageID [32]byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitiatedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. +// +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) FilterInitiatedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerInitiatedValidatorWeightUpdateIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerInitiatedValidatorWeightUpdateIterator{contract: _ACP99Manager.contract, event: "InitiatedValidatorWeightUpdate", logs: logs, sub: sub}, nil +} + +// WatchInitiatedValidatorWeightUpdate is a free log subscription operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. +// +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) WatchInitiatedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ACP99ManagerInitiatedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "InitiatedValidatorWeightUpdate", validationIDRule) + 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(ACP99ManagerInitiatedValidatorWeightUpdate) + if err := _ACP99Manager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", 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 +} + +// ParseInitiatedValidatorWeightUpdate is a log parse operation binding the contract event 0x6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d3. +// +// Solidity: event InitiatedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) ParseInitiatedValidatorWeightUpdate(log types.Log) (*ACP99ManagerInitiatedValidatorWeightUpdate, error) { + event := new(ACP99ManagerInitiatedValidatorWeightUpdate) + if err := _ACP99Manager.contract.UnpackLog(event, "InitiatedValidatorWeightUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ACP99ManagerRegisteredInitialValidatorIterator is returned from FilterRegisteredInitialValidator and is used to iterate over the raw logs and unpacked data for RegisteredInitialValidator events raised by the ACP99Manager contract. +type ACP99ManagerRegisteredInitialValidatorIterator struct { + Event *ACP99ManagerRegisteredInitialValidator // 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 *ACP99ManagerRegisteredInitialValidatorIterator) 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(ACP99ManagerRegisteredInitialValidator) + 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(ACP99ManagerRegisteredInitialValidator) + 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 *ACP99ManagerRegisteredInitialValidatorIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ACP99ManagerRegisteredInitialValidatorIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ACP99ManagerRegisteredInitialValidator represents a RegisteredInitialValidator event raised by the ACP99Manager contract. +type ACP99ManagerRegisteredInitialValidator struct { + ValidationID [32]byte + NodeID []byte + Weight uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerRegisteredInitialValidatorIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule) + if err != nil { + return nil, err + } + return &ACP99ManagerRegisteredInitialValidatorIterator{contract: _ACP99Manager.contract, event: "RegisteredInitialValidator", logs: logs, sub: sub}, nil +} + +// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *ACP99ManagerRegisteredInitialValidator, validationID [][32]byte) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule) + 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(ACP99ManagerRegisteredInitialValidator) + if err := _ACP99Manager.contract.UnpackLog(event, "RegisteredInitialValidator", 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 +} + +// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) ParseRegisteredInitialValidator(log types.Log) (*ACP99ManagerRegisteredInitialValidator, error) { + event := new(ACP99ManagerRegisteredInitialValidator) + if err := _ACP99Manager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} From 07310b7668b63ba7bba3e35c297d17b114d2ad88 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Tue, 14 Jan 2025 16:25:55 -0600 Subject: [PATCH 10/29] lint --- contracts/validator-manager/ACP99Manager.sol | 98 +++++++++---------- .../validator-manager/PoAValidatorManager.sol | 9 +- .../validator-manager/PoSValidatorManager.sol | 29 +++--- .../validator-manager/ValidatorManager.sol | 62 +++++++----- .../interfaces/IValidatorManager.sol | 2 +- .../NativeTokenStakingManagerTests.t.sol | 1 - .../tests/PoAValidatorManagerTests.t.sol | 2 - .../tests/PoSValidatorManagerTests.t.sol | 20 ++-- .../tests/ValidatorManagerTests.t.sol | 27 ++--- 9 files changed, 126 insertions(+), 124 deletions(-) diff --git a/contracts/validator-manager/ACP99Manager.sol b/contracts/validator-manager/ACP99Manager.sol index 8b22828b9..a7af81d43 100644 --- a/contracts/validator-manager/ACP99Manager.sol +++ b/contracts/validator-manager/ACP99Manager.sol @@ -75,9 +75,7 @@ struct Validator { */ abstract contract ACP99Manager { /// @notice Emitted when an initial validator is registered. - event RegisteredInitialValidator( - bytes32 indexed validationID, bytes nodeID, uint64 weight - ); + event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight); /// @notice Emitted when a validator registration to the L1 is initiated. event InitiatedValidatorRegistration( bytes32 indexed validationID, @@ -87,9 +85,7 @@ abstract contract ACP99Manager { uint64 weight ); /// @notice Emitted when a validator registration to the L1 is completed. - event CompletedValidatorRegistration( - bytes32 indexed validationID, bytes nodeID, uint64 weight - ); + event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight); /// @notice Emitted when removal of an L1 validator is initiated. event InitiatedValidatorRemoval( bytes32 indexed validationID, @@ -98,46 +94,41 @@ abstract contract ACP99Manager { uint64 endTime ); /// @notice Emitted when removal of an L1 validator is completed. - event CompletedValidatorRemoval( - bytes32 indexed validationID - ); + event CompletedValidatorRemoval(bytes32 indexed validationID); /// @notice Emitted when a validator weight update is initiated. event InitiatedValidatorWeightUpdate( - bytes32 indexed validationID, - uint64 nonce, - bytes32 weightUpdateMessageID, - uint64 weight + bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight ); /// @notice Emitted when a validator weight update is completed. - event CompletedValidatorWeightUpdate( - bytes32 indexed validationID, uint64 nonce, uint64 weight - ); + event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight); /// @notice Returns the SubnetID of the L1 tied to this manager - function subnetID() virtual public view returns (bytes32 subnetID); + function subnetID() public view virtual returns (bytes32 subnetID); /// @notice Returns the validator details for a given validation ID. - function getValidator( - bytes32 validationID - ) virtual public view returns (Validator memory validator); + function getValidator(bytes32 validationID) + public + view + virtual + returns (Validator memory validator); /// @notice Returns the total weight of the current L1 validator set. - function l1TotalWeight() virtual public view returns (uint64 weight); + function l1TotalWeight() public view virtual returns (uint64 weight); /** * @notice Verifies and sets the initial validator set for the chain by consuming a * SubnetToL1ConversionMessage from the P-Chain. - * + * * Emits a {RegisteredInitialValidator} event for each initial validator in {conversionData}. * * @param conversionData The Subnet conversion message data used to recompute and verify against the ConversionID. - * @param messsageIndex The index that contains the SubnetToL1ConversionMessage ICM message containing the + * @param messsageIndex The index that contains the SubnetToL1ConversionMessage ICM message containing the * ConversionID to be verified against the provided {conversionData}. */ function initializeValidatorSet( ConversionData calldata conversionData, uint32 messsageIndex - ) virtual public; + ) public virtual; /** * @notice Initiates validator registration by issuing a RegisterL1ValidatorMessage. The validator should @@ -160,7 +151,7 @@ abstract contract ACP99Manager { PChainOwner memory remainingBalanceOwner, PChainOwner memory disableOwner, uint64 weight - ) virtual internal returns (bytes32 validationID); + ) internal virtual returns (bytes32 validationID); /** * @notice Completes the validator registration process by returning an acknowledgement of the registration of a @@ -171,33 +162,33 @@ abstract contract ACP99Manager { * @param messageIndex The index of the L1ValidatorRegistrationMessage to be received providing the acknowledgement. * @return validationID The ID of the registered validator. */ - function completeValidatorRegistration( - uint32 messageIndex - ) virtual public returns (bytes32 validationID); + function completeValidatorRegistration(uint32 messageIndex) + public + virtual + returns (bytes32 validationID); /** - * @notice Initiates validator removal by issuing a L1ValidatorWeightMessage with the weight set to zero. - * The validator should be considered inactive as soon as this function is called. - * - * Emits an {InitiatedValidatorRemoval} on success. - * - * @param validationID The ID of the validator to remove. - */ - function _initiateValidatorRemoval( - bytes32 validationID - ) virtual internal; + * @notice Initiates validator removal by issuing a L1ValidatorWeightMessage with the weight set to zero. + * The validator should be considered inactive as soon as this function is called. + * + * Emits an {InitiatedValidatorRemoval} on success. + * + * @param validationID The ID of the validator to remove. + */ + function _initiateValidatorRemoval(bytes32 validationID) internal virtual; /** - * @notice Completes validator removal by consuming an RegisterL1ValidatorMessage from the P-Chain acknowledging - * that the validator has been removed. - * - * Emits a {CompletedValidatorRemoval} on success. - * - * @param messageIndex The index of the RegisterL1ValidatorMessage. - */ - function completeValidatorRemoval( - uint32 messageIndex - ) virtual public returns (bytes32 validationID); + * @notice Completes validator removal by consuming an RegisterL1ValidatorMessage from the P-Chain acknowledging + * that the validator has been removed. + * + * Emits a {CompletedValidatorRemoval} on success. + * + * @param messageIndex The index of the RegisterL1ValidatorMessage. + */ + function completeValidatorRemoval(uint32 messageIndex) + public + virtual + returns (bytes32 validationID); /** * @notice Initiates validator weight update by issuing a L1ValidatorWeightMessage with a nonzero weight. @@ -213,7 +204,7 @@ abstract contract ACP99Manager { function _initiateValidatorWeightUpdate( bytes32 validationID, uint64 weight - ) virtual internal returns (uint64 nonce, bytes32 messageID); + ) internal virtual returns (uint64 nonce, bytes32 messageID); /** * @notice Completes the validator weight update process by consuming a L1ValidatorWeightMessage from the P-Chain @@ -225,7 +216,8 @@ abstract contract ACP99Manager { * @return validationID The ID of the validator, retreived from the L1ValidatorWeightMessage. * @return nonce The nonce of the validator, retreived from the L1ValidatorWeightMessage. */ - function completeValidatorWeightUpdate( - uint32 messageIndex - ) virtual public returns (bytes32 validationID, uint64 nonce); -} \ No newline at end of file + function completeValidatorWeightUpdate(uint32 messageIndex) + public + virtual + returns (bytes32 validationID, uint64 nonce); +} diff --git a/contracts/validator-manager/PoAValidatorManager.sol b/contracts/validator-manager/PoAValidatorManager.sol index 23fc72408..2f6ffa823 100644 --- a/contracts/validator-manager/PoAValidatorManager.sol +++ b/contracts/validator-manager/PoAValidatorManager.sol @@ -76,8 +76,13 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU /** * @notice See {ACP99Manager-completeValidatorRemoval}. */ - function completeValidatorRemoval(uint32 messageIndex) virtual override public returns (bytes32) { - (bytes32 validationID,) = _completeEndValidation(messageIndex); + function completeValidatorRemoval(uint32 messageIndex) + public + virtual + override + returns (bytes32) + { + (bytes32 validationID,) = _completeEndValidation(messageIndex); return validationID; } } diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index c49ec2a86..6c1be7c06 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -14,13 +14,8 @@ import { PoSValidatorInfo, PoSValidatorManagerSettings } from "./interfaces/IPoSValidatorManager.sol"; -import { - ValidatorRegistrationInput -} from "./interfaces/IValidatorManager.sol"; -import { - Validator, - ValidatorStatus -} from "./ACP99Manager.sol"; +import {ValidatorRegistrationInput} from "./interfaces/IValidatorManager.sol"; +import {Validator, ValidatorStatus} from "./ACP99Manager.sol"; import {IRewardCalculator} from "./interfaces/IRewardCalculator.sol"; import {WarpMessage} from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/IWarpMessenger.sol"; @@ -380,7 +375,13 @@ abstract contract PoSValidatorManager is /** * @notice See {ACP99Manager-completeValidatorRemoval}. */ - function completeValidatorRemoval(uint32 messageIndex) virtual override public nonReentrant returns (bytes32) { + function completeValidatorRemoval(uint32 messageIndex) + public + virtual + override + nonReentrant + returns (bytes32) + { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); (bytes32 validationID, Validator memory validator) = _completeEndValidation(messageIndex); @@ -558,7 +559,8 @@ abstract contract PoSValidatorManager is revert MaxWeightExceeded(newValidatorWeight); } - (uint64 nonce, bytes32 messageID) = _initiateValidatorWeightUpdate(validationID, newValidatorWeight); + (uint64 nonce, bytes32 messageID) = + _initiateValidatorWeightUpdate(validationID, newValidatorWeight); bytes32 delegationID = keccak256(abi.encodePacked(validationID, nonce)); @@ -611,7 +613,8 @@ abstract contract PoSValidatorManager is // If we've already received a weight update with a nonce greater than the delegation's starting nonce, // then there's no requirement to include an ICM message in this function call. if (validator.receivedNonce < delegator.startingNonce) { - (bytes32 messageValidationID, uint64 nonce) = completeValidatorWeightUpdate(messageIndex); + (bytes32 messageValidationID, uint64 nonce) = + completeValidatorWeightUpdate(messageIndex); if (validationID != messageValidationID) { revert InvalidValidationID(delegator.validationID); } @@ -620,7 +623,6 @@ abstract contract PoSValidatorManager is } } - // Update the delegation status $._delegatorStakes[delegationID].status = DelegatorStatus.Active; $._delegatorStakes[delegationID].startTime = uint64(block.timestamp); @@ -869,7 +871,10 @@ abstract contract PoSValidatorManager is Validator memory validator = getValidator(delegator.validationID); // We only expect an ICM message if we haven't received a weight update with a nonce greater than the delegation's ending nonce - if (getValidator(delegator.validationID).status != ValidatorStatus.Completed && validator.receivedNonce < delegator.endingNonce) { + if ( + getValidator(delegator.validationID).status != ValidatorStatus.Completed + && validator.receivedNonce < delegator.endingNonce + ) { (bytes32 validationID, uint64 nonce) = completeValidatorWeightUpdate(messageIndex); if (delegator.validationID != validationID) { revert InvalidValidationID(validationID); diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 583c1d82b..4bd80533f 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -9,8 +9,7 @@ import {ValidatorMessages} from "./ValidatorMessages.sol"; import { IValidatorManager, ValidatorChurnPeriod, - ValidatorManagerSettings, - ValidatorRegistrationInput + ValidatorManagerSettings } from "./interfaces/IValidatorManager.sol"; import { ACP99Manager, @@ -34,7 +33,12 @@ import {Initializable} from * * @custom:security-contact https://github.com/ava-labs/icm-contracts/blob/main/SECURITY.md */ -abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValidatorManager, ACP99Manager { +abstract contract ValidatorManager is + Initializable, + ContextUpgradeable, + IValidatorManager, + ACP99Manager +{ // solhint-disable private-vars-leading-underscore /// @custom:storage-location erc7201:avalanche-icm.storage.ValidatorManager @@ -153,7 +157,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida function initializeValidatorSet( ConversionData calldata conversionData, uint32 messageIndex - ) virtual public override { + ) public virtual override { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); if ($._initializedValidatorSet) { revert InvalidInitializationStatus(); @@ -248,7 +252,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida PChainOwner memory remainingBalanceOwner, PChainOwner memory disableOwner, uint64 weight - ) virtual override internal initializedValidatorSet returns (bytes32) { + ) internal virtual override initializedValidatorSet returns (bytes32) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); if ( @@ -333,7 +337,12 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida /** * @notice See {ACP99Manager-completeValidatorRegistration}. */ - function completeValidatorRegistration(uint32 messageIndex) virtual public override returns (bytes32) { + function completeValidatorRegistration(uint32 messageIndex) + public + virtual + override + returns (bytes32) + { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); (bytes32 validationID, bool validRegistration) = ValidatorMessages .unpackL1ValidatorRegistrationMessage(_getPChainWarpMessage(messageIndex).payload); @@ -353,7 +362,9 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida $._validationPeriods[validationID].status = ValidatorStatus.Active; $._validationPeriods[validationID].startTime = uint64(block.timestamp); emit CompletedValidatorRegistration( - validationID, $._validationPeriods[validationID].nodeID, $._validationPeriods[validationID].weight + validationID, + $._validationPeriods[validationID].nodeID, + $._validationPeriods[validationID].weight ); return validationID; @@ -372,26 +383,35 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida * @notice Returns a validator registered to the given validationID * @param validationID ID of the validation period associated with the validator */ - function getValidator(bytes32 validationID) virtual override public view returns (Validator memory) { + function getValidator(bytes32 validationID) + public + view + virtual + override + returns (Validator memory) + { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); return $._validationPeriods[validationID]; } - function l1TotalWeight() virtual override public view returns (uint64) { + function l1TotalWeight() public view virtual override returns (uint64) { return _getValidatorManagerStorage()._churnTracker.totalWeight; } - function subnetID() virtual override public view returns (bytes32) { + function subnetID() public view virtual override returns (bytes32) { return _getValidatorManagerStorage()._subnetID; } - function completeValidatorWeightUpdate( - uint32 messageIndex - ) virtual override public returns (bytes32, uint64) { + function completeValidatorWeightUpdate(uint32 messageIndex) + public + virtual + override + returns (bytes32, uint64) + { WarpMessage memory warpMessage = _getPChainWarpMessage(messageIndex); (bytes32 validationID, uint64 nonce, uint64 weight) = ValidatorMessages.unpackL1ValidatorWeightMessage(warpMessage.payload); - + ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); // The received nonce should be no greater than the highest sent nonce to ensure @@ -401,7 +421,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida } $._validationPeriods[validationID].receivedNonce = nonce; - + emit CompletedValidatorWeightUpdate(validationID, nonce, weight); return (validationID, nonce); @@ -413,11 +433,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida * Any rewards for this validation period will stop accruing when this function is called. * @param validationID The ID of the validation period being ended. */ - function _initiateValidatorRemoval(bytes32 validationID) - internal - virtual - override - { + function _initiateValidatorRemoval(bytes32 validationID) internal virtual override { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); // Ensure the validation period is active. @@ -441,7 +457,9 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida (, bytes32 messageID) = _initiateValidatorWeightUpdate(validationID, 0); // Emit the event to signal the start of the validator removal process. - emit InitiatedValidatorRemoval(validationID, messageID, validator.weight, uint64(block.timestamp)); + emit InitiatedValidatorRemoval( + validationID, messageID, validator.weight, uint64(block.timestamp) + ); } /** @@ -540,7 +558,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida function _initiateValidatorWeightUpdate( bytes32 validationID, uint64 newWeight - ) virtual override internal returns (uint64, bytes32) { + ) internal virtual override returns (uint64, bytes32) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); uint64 validatorWeight = $._validationPeriods[validationID].weight; diff --git a/contracts/validator-manager/interfaces/IValidatorManager.sol b/contracts/validator-manager/interfaces/IValidatorManager.sol index ebfc7397e..b5b023b74 100644 --- a/contracts/validator-manager/interfaces/IValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IValidatorManager.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.25; -import {ValidatorStatus, ConversionData, PChainOwner} from "../ACP99Manager.sol"; +import {PChainOwner} from "../ACP99Manager.sol"; /** * @dev Describes the current churn period diff --git a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol index 45d0763c7..674a342d8 100644 --- a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol @@ -18,7 +18,6 @@ import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; import {Initializable} from "@openzeppelin/contracts@5.0.2/proxy/utils/Initializable.sol"; import {ACP99Manager} from "../ACP99Manager.sol"; - contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { NativeTokenStakingManager public app; diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index 7408cedef..e6dc77bb7 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -9,7 +9,6 @@ import {PoAValidatorManager} from "../PoAValidatorManager.sol"; import { ValidatorManagerSettings, ValidatorRegistrationInput - } from "../interfaces/IValidatorManager.sol"; import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; @@ -19,7 +18,6 @@ import {OwnableUpgradeable} from import {Initializable} from "@openzeppelin/contracts@5.0.2/proxy/utils/Initializable.sol"; import {ACP99Manager} from "../ACP99Manager.sol"; - contract PoAValidatorManagerTest is ValidatorManagerTest { PoAValidatorManager public app; diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index 8a3a743f0..b63bab697 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -1684,9 +1684,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetPChainWarpMessage(setValidatorWeightPayload, true); // The invalid validationID has sent no weight updates, so its nonce should be 0 - vm.expectRevert( - abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, 1) - ); + vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, 1)); vm.warp(DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP); posValidatorManager.completeDelegatorRegistration(delegationID, 0); @@ -1713,9 +1711,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorMessages.packL1ValidatorWeightMessage(delegationID, 2, DEFAULT_WEIGHT); _mockGetPChainWarpMessage(setValidatorWeightPayload, true); - vm.expectRevert( - abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, 2) - ); + vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, 2)); posValidatorManager.completeEndDelegation(delegationID, 0); } @@ -1986,7 +1982,9 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _beforeSend(_weightToValue(weight), delegatorAddress); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit InitiatedValidatorWeightUpdate(validationID, expectedNonce, bytes32(0), expectedValidatorWeight); + emit InitiatedValidatorWeightUpdate( + validationID, expectedNonce, bytes32(0), expectedValidatorWeight + ); vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit DelegatorAdded({ @@ -2024,9 +2022,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, expectedNonce, expectedValidatorWeight ); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit CompletedValidatorWeightUpdate( - validationID, expectedNonce, expectedValidatorWeight - ); + emit CompletedValidatorWeightUpdate(validationID, expectedNonce, expectedValidatorWeight); vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit DelegatorRegistered({ delegationID: delegationID, @@ -2352,9 +2348,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, expectedNonce, validatorWeight ); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit CompletedValidatorWeightUpdate( - validationID, expectedNonce, validatorWeight - ); + emit CompletedValidatorWeightUpdate(validationID, expectedNonce, validatorWeight); vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit DelegationEnded( diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 7d892d7d9..b9051bd6a 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -13,7 +13,7 @@ import { WarpMessage, IWarpMessenger } from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/IWarpMessenger.sol"; -import {ACP99Manager, ConversionData, InitialValidator, ValidatorStatus, PChainOwner} from "../ACP99Manager.sol"; +import {ACP99Manager, ConversionData, InitialValidator, PChainOwner} from "../ACP99Manager.sol"; // TODO: Remove this once all unit tests implemented // solhint-disable no-empty-blocks @@ -58,9 +58,7 @@ abstract contract ValidatorManagerTest is Test { // Used to create unique validator IDs in {_newNodeID} uint64 public nodeIDCounter = 0; - event RegisteredInitialValidator( - bytes32 indexed validationID, bytes nodeID, uint64 weight - ); + event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight); event InitiatedValidatorRegistration( bytes32 indexed validationID, @@ -70,9 +68,7 @@ abstract contract ValidatorManagerTest is Test { uint64 weight ); - event CompletedValidatorRegistration( - bytes32 indexed validationID, bytes nodeID, uint64 weight - ); + event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight); event InitiatedValidatorRemoval( bytes32 indexed validationID, @@ -81,20 +77,13 @@ abstract contract ValidatorManagerTest is Test { uint64 endTime ); - event CompletedValidatorRemoval( - bytes32 indexed validationID - ); + event CompletedValidatorRemoval(bytes32 indexed validationID); event InitiatedValidatorWeightUpdate( - bytes32 indexed validationID, - uint64 nonce, - bytes32 weightUpdateMessageID, - uint64 weight + bytes32 indexed validationID, uint64 nonce, bytes32 weightUpdateMessageID, uint64 weight ); - event CompletedValidatorWeightUpdate( - bytes32 indexed validationID, uint64 nonce, uint64 weight - ); + event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight); receive() external payable {} fallback() external payable {} @@ -455,7 +444,9 @@ abstract contract ValidatorManagerTest is Test { _beforeSend(_weightToValue(weight), address(this)); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit InitiatedValidatorRegistration(validationID, nodeID, bytes32(0), registrationExpiry, weight); + emit InitiatedValidatorRegistration( + validationID, nodeID, bytes32(0), registrationExpiry, weight + ); _initializeValidatorRegistration( ValidatorRegistrationInput({ From 619737f159f23fc4719be646ef73da94f9b2a177 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Tue, 14 Jan 2025 17:49:37 -0600 Subject: [PATCH 11/29] update readme --- contracts/validator-manager/README.md | 45 ++++++++++++++++----------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/contracts/validator-manager/README.md b/contracts/validator-manager/README.md index 7584ea89c..ebd794a20 100644 --- a/contracts/validator-manager/README.md +++ b/contracts/validator-manager/README.md @@ -1,38 +1,45 @@ -# Validator Manager Contract +# Validator Manager Contracts -TODO - -The contracts in this directory define the Validator Manager used to manage Avalanche L1 validators, as defined in [ACP-77](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets). `ValidatorManager.sol` is the top-level abstract contract that provides the basic functionality. The other contracts are related as follows: +The contracts in this directory define the Validator Manager used to manage Avalanche L1 validators, as defined in [ACP-77](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets). They comply with [ACP-99](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/99-validatorsetmanager-contract), which specifies the standard minimal functionality that Validator Managers should implement. The contracts in this directory are are related as follows: ```mermaid classDiagram -class ValidatorManager { - initializeValidatorSet() - completeValidatorRegistration() - completeEndValidation() - +class ACP99Manager { + +initializeValidatorSet() + +completeValidatorRegistration() + +completeValidatorRemoval() + +completeValidatorWeightUpdate() + -_initiateValidatorRegistration() + -_initiateValidatorRemoval() + -_initiateValidatorWeightUpdate() } +<> ACP99Manager + +class ValidatorManager <> ValidatorManager +note for ValidatorManager "Implements most of ACP99Manager" + class PoSValidatorManager { - initializeEndValidation() - completeDelegatorRegistration() - initializeEndDelegation() - completeEndDelegation() + +initializeEndValidation() + +completeDelegatorRegistration() + +initializeEndDelegation() + +completeEndDelegation() } <> PoSValidatorManager class ERC20TokenStakingManager { - initializeValidatorRegistration() - initializeDelegatorRegistration() + +initializeValidatorRegistration() + +initializeDelegatorRegistration() } class NativeTokenStakingManager { - initializeValidatorRegistration() payable - initializeDelegatorRegistration() payable + +initializeValidatorRegistration() payable + +initializeDelegatorRegistration() payable } class PoAValidatorManager { - initializeValidatorRegistration() - initializeEndValidation() + +initializeValidatorRegistration() + +initializeEndValidation() } +ACP99Manager <|-- ValidatorManager ValidatorManager <|-- PoSValidatorManager ValidatorManager <|-- PoAValidatorManager PoSValidatorManager <|-- ERC20TokenStakingManager From 8ff50f6887fc91cecaea766a506612885e574c42 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Tue, 14 Jan 2025 17:52:33 -0600 Subject: [PATCH 12/29] rename shadowed var --- contracts/validator-manager/ACP99Manager.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/validator-manager/ACP99Manager.sol b/contracts/validator-manager/ACP99Manager.sol index a7af81d43..fd9895439 100644 --- a/contracts/validator-manager/ACP99Manager.sol +++ b/contracts/validator-manager/ACP99Manager.sol @@ -103,7 +103,7 @@ abstract contract ACP99Manager { event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight); /// @notice Returns the SubnetID of the L1 tied to this manager - function subnetID() public view virtual returns (bytes32 subnetID); + function subnetID() public view virtual returns (bytes32 id); /// @notice Returns the validator details for a given validation ID. function getValidator(bytes32 validationID) From 2827bfc643ebb493e5f99b1cbeaffd2ea1a9bb47 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 09:17:39 -0600 Subject: [PATCH 13/29] update bindings --- .../go/validator-manager/ACP99Manager/ACP99Manager.go | 8 ++++---- .../ERC20TokenStakingManager/ERC20TokenStakingManager.go | 4 ++-- .../NativeTokenStakingManager.go | 4 ++-- .../PoAValidatorManager/PoAValidatorManager.go | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go b/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go index 05e7f57b6..76590bca7 100644 --- a/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go +++ b/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go @@ -58,7 +58,7 @@ type Validator struct { // ACP99ManagerMetaData contains all meta data concerning the ACP99Manager contract. var ACP99ManagerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"validator\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messsageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"validator\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messsageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", } // ACP99ManagerABI is the input ABI used to generate the binding from. @@ -271,7 +271,7 @@ func (_ACP99Manager *ACP99ManagerCallerSession) L1TotalWeight() (uint64, error) // SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. // -// Solidity: function subnetID() view returns(bytes32 subnetID) +// Solidity: function subnetID() view returns(bytes32 id) func (_ACP99Manager *ACP99ManagerCaller) SubnetID(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} err := _ACP99Manager.contract.Call(opts, &out, "subnetID") @@ -288,14 +288,14 @@ func (_ACP99Manager *ACP99ManagerCaller) SubnetID(opts *bind.CallOpts) ([32]byte // SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. // -// Solidity: function subnetID() view returns(bytes32 subnetID) +// Solidity: function subnetID() view returns(bytes32 id) func (_ACP99Manager *ACP99ManagerSession) SubnetID() ([32]byte, error) { return _ACP99Manager.Contract.SubnetID(&_ACP99Manager.CallOpts) } // SubnetID is a free data retrieval call binding the contract method 0x5dc1f535. // -// Solidity: function subnetID() view returns(bytes32 subnetID) +// Solidity: function subnetID() view returns(bytes32 id) func (_ACP99Manager *ACP99ManagerCallerSession) SubnetID() ([32]byte, error) { return _ACP99Manager.Contract.SubnetID(&_ACP99Manager.CallOpts) } diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index dfb1c6b8a..ee30af02e 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122007a466bbd70d97db533e1b45978a3578fbe2e79036b6d3f6e137d0670717ecfb64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220ac7367027bb3b334db593d0a3276740bf09687e2f8947a6fe0d701dc087c976c64736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -3305,7 +3305,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseUptimeUp // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220063fd880580801d78479094c4299a0c82f8b9c506fc93d34cb9b8779a037bc1a64736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index 32acd3009..489a753b8 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220831be3367df2b062c315d1d672c29dd464a5fdeac440784eb422a486098d536064736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122010007e4a95fb989f97d977141959d81ce65ad26366eccb808285b143cfc34a8264736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -3274,7 +3274,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseUptime // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220063fd880580801d78479094c4299a0c82f8b9c506fc93d34cb9b8779a037bc1a64736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index 8bc411bb8..358805b46 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -92,7 +92,7 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a264697066735822122078f4ebd449567cb0fbcc49929030317a1a54ec7119fc9b704036978b55d24f7264736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a264697066735822122059fb7c0d64579e8658fb11c146b783a14a7a9430b47c7ba215e947b21bc6c6cc64736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. @@ -2182,7 +2182,7 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseRegisteredInitialV // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220063fd880580801d78479094c4299a0c82f8b9c506fc93d34cb9b8779a037bc1a64736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. From 2465e627337023abf09fbccb0a44b43fd78c9550 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 09:18:18 -0600 Subject: [PATCH 14/29] replace ivdrmanager with acp99manager --- tests/utils/validator_manager.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go index 6c6f07c69..854ece5ab 100644 --- a/tests/utils/validator_manager.go +++ b/tests/utils/validator_manager.go @@ -31,7 +31,6 @@ import ( nativetokenstakingmanager "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/NativeTokenStakingManager" poavalidatormanager "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/PoAValidatorManager" iposvalidatormanager "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager" - ivalidatormanager "github.com/ava-labs/icm-contracts/abi-bindings/go/validator-manager/interfaces/IValidatorManager" "github.com/ava-labs/icm-contracts/tests/interfaces" "github.com/ava-labs/subnet-evm/accounts/abi/bind" "github.com/ava-labs/subnet-evm/core/types" @@ -74,13 +73,13 @@ func DeployValidatorManager( senderKey *ecdsa.PrivateKey, l1 interfaces.L1TestInfo, managerType ValidatorManagerConcreteType, -) (common.Address, *ivalidatormanager.IValidatorManager) { +) (common.Address, *acp99manager.ACP99Manager) { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) var ( tx *types.Transaction address common.Address - validatorManager *ivalidatormanager.IValidatorManager + validatorManager *acp99manager.ACP99Manager ) switch managerType { case PoAValidatorManager: @@ -119,7 +118,7 @@ func DeployValidatorManager( Expect(err).Should(BeNil()) } - validatorManager, err = ivalidatormanager.NewIValidatorManager(address, l1.RPCClient) + validatorManager, err = acp99manager.NewACP99Manager(address, l1.RPCClient) Expect(err).Should(BeNil()) // Wait for the transaction to be mined From 28046581fbbc426ca17be4c490c62f797a66d6dc Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 11:33:15 -0600 Subject: [PATCH 15/29] internal functions return validator state --- .../ERC20TokenStakingManager.go | 4 +- .../NativeTokenStakingManager.go | 4 +- .../PoAValidatorManager.go | 4 +- contracts/validator-manager/ACP99Manager.sol | 13 ++++-- .../validator-manager/PoAValidatorManager.sol | 2 +- .../validator-manager/PoSValidatorManager.sol | 21 +++++----- .../validator-manager/ValidatorManager.sol | 40 ++++++++++++------- 7 files changed, 51 insertions(+), 37 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index ee30af02e..23e7c62b8 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220ac7367027bb3b334db593d0a3276740bf09687e2f8947a6fe0d701dc087c976c64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b5060405161622b38038061622b83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6160de8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004615083565b6105f4565b005b6102776102873660046150be565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004615083565b610898565b6102776102cc3660046150d5565b6108a4565b6102776102df366004615123565b610e12565b6102f76102f23660046150be565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004615158565b610eda565b61027761034c366004615083565b610eed565b61036461035f3660046151cb565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004615158565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004615123565b610f49565b6103646103cb366004615232565b61119a565b6103645f81565b6102776103e5366004615083565b6111ba565b5f80516020616069833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004615158565b6111c6565b61027761043c366004615123565b6111d2565b610294603081565b61027761045736600461524d565b6113c5565b61027761046a3660046150be565b611476565b61036461047d36600461527b565b61150a565b610277610490366004615158565b6115e3565b6103646104a3366004615294565b6115ef565b6102776104b63660046152b4565b61161b565b6103646104c936600461527b565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b6102776105113660046150be565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b6102776105533660046150be565b611b70565b610294601481565b61057361056e36600461527b565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e3660046150be565b611e0f565b6040516102a2919061535c565b6102f76202a30081565b6103645f8051602061606983398151915281565b6102776105dc36600461524d565b611f5e565b6103646105ef366004615412565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115610648576106486152e7565b6005811115610659576106596152e7565b815260200160018201805461066d9061547d565b80601f01602080910402602001604051908101604052809291908181526020018280546106999061547d565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c6152e7565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff16906004016154b5565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261083691908101906155be565b6040518263ffffffff1660e01b815260040161085291906155ef565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108929190615601565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d9190615601565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615618565b6001600160a01b0316146109ba576109956060840160408501615618565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c86060850185615633565b905090505f805b828163ffffffff161015610c08575f6109eb6060880188615633565b8363ffffffff16818110610a0157610a01615678565b9050602002810190610a13919061568c565b610a1c906156f7565b80516040519192505f916006880191610a3491615772565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f91906004016155ef565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad91615772565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb9190615601565b90508086600601835f0151604051610b039190615772565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b4390826157c7565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb29085615896565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed9291906158b6565b60405180910390a2505080610c01906158e0565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff1683615902565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123b3565b604001516040518263ffffffff1660e01b8152600401610cc291906155ef565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d019190615601565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b9190615a58565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c91908101906155be565b90505f600282604051610d8f9190615772565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd9190615601565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c9565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c6152e7565b14610e7c578060405163170cc93360e21b815260040161078f91906154b5565b61089283836124f2565b5f80610e90612791565b60030154610e9e9084615aec565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127b5565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f8051602061608983398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c78565b5f610f52612791565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b6152e7565b6003811115610f9c57610f9c6152e7565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b9050600183516003811115611029576110296152e7565b1461104a578251604051633b0d540d60e21b815261078f9190600401615b0b565b60048151600581111561105f5761105f6152e7565b036110755761106d86612ca4565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612791565b60030154610ed4906001600160401b038416615b25565b6106008383835f612c78565b610ee6848484846127b5565b6111da6129f3565b5f6111e3612791565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c6152e7565b600381111561122d5761122d6152e7565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a66152e7565b146112c7578051604051633b0d540d60e21b815261078f9190600401615b0b565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f86152e7565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca4565b5050506113c160015f8051602061608983398151915255565b5050565b5f6113ce612791565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612791565b90505f61148b83611e0f565b51905060048160058111156114a2576114a26152e7565b146114c2578060405163170cc93360e21b815260040161078f91906154b5565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e75565b5f6115136129f3565b5f61151c612791565b90505f8061152985612e9f565b91509150611536826124c9565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b6152e7565b036115aa576115aa8185612e75565b6115c0826115bb856040015161119a565b613254565b509193505050505b6115de60015f8051602061608983398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613277565b9050610ed460015f8051602061608983398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134c4565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123b3565b604001516040518263ffffffff1660e01b815260040161174b91906155ef565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615b3c565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c99061547d565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff1690811115611814576118146152e7565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff16906004016154b5565b5f828152600484016020526040812061185f91614fcf565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615bd8565b60405180910390a2509392505050565b5f6118fe612791565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611937576119376152e7565b6003811115611948576119486152e7565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c16152e7565b141580156119e257506003815160038111156119df576119df6152e7565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615b0b565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af291908101906155be565b6040518263ffffffff1660e01b8152600401611b0e91906155ef565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee69190615601565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b979061547d565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be26152e7565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff16906004016154b5565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615bea565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106009190615601565b5f805f611c98846123b3565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd891906155ef565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615bfc565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17615006565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a6152e7565b6005811115611e6b57611e6b6152e7565b8152602001600182018054611e7f9061547d565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab9061547d565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612791565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615c3c565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612791565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c06152e7565b60038111156120d1576120d16152e7565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e6152e7565b1461217f578251604051633b0d540d60e21b815261078f9190600401615b0b565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b031690615896565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b600281516005811115612230576122306152e7565b0361235b5760028401546080840151612252916001600160401b031690615896565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124f2565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615c4b565b6134de565b60608101515f8c8152600788016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155909250905061231d84888c6137eb565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b600481516005811115612370576123706152e7565b036123975761238083878b6137eb565b5061238a89612ca4565b6001945050505050610f26565b805160405163170cc93360e21b815261078f91906004016154b5565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612417573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243e9190810190615c6b565b915091508061246057604051636b2f19e960e01b815260040160405180910390fd5b815115612486578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124c2576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124d3612791565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561253d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125649190810190615c6b565b915091508061258657604051636b2f19e960e01b815260040160405180910390fd5b5f61258f612791565b60058101548451919250146125bd578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f9576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b031615612635576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161267291906155ef565b6040805180830381865af415801561268c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b09190615cfb565b915091508188146126d75760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b039081169082161115612768575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612786565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127bf612791565b90505f6127cb876139d9565b90506127d6876124c9565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b031690615896565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124f2565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129699190615601565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615d1e565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020616089833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612791565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613cca565b90505f612b0682610e86565b90505f612bcd612b168a80615d31565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c615d31565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01615232565b612ba860608e018e615d73565b612bb190615d87565b612bbe60808f018f615d73565b612bc790615d87565b87613ced565b505f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f8051602061608983398151915255565b612c84848484846127b5565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cad612791565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce657612ce66152e7565b6003811115612cf757612cf76152e7565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6b614309565b8260800151612d7a9190615896565b6001600160401b0316421015612dae5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e09575060208201515b5f80612e16838886614324565b91509150612e2f85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7e612791565b5f838152600a820160205260408120805491905590915061089284826143d1565b5f612ea8615006565b5f612eb1612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed8886123b3565b604001516040518263ffffffff1660e01b8152600401612ef891906155ef565b6040805180830381865af4158015612f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f369190615b3c565b915091508015612f5d57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9557612f956152e7565b6005811115612fa657612fa66152e7565b8152602001600182018054612fba9061547d565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe69061547d565b80156130315780601f1061300857610100808354040283529160200191613031565b820191905f5260205f20905b81548152906001019060200180831161301457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a9576130a96152e7565b141580156130ca57506001815160058111156130c7576130c76152e7565b14155b156130eb57805160405163170cc93360e21b815261078f91906004016154b5565b600381516005811115613100576131006152e7565b0361310e5760048152613113565b600581525b8360060181602001516040516131299190615772565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316c5761316c6152e7565b02179055506020820151600182019061318590826157c7565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020616069833981519152546113c1906001600160a01b03168383614447565b5f80613281612791565b90505f6132906102f285613cca565b90505f61329c87611e0f565b90506132a7876124c9565b6132c7576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132dc576132dc6152e7565b146132fd57805160405163170cc93360e21b815261078f91906004016154b5565b5f828260a0015161330e9190615896565b905083600201600a9054906101000a90046001600160401b031682604001516133379190615902565b6001600160401b0316816001600160401b0316111561337457604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f61337f89836134de565b60608101516040519195509192505f916133b4918c919060200191825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078a019093529120805491925060019160ff1916828002179055505f8181526007870160209081526040918290208054610100600160a81b0319166101006001600160a01b038e16908102919091178255600182018e9055600290910180546060898101516001600160401b038c81166001600160c01b03199094168417600160801b928216928302176001600160c01b031690945586519081529289169483019490945293810193909352908201849052908b9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a4955050505050505b9392505050565b6134cc6144a6565b6134d5826144f1565b6113c18161456e565b5f6134e7615006565b5f6134f0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b031661352085826145d6565b5f61352a87614843565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135ce573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135f591908101906155be565b6040518263ffffffff1660e01b815260040161361191906155ef565b6020604051808303815f875af115801561362d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136519190615601565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a25f8881526005808601602052604091829020825161010081019093528054849391928391839160ff909116908111156136db576136db6152e7565b60058111156136ec576136ec6152e7565b81526020016001820180546137009061547d565b80601f016020809104026020016040519081016040528092919081815260200182805461372c9061547d565b80156137775780601f1061374e57610100808354040283529160200191613777565b820191905f5260205f20905b81548152906001019060200180831161375a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c09091015291975090955050505050505b9250929050565b5f806137f5612791565b90505f6138058660400151611e0f565b90505f60038251600581111561381d5761381d6152e7565b148061383b5750600482516005811115613839576138396152e7565b145b1561384b575060e0810151613888565b600282516005811115613860576138606152e7565b0361386c575042613888565b815160405163170cc93360e21b815261078f91906004016154b5565b86608001516001600160401b0316816001600160401b0316116138b0575f93505050506134bd565b600483015460608801515f916001600160a01b031690634f22429f906138d59061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613956573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061397a9190615601565b90506001600160a01b03871661399257876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b6139e1615006565b5f6139ea612059565b5f848152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613a2457613a246152e7565b6005811115613a3557613a356152e7565b8152602001600182018054613a499061547d565b80601f0160208091040260200160405190810160405280929190818152602001828054613a759061547d565b8015613ac05780601f10613a9757610100808354040283529160200191613ac0565b820191905f5260205f20905b815481529060010190602001808311613aa357829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613b3857613b386152e7565b14613b6b575f8481526005830160205260409081902054905163170cc93360e21b815261078f9160ff16906004016154b5565b60038152426001600160401b031660e082015260a08101515f85815260058481016020526040909120835181548593839160ff1916906001908490811115613bb557613bb56152e7565b021790555060208201516001820190613bce90826157c7565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613c6e86826134de565b604080518381526001600160401b038681166020830152421681830152905191955091925087917fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273919081900360600190a25090949350505050565b5f610ed4825f80516020616069833981519152546001600160a01b0316906148ac565b5f613cf6615006565b613cfe612059565b6007015460ff16613d2257604051637fab81e560e01b815260040160405180910390fd5b5f613d2b612059565b905042876001600160401b0316111580613d5a5750613d4d6202a30042615d1e565b876001600160401b031610155b15613d8357604051635879da1360e11b81526001600160401b038816600482015260240161078f565b60038101546001600160401b0390613da690600160401b90048216868316615d1e565b1115613dd057604051633e1a785160e01b81526001600160401b038516600482015260240161078f565b613dd9866148b8565b613de2856148b8565b8751603014613e095787516040516326475b2f60e11b815260040161078f91815260200190565b88515f03613e2c5788604051633e08a12560e11b815260040161078f91906155ef565b5f801b816006018a604051613e419190615772565b90815260200160405180910390205414613e70578860405163a41f772f60e01b815260040161078f91906155ef565b613e7a845f6145d6565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018e81526020018d81526020018c6001600160401b031681526020018b81526020018a8152602001896001600160401b03168152506040518263ffffffff1660e01b8152600401613efa9190615eb4565b5f60405180830381865af4158015613f14573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613f3b9190810190615f6b565b5f82815260048601602052604090209193509150613f5982826157c7565b5081836006018c604051613f6d9190615772565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613fa99085906004016155ef565b6020604051808303815f875af1158015613fc5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fe99190615601565b5f848152600580870160205260408083208151610100810190925280549495509293909291839160ff1690811115614023576140236152e7565b6005811115614034576140346152e7565b81526020016001820180546140489061547d565b80601f01602080910402602001604051908101604052809291908181526020018280546140749061547d565b80156140bf5780601f10614096576101008083540402835291602001916140bf565b820191905f5260205f20905b8154815290600101906020018083116140a257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c09091015290506001818190525060208082018e90526001600160401b03891660408084018290525f6060850181905260a085019290925260c0840182905260e0840182905286825260058089019093529020825181548493839160ff191690600190849081111561418f5761418f6152e7565b0217905550602082015160018201906141a890826157c7565b506040820151816002015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160020160086101000a8154816001600160401b0302191690836001600160401b0316021790555060808201518160020160106101000a8154816001600160401b0302191690836001600160401b0316021790555060a08201518160020160186101000a8154816001600160401b0302191690836001600160401b0316021790555060c0820151816003015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060e08201518160030160086101000a8154816001600160401b0302191690836001600160401b03160217905550905050837f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf8e848e8c6040516142ee9493929190615fae565b60405180910390a2929c929b50919950505050505050505050565b5f614312612059565b600101546001600160401b0316919050565b5f805f61432f612791565b5f868152600882016020526040812080549082905591925090819080156143c3575f8781526006850160205260409020546127109061437990600160a01b900461ffff1683615b25565b6143839190615aec565b91508184600a015f8981526020019081526020015f205f8282546143a79190615d1e565b909155506143b790508282615fe6565b92506143c389846143d1565b509097909650945050505050565b5f5f8051602061606983398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b15801561442c575f80fd5b505af115801561443e573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506149d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166144ef57604051631afcd79f60e31b815260040160405180910390fd5b565b6144f96144a6565b61450281614a38565b61450a614a51565b61456b6060820135608083013561452760c0850160a08601615232565b61453760e0860160c08701615ff9565b614548610100870160e08801616012565b61010087013561456061014089016101208a01615618565b886101400135614a61565b50565b6145766144a6565b5f805160206160698339815191526001600160a01b0382166145b657604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6145df612059565b90505f826001600160401b0316846001600160401b0316111561460d576146068385615c4b565b905061461a565b6146178484615c4b565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580614687575060018401548151614683916001600160401b031690615d1e565b8210155b156146af576001600160401b03808416606083015282825260408201511660208201526146ce565b82816060018181516146c19190615896565b6001600160401b03169052505b60608101516146de906064615902565b602082015160018601546001600160401b0392909216916147099190600160401b900460ff16615902565b6001600160401b0316101561474257606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b85816040018181516147549190615896565b6001600160401b0316905250604081018051869190614774908390615c4b565b6001600160401b0316905250600184015460408201516064916147a291600160401b90910460ff1690615902565b6001600160401b031610156147db576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061484d612059565b5f848152600582016020526040902060020180549192509060089061488190600160401b90046001600160401b0316616032565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134bd833384614c23565b805163ffffffff161580156148d1575060208101515115155b1561490557805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561494857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c1576020820151614968600183615fe6565b8151811061497857614978615678565b60200260200101516001600160a01b03168260200151828151811061499f5761499f615678565b60200260200101516001600160a01b031610156149cf57604051630dbc8d5f60e31b815260040160405180910390fd5b60010161494b565b5f6149eb6001600160a01b03841683614d86565b905080515f14158015614a0f575080806020019051810190614a0d919061604d565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b614a406144a6565b614a48614d93565b61456b81614d9b565b614a596144a6565b6144ef614e7f565b614a696144a6565b5f614a72612791565b905061ffff86161580614a8a575061271061ffff8716115b15614aae57604051635f12e6c360e11b815261ffff8716600482015260240161078f565b87891115614ad25760405163222d164360e21b8152600481018a905260240161078f565b60ff85161580614ae55750600a60ff8616115b15614b085760405163170db35960e31b815260ff8616600482015260240161078f565b614b10614309565b6001600160401b0316876001600160401b03161015614b4c576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f03614b6c5760405163a733007160e01b815260040160405180910390fd5b81614b8d57604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614c69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614c8d9190615601565b9050614ca46001600160a01b038616853086614e87565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614ce8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d0c9190615601565b9050818111614d725760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b614d7c8282615fe6565b9695505050505050565b60606134bd83835f614ec0565b6144ef6144a6565b614da36144a6565b5f614dac612059565b8235815590506014614dc46060840160408501616012565b60ff161180614de35750614dde6060830160408401616012565b60ff16155b15614e1757614df86060830160408401616012565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614e276060830160408401616012565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614e586040830160208401615232565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c656144a6565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd90608401614474565b606081471015614ee55760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614f009190615772565b5f6040518083038185875af1925050503d805f8114614f3a576040519150601f19603f3d011682016040523d82523d5f602084013e614f3f565b606091505b5091509150614d7c868383606082614f5f57614f5a82614fa6565b6134bd565b8151158015614f7657506001600160a01b0384163b155b15614f9f57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134bd565b805115614fb65780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614fdb9061547d565b5f825580601f10614fea575050565b601f0160209004905f5260205f209081019061456b919061504b565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561505f575f815560010161504c565b5090565b801515811461456b575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215615095575f80fd5b8335925060208401356150a781615063565b91506150b560408501615070565b90509250925092565b5f602082840312156150ce575f80fd5b5035919050565b5f80604083850312156150e6575f80fd5b82356001600160401b038111156150fb575f80fd5b83016080818603121561510c575f80fd5b915061511a60208401615070565b90509250929050565b5f8060408385031215615134575f80fd5b8235915061511a60208401615070565b6001600160a01b038116811461456b575f80fd5b5f805f806080858703121561516b575f80fd5b84359350602085013561517d81615063565b925061518b60408601615070565b9150606085013561519b81615144565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b038116811461456b575f80fd5b5f805f80608085870312156151de575f80fd5b84356001600160401b038111156151f3575f80fd5b850160a08188031215615204575f80fd5b9350615212602086016151a6565b92506040850135615222816151b7565b9396929550929360600135925050565b5f60208284031215615242575f80fd5b81356134bd816151b7565b5f806040838503121561525e575f80fd5b82359150602083013561527081615144565b809150509250929050565b5f6020828403121561528b575f80fd5b6134bd82615070565b5f80604083850312156152a5575f80fd5b50508035926020909101359150565b5f808284036101808112156152c7575f80fd5b610160808212156152d6575f80fd5b849350830135905061527081615144565b634e487b7160e01b5f52602160045260245ffd5b6006811061530b5761530b6152e7565b9052565b5f5b83811015615329578181015183820152602001615311565b50505f910152565b5f815180845261534881602086016020860161530f565b601f01601f19169290920160200192915050565b6020815261536e6020820183516152fb565b5f602083015161010080604085015261538b610120850183615331565b915060408501516001600160401b038082166060870152806060880151166080870152505060808501516153ca60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215615423575f80fd5b82356001600160401b0380821115615439575f80fd5b818501915085601f83011261544c575f80fd5b81358181111561545a575f80fd5b86602082850101111561546b575f80fd5b60209290920196919550909350505050565b600181811c9082168061549157607f821691505b6020821081036154af57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed482846152fb565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156154f9576154f96154c3565b60405290565b604080519081016001600160401b03811182821017156154f9576154f96154c3565b604051601f8201601f191681016001600160401b0381118282101715615549576155496154c3565b604052919050565b5f6001600160401b03821115615569576155696154c3565b50601f01601f191660200190565b5f82601f830112615586575f80fd5b815161559961559482615551565b615521565b8181528460208386010111156155ad575f80fd5b610f2682602083016020870161530f565b5f602082840312156155ce575f80fd5b81516001600160401b038111156155e3575f80fd5b610f2684828501615577565b602081525f6134bd6020830184615331565b5f60208284031215615611575f80fd5b5051919050565b5f60208284031215615628575f80fd5b81356134bd81615144565b5f808335601e19843603018112615648575f80fd5b8301803591506001600160401b03821115615661575f80fd5b6020019150600581901b36038213156137e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156a0575f80fd5b9190910192915050565b5f82601f8301126156b9575f80fd5b81356156c761559482615551565b8181528460208386010111156156db575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615707575f80fd5b61570f6154d7565b82356001600160401b0380821115615725575f80fd5b615731368387016156aa565b83526020850135915080821115615746575f80fd5b50615753368286016156aa565b6020830152506040830135615767816151b7565b604082015292915050565b5f82516156a081846020870161530f565b601f82111561060057805f5260205f20601f840160051c810160208510156157a85750805b601f840160051c820191505b81811015610ee6575f81556001016157b4565b81516001600160401b038111156157e0576157e06154c3565b6157f4816157ee845461547d565b84615783565b602080601f831160018114615827575f84156158105750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b8281101561585557888601518255948401946001909101908401615836565b508582101561587257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124c2576124c2615882565b604081525f6158c86040830185615331565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036158f8576158f8615882565b6001019392505050565b6001600160401b0381811683821602808216919082811461592557615925615882565b505092915050565b5f808335601e19843603018112615942575f80fd5b83016020810192503590506001600160401b03811115615960575f80fd5b8036038213156137e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015615a4b57848303601f19018952813536889003605e190181126159d2575f80fd5b870160606159e0828061592d565b8287526159f0838801828461596e565b92505050615a008683018361592d565b86830388880152615a1283828461596e565b925050506040808301359250615a27836151b7565b6001600160401b0392909216949091019390935297830197908301906001016159ad565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135615a7c81615144565b6001600160a01b031660608381019190915283013536849003601e19018112615aa3575f80fd5b83016020810190356001600160401b03811115615abe575f80fd5b8060051b3603821315615acf575f80fd5b608080850152615ae360a085018284615996565b95945050505050565b5f82615b0657634e487b7160e01b5f52601260045260245ffd5b500490565b6020810160048310615b1f57615b1f6152e7565b91905290565b8082028115828204841417610ed457610ed4615882565b5f8060408385031215615b4d575f80fd5b82519150602083015161527081615063565b5f8154615b6b8161547d565b808552602060018381168015615b885760018114615ba257615bcd565b60ff1985168884015283151560051b880183019550615bcd565b865f52825f205f5b85811015615bc55781548a8201860152908301908401615baa565b890184019650505b505050505092915050565b604081525f6158c86040830185615b5f565b602081525f6134bd6020830184615b5f565b5f805f60608486031215615c0e575f80fd5b835192506020840151615c20816151b7565b6040850151909250615c31816151b7565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124c2576124c2615882565b5f8060408385031215615c7c575f80fd5b82516001600160401b0380821115615c92575f80fd5b9084019060608287031215615ca5575f80fd5b615cad6154d7565b825181526020830151615cbf81615144565b6020820152604083015182811115615cd5575f80fd5b615ce188828601615577565b604083015250809450505050602083015161527081615063565b5f8060408385031215615d0c575f80fd5b825191506020830151615270816151b7565b80820180821115610ed457610ed4615882565b5f808335601e19843603018112615d46575f80fd5b8301803591506001600160401b03821115615d5f575f80fd5b6020019150368190038213156137e4575f80fd5b5f8235603e198336030181126156a0575f80fd5b5f60408236031215615d97575f80fd5b615d9f6154ff565b615da883615070565b81526020808401356001600160401b0380821115615dc4575f80fd5b9085019036601f830112615dd6575f80fd5b813581811115615de857615de86154c3565b8060051b9150615df9848301615521565b8181529183018401918481019036841115615e12575f80fd5b938501935b83851015615e3c5784359250615e2c83615144565b8282529385019390850190615e17565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615ea95784516001600160a01b03168252938301936001929092019190830190615e80565b509695505050505050565b60208152815160208201525f602083015160e06040840152615eda610100840182615331565b90506040840151601f1980858403016060860152615ef88383615331565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615f288383615e4e565b925060a08601519150808584030160c086015250615f468282615e4e565b91505060c0840151615f6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215615f7c575f80fd5b8251915060208301516001600160401b03811115615f98575f80fd5b615fa485828601615577565b9150509250929050565b608081525f615fc06080830187615331565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed4615882565b5f60208284031215616009575f80fd5b6134bd826151a6565b5f60208284031215616022575f80fd5b813560ff811681146134bd575f80fd5b5f6001600160401b038083168181036158f8576158f8615882565b5f6020828403121561605d575f80fd5b81516134bd8161506356fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212207f299db3d8b7ca34e1e681406dd83771eed7f7bee7496a59412931b901ee943064736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -3305,7 +3305,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseUptimeUp // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122017004d9191e69227d5fc936d07424760c48913f19025eee71ffca047901c2db664736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index 489a753b8..a1c5644b0 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122010007e4a95fb989f97d977141959d81ce65ad26366eccb808285b143cfc34a8264736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615f83380380615f8383398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e368061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614e69565b610792565b005b348015610279575f80fd5b5061026c610288366004614ea4565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614ebb565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614e69565b610b13565b348015610301575f80fd5b5061026c610310366004614ed2565b610b1f565b348015610320575f80fd5b5061026c61032f366004614f20565b61108d565b34801561033f575f80fd5b5061035361034e366004614ea4565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614f55565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614e69565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614f55565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614f20565b61118f565b348015610497575f80fd5b506104176104a6366004614fb7565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614e69565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614f55565b61140c565b348015610507575f80fd5b5061026c610516366004614f20565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614fd2565b61160b565b348015610559575f80fd5b5061026c610568366004614ea4565b6116bc565b348015610578575f80fd5b50610417610587366004615000565b611750565b348015610597575f80fd5b5061026c6105a6366004614f55565b611829565b3480156105b6575f80fd5b506104176105c5366004615000565b611835565b6104176105d836600461502a565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614ea4565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614ea4565b611cdf565b6104176106bd366004614ea4565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004615000565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614ea4565b611faa565b6040516102ce9190615100565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614fd2565b6120f9565b34801561077e575f80fd5b5061041761078d3660046151b6565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e661508b565b60058111156107f7576107f761508b565b815260200160018201805461080b90615221565b80601f016020809104026020016040519081016040528092919081815260200182805461083790615221565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa61508b565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401615253565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d4919081019061535c565b6040518263ffffffff1660e01b81526004016109f0919061538d565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a30919061539f565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb8919061539f565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf260608501604086016153b6565b6001600160a01b031614610c3557610c1060608401604085016153b6565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c4360608501856153d1565b905090505f805b828163ffffffff161015610e83575f610c6660608801886153d1565b8363ffffffff16818110610c7c57610c7c615416565b9050602002810190610c8e919061542a565b610c9790615495565b80516040519192505f916006880191610caf91615510565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d919060040161538d565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d2891615510565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d66919061539f565b90508086600601835f0151604051610d7e9190615510565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe9082615565565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d9085615634565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e68929190615654565b60405180910390a2505080610e7c9061567e565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836156a0565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d8761256a565b604001516040518263ffffffff1660e01b8152600401610f3d919061538d565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c919061539f565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb691906157f6565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff7919081019061535c565b90505f60028260405161100a9190615510565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611048919061539f565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612680565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d761508b565b146110f7578060405163170cc93360e21b815260040161092d9190615253565b610a3083836126a9565b5f8061110b612948565b60030154611119908461588a565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f61296c565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f611198612948565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d161508b565b60038111156111e2576111e261508b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f61508b565b14611290578251604051633b0d540d60e21b815261092d91906004016158a9565b6004815160058111156112a5576112a561508b565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e9612948565b6003015461114f906001600160401b0384166158c3565b61079e8383835f612baa565b6111618484848461296c565b611420612da7565b5f611429612948565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156114625761146261508b565b60038111156114735761147361508b565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec61508b565b1461150d578051604051633b0d540d60e21b815261092d91906004016158a9565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e61508b565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615de183398151915255565b5050565b5f611614612948565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c5612948565b90505f6116d183611faa565b51905060048160058111156116e8576116e861508b565b14611708578060405163170cc93360e21b815260040161092d9190615253565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f611762612948565b90505f8061176f85612e1b565b9150915061177c82612680565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e161508b565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615de183398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118668761256a565b604001516040518263ffffffff1660e01b8152600401611886919061538d565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c491906158da565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490615221565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f61508b565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401615253565b5f828152600484016020526040812061199a91614db5565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b9092041690615976565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615de183398151915255565b9392505050565b5f611a6d612948565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa661508b565b6003811115611ab757611ab761508b565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b3061508b565b14158015611b515750600381516003811115611b4e57611b4e61508b565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016158a9565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c61919081019061535c565b6040518263ffffffff1660e01b8152600401611c7d919061538d565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611161919061539f565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690615221565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d5161508b565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401615253565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb9201615988565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e919061539f565b5f611e04612da7565b611e0f823334613413565b905061182460015f80516020615de183398151915255565b5f805f611e338461256a565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e73919061538d565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb2919061599a565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614dec565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff561508b565b60058111156120065761200661508b565b815260200160018201805461201a90615221565b80601f016020809104026020016040519081016040528092919081815260200182805461204690615221565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f612134612948565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b09291906159cf565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b61222061365b565b612229816136a6565b50565b5f80612236612948565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f61508b565b60038111156122805761228061508b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d61508b565b1461232e578251604051633b0d540d60e21b815261092d91906004016158a9565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b031690615634565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df61508b565b0361250a5760028401546080840151612401916001600160401b031690615634565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b91906159de565b613720565b60608101515f8c8152600788016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915590925090506124cc84888c613a2d565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125629350505050565b60048151600581111561251f5761251f61508b565b036125465761252f83878b613a2d565b5061253989612bd6565b6001945050505050612562565b805160405163170cc93360e21b815261092d9190600401615253565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125ce573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125f591908101906159fe565b915091508061261757604051636b2f19e960e01b815260040160405180910390fd5b81511561263d578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612679576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268a612948565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126f4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261271b91908101906159fe565b915091508061273d57604051636b2f19e960e01b815260040160405180910390fd5b5f612746612948565b6005810154845191925014612774578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127b0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127ec576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612829919061538d565b6040805180830381865af4158015612843573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128679190615a8e565b9150915081881461288e5760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b03908116908216111561291f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261293d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612976612948565b90505f61298287613c1b565b905061298d87612680565b61299c57600192505050612562565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b031690615634565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a9565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b20919061539f565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b908490615ab1565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb68484848461296c565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf612948565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c1861508b565b6003811115612c2957612c2961508b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613f0c565b8260800151612cac9190615634565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613f27565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615de1833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615de183398151915255565b5f612dfa612948565b5f838152600a8201602052604081208054919055909150610a308482613fd4565b5f612e24614dec565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e548861256a565b604001516040518263ffffffff1660e01b8152600401612e74919061538d565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb291906158da565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f1161508b565b6005811115612f2257612f2261508b565b8152602001600182018054612f3690615221565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290615221565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130255761302561508b565b1415801561304657506001815160058111156130435761304361508b565b14155b1561306757805160405163170cc93360e21b815261092d9190600401615253565b60038151600581111561307c5761307c61508b565b0361308a576004815261308f565b600581525b8360060181602001516040516130a59190615510565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e861508b565b0217905550602082015160018201906131019082615565565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682614032565b5f806131ed612948565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a80615ac4565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c615ac4565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614fb7565b61335660608e018e615b06565b61335f90615b1a565b61336c60808f018f615b06565b61337590615b1a565b876140c5565b505f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341d612948565b90505f61342984611101565b90505f61343587611faa565b905061344087612680565b613460576040516330efa98b60e01b81526004810188905260240161092d565b6002815160058111156134755761347561508b565b1461349657805160405163170cc93360e21b815261092d9190600401615253565b5f828260a001516134a79190615634565b905083600201600a9054906101000a90046001600160401b031682604001516134d091906156a0565b6001600160401b0316816001600160401b0316111561350d57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f6135188983613720565b60608101516040519195509192505f9161354d918c919060200191825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078a019093529120805491925060019160ff1916828002179055505f8181526007870160209081526040918290208054610100600160a81b0319166101006001600160a01b038e16908102919091178255600182018e9055600290910180546060898101516001600160401b038c81166001600160c01b03199094168417600160801b928216928302176001600160c01b031690945586519081529289169483019490945293810193909352908201849052908b9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49998505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166136a457604051631afcd79f60e31b815260040160405180910390fd5b565b6136ae61365b565b6136b7816146e1565b6136bf6146fa565b612229606082013560808301356136dc60c0850160a08601614fb7565b6136ec60e0860160c08701615be1565b6136fd610100870160e08801615bfa565b61010087013561371561014089016101208a016153b6565b88610140013561470a565b5f613729614dec565b5f6137326121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b031661376285826148cc565b5f61376c87614b39565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613810573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613837919081019061535c565b6040518263ffffffff1660e01b8152600401613853919061538d565b6020604051808303815f875af115801561386f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613893919061539f565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a25f8881526005808601602052604091829020825161010081019093528054849391928391839160ff9091169081111561391d5761391d61508b565b600581111561392e5761392e61508b565b815260200160018201805461394290615221565b80601f016020809104026020016040519081016040528092919081815260200182805461396e90615221565b80156139b95780601f10613990576101008083540402835291602001916139b9565b820191905f5260205f20905b81548152906001019060200180831161399c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c09091015291975090955050505050505b9250929050565b5f80613a37612948565b90505f613a478660400151611faa565b90505f600382516005811115613a5f57613a5f61508b565b1480613a7d5750600482516005811115613a7b57613a7b61508b565b145b15613a8d575060e0810151613aca565b600282516005811115613aa257613aa261508b565b03613aae575042613aca565b815160405163170cc93360e21b815261092d9190600401615253565b86608001516001600160401b0316816001600160401b031611613af2575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f90613b17906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613b98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bbc919061539f565b90506001600160a01b038716613bd457876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b613c23614dec565b5f613c2c6121f4565b5f848152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613c6657613c6661508b565b6005811115613c7757613c7761508b565b8152602001600182018054613c8b90615221565b80601f0160208091040260200160405190810160405280929190818152602001828054613cb790615221565b8015613d025780601f10613cd957610100808354040283529160200191613d02565b820191905f5260205f20905b815481529060010190602001808311613ce557829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613d7a57613d7a61508b565b14613dad575f8481526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401615253565b60038152426001600160401b031660e082015260a08101515f85815260058481016020526040909120835181548593839160ff1916906001908490811115613df757613df761508b565b021790555060208201516001820190613e109082615565565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613eb08682613720565b604080518381526001600160401b038681166020830152421681830152905191955091925087917fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273919081900360600190a25090949350505050565b5f613f156121f4565b600101546001600160401b0316919050565b5f805f613f32612948565b5f86815260088201602052604081208054908290559192509081908015613fc6575f87815260068501602052604090205461271090613f7c90600160a01b900461ffff16836158c3565b613f86919061588a565b91508184600a015f8981526020019081526020015f205f828254613faa9190615ab1565b90915550613fba90508282615c1a565b9250613fc68984613fd4565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015614020575f80fd5b505af11580156112b3573d5f803e3d5ffd5b804710156140555760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461409e576040519150601f19603f3d011682016040523d82523d5f602084013e6140a3565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f6140ce614dec565b6140d66121f4565b6007015460ff166140fa57604051637fab81e560e01b815260040160405180910390fd5b5f6141036121f4565b905042876001600160401b031611158061413257506141256202a30042615ab1565b876001600160401b031610155b1561415b57604051635879da1360e11b81526001600160401b038816600482015260240161092d565b60038101546001600160401b039061417e90600160401b90048216868316615ab1565b11156141a857604051633e1a785160e01b81526001600160401b038516600482015260240161092d565b6141b186614ba2565b6141ba85614ba2565b87516030146141e15787516040516326475b2f60e11b815260040161092d91815260200190565b88515f036142045788604051633e08a12560e11b815260040161092d919061538d565b5f801b816006018a6040516142199190615510565b90815260200160405180910390205414614248578860405163a41f772f60e01b815260040161092d919061538d565b614252845f6148cc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018e81526020018d81526020018c6001600160401b031681526020018b81526020018a8152602001896001600160401b03168152506040518263ffffffff1660e01b81526004016142d29190615c93565b5f60405180830381865af41580156142ec573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526143139190810190615d4a565b5f828152600486016020526040902091935091506143318282615565565b5081836006018c6040516143459190615510565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061438190859060040161538d565b6020604051808303815f875af115801561439d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143c1919061539f565b5f848152600580870160205260408083208151610100810190925280549495509293909291839160ff16908111156143fb576143fb61508b565b600581111561440c5761440c61508b565b815260200160018201805461442090615221565b80601f016020809104026020016040519081016040528092919081815260200182805461444c90615221565b80156144975780601f1061446e57610100808354040283529160200191614497565b820191905f5260205f20905b81548152906001019060200180831161447a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c09091015290506001818190525060208082018e90526001600160401b03891660408084018290525f6060850181905260a085019290925260c0840182905260e0840182905286825260058089019093529020825181548493839160ff19169060019084908111156145675761456761508b565b0217905550602082015160018201906145809082615565565b506040820151816002015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160020160086101000a8154816001600160401b0302191690836001600160401b0316021790555060808201518160020160106101000a8154816001600160401b0302191690836001600160401b0316021790555060a08201518160020160186101000a8154816001600160401b0302191690836001600160401b0316021790555060c0820151816003015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060e08201518160030160086101000a8154816001600160401b0302191690836001600160401b03160217905550905050837f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf8e848e8c6040516146c69493929190615d8d565b60405180910390a2929c929b50919950505050505050505050565b6146e961365b565b6146f1614cc1565b61222981614cc9565b61470261365b565b6136a4614dad565b61471261365b565b5f61471b612948565b905061ffff86161580614733575061271061ffff8716115b1561475757604051635f12e6c360e11b815261ffff8716600482015260240161092d565b8789111561477b5760405163222d164360e21b8152600481018a905260240161092d565b60ff8516158061478e5750600a60ff8616115b156147b15760405163170db35960e31b815260ff8616600482015260240161092d565b6147b9613f0c565b6001600160401b0316876001600160401b031610156147f5576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036148155760405163a733007160e01b815260040160405180910390fd5b8161483657604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6148d56121f4565b90505f826001600160401b0316846001600160401b03161115614903576148fc83856159de565b9050614910565b61490d84846159de565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061497d575060018401548151614979916001600160401b031690615ab1565b8210155b156149a5576001600160401b03808416606083015282825260408201511660208201526149c4565b82816060018181516149b79190615634565b6001600160401b03169052505b60608101516149d49060646156a0565b602082015160018601546001600160401b0392909216916149ff9190600160401b900460ff166156a0565b6001600160401b03161015614a3857606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614a4a9190615634565b6001600160401b0316905250604081018051869190614a6a9083906159de565b6001600160401b031690525060018401546040820151606491614a9891600160401b90910460ff16906156a0565b6001600160401b03161015614ad1576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614b436121f4565b5f8481526005820160205260409020600201805491925090600890614b7790600160401b90046001600160401b0316615dc5565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614bbb575060208101515115155b15614bef57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff161115614c3257805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b816020015151811015611607576020820151614c52600183615c1a565b81518110614c6257614c62615416565b60200260200101516001600160a01b031682602001518281518110614c8957614c89615416565b60200260200101516001600160a01b03161015614cb957604051630dbc8d5f60e31b815260040160405180910390fd5b600101614c35565b6136a461365b565b614cd161365b565b5f614cda6121f4565b8235815590506014614cf26060840160408501615bfa565b60ff161180614d115750614d0c6060830160408401615bfa565b60ff16155b15614d4557614d266060830160408401615bfa565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b614d556060830160408401615bfa565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614d866040830160208401614fb7565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde61365b565b508054614dc190615221565b5f825580601f10614dd0575050565b601f0160209004905f5260205f20908101906122299190614e31565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614e45575f8155600101614e32565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614e7b575f80fd5b833592506020840135614e8d81614e49565b9150614e9b60408501614e56565b90509250925092565b5f60208284031215614eb4575f80fd5b5035919050565b5f6101608284031215614ecc575f80fd5b50919050565b5f8060408385031215614ee3575f80fd5b82356001600160401b03811115614ef8575f80fd5b830160808186031215614f09575f80fd5b9150614f1760208401614e56565b90509250929050565b5f8060408385031215614f31575f80fd5b82359150614f1760208401614e56565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614f68575f80fd5b843593506020850135614f7a81614e49565b9250614f8860408601614e56565b91506060850135614f9881614f41565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614fc7575f80fd5b8135611a5d81614fa3565b5f8060408385031215614fe3575f80fd5b823591506020830135614ff581614f41565b809150509250929050565b5f60208284031215615010575f80fd5b611a5d82614e56565b803561ffff81168114611824575f80fd5b5f805f6060848603121561503c575f80fd5b83356001600160401b03811115615051575f80fd5b840160a08187031215615062575f80fd5b925061507060208501615019565b9150604084013561508081614fa3565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b600681106150af576150af61508b565b9052565b5f5b838110156150cd5781810151838201526020016150b5565b50505f910152565b5f81518084526150ec8160208601602086016150b3565b601f01601f19169290920160200192915050565b6020815261511260208201835161509f565b5f602083015161010080604085015261512f6101208501836150d5565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161516e60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f80602083850312156151c7575f80fd5b82356001600160401b03808211156151dd575f80fd5b818501915085601f8301126151f0575f80fd5b8135818111156151fe575f80fd5b86602082850101111561520f575f80fd5b60209290920196919550909350505050565b600181811c9082168061523557607f821691505b602082108103614ecc57634e487b7160e01b5f52602260045260245ffd5b6020810161114f828461509f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561529757615297615261565b60405290565b604080519081016001600160401b038111828210171561529757615297615261565b604051601f8201601f191681016001600160401b03811182821017156152e7576152e7615261565b604052919050565b5f6001600160401b0382111561530757615307615261565b50601f01601f191660200190565b5f82601f830112615324575f80fd5b8151615337615332826152ef565b6152bf565b81815284602083860101111561534b575f80fd5b6125628260208301602087016150b3565b5f6020828403121561536c575f80fd5b81516001600160401b03811115615381575f80fd5b61256284828501615315565b602081525f611a5d60208301846150d5565b5f602082840312156153af575f80fd5b5051919050565b5f602082840312156153c6575f80fd5b8135611a5d81614f41565b5f808335601e198436030181126153e6575f80fd5b8301803591506001600160401b038211156153ff575f80fd5b6020019150600581901b3603821315613a26575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261543e575f80fd5b9190910192915050565b5f82601f830112615457575f80fd5b8135615465615332826152ef565b818152846020838601011115615479575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156154a5575f80fd5b6154ad615275565b82356001600160401b03808211156154c3575f80fd5b6154cf36838701615448565b835260208501359150808211156154e4575f80fd5b506154f136828601615448565b602083015250604083013561550581614fa3565b604082015292915050565b5f825161543e8184602087016150b3565b601f82111561079e57805f5260205f20601f840160051c810160208510156155465750805b601f840160051c820191505b81811015611161575f8155600101615552565b81516001600160401b0381111561557e5761557e615261565b6155928161558c8454615221565b84615521565b602080601f8311600181146155c5575f84156155ae5750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b828110156155f3578886015182559484019460019091019084016155d4565b508582101561561057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561267957612679615620565b604081525f61566660408301856150d5565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361569657615696615620565b6001019392505050565b6001600160401b038181168382160280821691908281146156c3576156c3615620565b505092915050565b5f808335601e198436030181126156e0575f80fd5b83016020810192503590506001600160401b038111156156fe575f80fd5b803603821315613a26575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156157e957848303601f19018952813536889003605e19018112615770575f80fd5b8701606061577e82806156cb565b82875261578e838801828461570c565b9250505061579e868301836156cb565b868303888801526157b083828461570c565b9250505060408083013592506157c583614fa3565b6001600160401b03929092169490910193909352978301979083019060010161574b565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561581a81614f41565b6001600160a01b031660608381019190915283013536849003601e19018112615841575f80fd5b83016020810190356001600160401b0381111561585c575f80fd5b8060051b360382131561586d575f80fd5b60808085015261588160a085018284615734565b95945050505050565b5f826158a457634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106158bd576158bd61508b565b91905290565b808202811582820484141761114f5761114f615620565b5f80604083850312156158eb575f80fd5b825191506020830151614ff581614e49565b5f815461590981615221565b80855260206001838116801561592657600181146159405761596b565b60ff1985168884015283151560051b88018301955061596b565b865f52825f205f5b858110156159635781548a8201860152908301908401615948565b890184019650505b505050505092915050565b604081525f61566660408301856158fd565b602081525f611a5d60208301846158fd565b5f805f606084860312156159ac575f80fd5b8351925060208401516159be81614fa3565b604085015190925061508081614fa3565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561267957612679615620565b5f8060408385031215615a0f575f80fd5b82516001600160401b0380821115615a25575f80fd5b9084019060608287031215615a38575f80fd5b615a40615275565b825181526020830151615a5281614f41565b6020820152604083015182811115615a68575f80fd5b615a7488828601615315565b6040830152508094505050506020830151614ff581614e49565b5f8060408385031215615a9f575f80fd5b825191506020830151614ff581614fa3565b8082018082111561114f5761114f615620565b5f808335601e19843603018112615ad9575f80fd5b8301803591506001600160401b03821115615af2575f80fd5b602001915036819003821315613a26575f80fd5b5f8235603e1983360301811261543e575f80fd5b5f60408236031215615b2a575f80fd5b615b3261529d565b615b3b83614e56565b81526020808401356001600160401b0380821115615b57575f80fd5b9085019036601f830112615b69575f80fd5b813581811115615b7b57615b7b615261565b8060051b9150615b8c8483016152bf565b8181529183018401918481019036841115615ba5575f80fd5b938501935b83851015615bcf5784359250615bbf83614f41565b8282529385019390850190615baa565b94860194909452509295945050505050565b5f60208284031215615bf1575f80fd5b611a5d82615019565b5f60208284031215615c0a575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f615620565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615c885784516001600160a01b03168252938301936001929092019190830190615c5f565b509695505050505050565b60208152815160208201525f602083015160e06040840152615cb96101008401826150d5565b90506040840151601f1980858403016060860152615cd783836150d5565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615d078383615c2d565b925060a08601519150808584030160c086015250615d258282615c2d565b91505060c0840151615d4260e08501826001600160401b03169052565b509392505050565b5f8060408385031215615d5b575f80fd5b8251915060208301516001600160401b03811115615d77575f80fd5b615d8385828601615315565b9150509250929050565b608081525f615d9f60808301876150d5565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036156965761569661562056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212206e07ec7b7772f66727263bb23a83ff986b4ebd9c0fd9d266f1fa835e8e9abfe464736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -3274,7 +3274,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseUptime // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122017004d9191e69227d5fc936d07424760c48913f19025eee71ffca047901c2db664736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index 358805b46..8890a3e9d 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -92,7 +92,7 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a264697066735822122059fb7c0d64579e8658fb11c146b783a14a7a9430b47c7ba215e947b21bc6c6cc64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051613cac380380613cac83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b613b5f8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a366004612c8b565b610388565b005b61015f61016f366004612cba565b610626565b5f80516020613aea833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612d08565b610bcc565b61015f610242366004612c8b565b610bdf565b610184610255366004612d3c565b610bf4565b610184610268366004612d08565b610cc1565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f80516020613aea83398151915281565b61015f6102e8366004612c8b565b610ebf565b6101cb601481565b610308610303366004612d08565b611000565b604080519283526001600160401b0390911660208301520161018e565b61015f610333366004612da2565b61118f565b61034b610346366004612c8b565b61129d565b60405161018e9190612e54565b6102ae6202a30081565b61015f610370366004612f0a565b6113f7565b610184610383366004612f25565b611434565b5f8181525f80516020613b0a83398151915260205260408082208151610100810190925280545f80516020613aea83398151915293929190829060ff1660058111156103d6576103d6612dd3565b60058111156103e7576103e7612dd3565b81526020016001820180546103fb90612f90565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612f90565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612dd3565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612fc8565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c491908101906130d9565b6040518263ffffffff1660e01b81526004016105e0919061310a565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610620919061311c565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020613aea8339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df919061311c565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612f0a565b6001600160a01b03161461075c576107376060840160408501612f0a565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185613133565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188613133565b8363ffffffff168181106107a3576107a3613178565b90506020028101906107b5919061318c565b6107be906131f7565b80516040519192505f9160068801916107d691613272565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d919060040161310a565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91613272565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d919061311c565b90508086600601835f01516040516108a59190613272565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e590826132ce565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b03199093169290921790915561095490856133a1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f9291906133c1565b60405180910390a25050806109a3906133eb565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361340d565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611490565b604001516040518263ffffffff1660e01b8152600401610a69919061310a565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa8919061311c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae29190613563565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b2391908101906130d9565b90505f600282604051610b369190613272565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b74919061311c565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115a6565b610bca5f611601565b565b5f80610bd783611671565b509392505050565b610be76115a6565b610bf081611a29565b5050565b5f610bfd6115a6565b610bd7610c0a84806135f7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4b9250505060208601866135f7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8f925050506060870160408801613639565b610c9c6060880188613654565b610ca590613668565b610cb26080890189613654565b610cbb90613668565b87611d25565b5f5f80516020613aea833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cf587611490565b604001516040518263ffffffff1660e01b8152600401610d15919061310a565b6040805180830381865af4158015610d2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d53919061373e565b9150915080610d7957604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9390612f90565b90505f03610db75760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610dde57610dde612dd3565b14610e11575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612fc8565b5f8281526004840160205260408120610e2991612bf7565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eaf93600190910192600160c01b90920416906137d8565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020613aea8339815191529190610f0690612f90565b90505f03610f2a5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5157610f51612dd3565b14610f84575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612fc8565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fbb92016137ea565b6020604051808303815f875af1158015610fd7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ffb919061311c565b505050565b5f805f61100c84611490565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b815260040161104c919061310a565b606060405180830381865af4158015611067573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061108b91906137fc565b9250925092505f6110a65f80516020613aea83398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b9092041610156110fa57604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061117a90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111d35750825b90505f826001600160401b031660011480156111ee5750303b155b9050811580156111fc575080155b1561121a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124457845460ff60401b1916600160401b1785555b61124e878761235a565b831561129457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112a5612c2e565b5f8281525f80516020613b0a8339815191526020526040908190208151610100810190925280545f80516020613aea833981519152929190829060ff1660058111156112f3576112f3612dd3565b600581111561130457611304612dd3565b815260200160018201805461131890612f90565b80601f016020809104026020016040519081016040528092919081815260200182805461134490612f90565b801561138f5780601f106113665761010080835404028352916020019161138f565b820191905f5260205f20905b81548152906001019060200180831161137257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6113ff6115a6565b6001600160a01b03811661142857604051631e4fbdf760e01b81525f600482015260240161051d565b61143181611601565b50565b6040515f905f80516020613aea833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611477908690869061383c565b9081526020016040518091039020549150505b92915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151b919081019061384b565b915091508061153d57604051636b2f19e960e01b815260040160405180910390fd5b815115611563578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b03161561159f576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115d87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167a612c2e565b5f80516020613aea8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116ad88611490565b604001516040518263ffffffff1660e01b81526004016116cd919061310a565b6040805180830381865af41580156116e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170b919061373e565b91509150801561173257604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176a5761176a612dd3565b600581111561177b5761177b612dd3565b815260200160018201805461178f90612f90565b80601f01602080910402602001604051908101604052809291908181526020018280546117bb90612f90565b80156118065780601f106117dd57610100808354040283529160200191611806565b820191905f5260205f20905b8154815290600101906020018083116117e957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561187e5761187e612dd3565b1415801561189f575060018151600581111561189c5761189c612dd3565b14155b156118c057805160405163170cc93360e21b815261051d9190600401612fc8565b6003815160058111156118d5576118d5612dd3565b036118e357600481526118e8565b600581525b8360060181602001516040516118fe9190613272565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194157611941612dd3565b02179055506020820151600182019061195a90826132ce565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b611a31612c2e565b5f8281525f80516020613b0a83398151915260205260408082208151610100810190925280545f80516020613aea83398151915293929190829060ff166005811115611a7f57611a7f612dd3565b6005811115611a9057611a90612dd3565b8152602001600182018054611aa490612f90565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad090612f90565b8015611b1b5780601f10611af257610100808354040283529160200191611b1b565b820191905f5260205f20905b815481529060010190602001808311611afe57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b9357611b93612dd3565b14611bc6575f8481526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612fc8565b60038152426001600160401b031660e082015260a08101515f85815260058481016020526040909120835181548593839160ff1916906001908490811115611c1057611c10612dd3565b021790555060208201516001820190611c2990826132ce565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc98682612374565b604080518381526001600160401b038681166020830152421681830152905191955091925087917fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273919081900360600190a25090949350505050565b5f611d2e612c2e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb075460ff16611d7057604051637fab81e560e01b815260040160405180910390fd5b5f80516020613aea833981519152426001600160401b038816111580611dab5750611d9e6202a300426138d8565b876001600160401b031610155b15611dd457604051635879da1360e11b81526001600160401b038816600482015260240161051d565b60038101546001600160401b0390611df790600160401b900482168683166138d8565b1115611e2157604051633e1a785160e01b81526001600160401b038516600482015260240161051d565b611e2a8661268e565b611e338561268e565b8751603014611e5a5787516040516326475b2f60e11b815260040161051d91815260200190565b88515f03611e7d5788604051633e08a12560e11b815260040161051d919061310a565b5f801b816006018a604051611e929190613272565b90815260200160405180910390205414611ec1578860405163a41f772f60e01b815260040161051d919061310a565b611ecb845f6127ad565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018e81526020018d81526020018c6001600160401b031681526020018b81526020018a8152602001896001600160401b03168152506040518263ffffffff1660e01b8152600401611f4b9190613951565b5f60405180830381865af4158015611f65573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f8c9190810190613a00565b5f82815260048601602052604090209193509150611faa82826132ce565b5081836006018c604051611fbe9190613272565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ffa90859060040161310a565b6020604051808303815f875af1158015612016573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061203a919061311c565b5f848152600580870160205260408083208151610100810190925280549495509293909291839160ff169081111561207457612074612dd3565b600581111561208557612085612dd3565b815260200160018201805461209990612f90565b80601f01602080910402602001604051908101604052809291908181526020018280546120c590612f90565b80156121105780601f106120e757610100808354040283529160200191612110565b820191905f5260205f20905b8154815290600101906020018083116120f357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c09091015290506001818190525060208082018e90526001600160401b03891660408084018290525f6060850181905260a085019290925260c0840182905260e0840182905286825260058089019093529020825181548493839160ff19169060019084908111156121e0576121e0612dd3565b0217905550602082015160018201906121f990826132ce565b506040820151816002015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160020160086101000a8154816001600160401b0302191690836001600160401b0316021790555060808201518160020160106101000a8154816001600160401b0302191690836001600160401b0316021790555060a08201518160020160186101000a8154816001600160401b0302191690836001600160401b0316021790555060c0820151816003015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060e08201518160030160086101000a8154816001600160401b0302191690836001600160401b03160217905550905050837f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf8e848e8c60405161233f9493929190613a43565b60405180910390a2929c929b50919950505050505050505050565b612362612a17565b61236b82612a60565b610bf081612a79565b5f61237d612c2e565b5f8481525f80516020613b0a83398151915260205260409020600201545f80516020613aea83398151915290600160c01b90046001600160401b03166123c385826127ad565b5f6123cd87612a8a565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612471573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261249891908101906130d9565b6040518263ffffffff1660e01b81526004016124b4919061310a565b6020604051808303815f875af11580156124d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124f4919061311c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a25f8881526005808601602052604091829020825161010081019093528054849391928391839160ff9091169081111561257e5761257e612dd3565b600581111561258f5761258f612dd3565b81526020016001820180546125a390612f90565b80601f01602080910402602001604051908101604052809291908181526020018280546125cf90612f90565b801561261a5780601f106125f15761010080835404028352916020019161261a565b820191905f5260205f20905b8154815290600101906020018083116125fd57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c09091015291975090955050505050505b9250929050565b805163ffffffff161580156126a7575060208101515115155b156126db57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561271e57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b816020015151811015610bf057602082015161273e600183613a7b565b8151811061274e5761274e613178565b60200260200101516001600160a01b03168260200151828151811061277557612775613178565b60200260200101516001600160a01b031610156127a557604051630dbc8d5f60e31b815260040160405180910390fd5b600101612721565b5f80516020613aea8339815191525f6001600160401b0380841690851611156127e1576127da8385613a8e565b90506127ee565b6127eb8484613a8e565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061285b575060018401548151612857916001600160401b0316906138d8565b8210155b15612883576001600160401b03808416606083015282825260408201511660208201526128a2565b828160600181815161289591906133a1565b6001600160401b03169052505b60608101516128b290606461340d565b602082015160018601546001600160401b0392909216916128dd9190600160401b900460ff1661340d565b6001600160401b0316101561291657606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b858160400181815161292891906133a1565b6001600160401b0316905250604081018051869190612948908390613a8e565b6001600160401b03169052506001840154604082015160649161297691600160401b90910460ff169061340d565b6001600160401b031610156129af576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b612a68612a17565b612a70612aff565b61143181612b07565b612a81612a17565b61143181612bef565b5f8181525f80516020613b0a8339815191526020526040812060020180545f80516020613aea8339815191529190600890612ad490600160401b90046001600160401b0316613aae565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612a17565b612b0f612a17565b80355f80516020613aea8339815191529081556014612b346060840160408501613ac9565b60ff161180612b535750612b4e6060830160408401613ac9565b60ff16155b15612b8757612b686060830160408401613ac9565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b612b976060830160408401613ac9565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055612bc86040830160208401613639565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b6113ff612a17565b508054612c0390612f90565b5f825580601f10612c12575050565b601f0160209004905f5260205f20908101906114319190612c73565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115612c87575f8155600101612c74565b5090565b5f60208284031215612c9b575f80fd5b5035919050565b803563ffffffff81168114612cb5575f80fd5b919050565b5f8060408385031215612ccb575f80fd5b82356001600160401b03811115612ce0575f80fd5b830160808186031215612cf1575f80fd5b9150612cff60208401612ca2565b90509250929050565b5f60208284031215612d18575f80fd5b612d2182612ca2565b9392505050565b6001600160401b0381168114611431575f80fd5b5f8060408385031215612d4d575f80fd5b82356001600160401b03811115612d62575f80fd5b830160a08186031215612d73575f80fd5b91506020830135612d8381612d28565b809150509250929050565b6001600160a01b0381168114611431575f80fd5b5f808284036080811215612db4575f80fd5b6060811215612dc1575f80fd5b508291506060830135612d8381612d8e565b634e487b7160e01b5f52602160045260245ffd5b60068110612e0357634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612e21578181015183820152602001612e09565b50505f910152565b5f8151808452612e40816020860160208601612e07565b601f01601f19169290920160200192915050565b60208152612e66602082018351612de7565b5f6020830151610100806040850152612e83610120850183612e29565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612ec260a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612f1a575f80fd5b8135612d2181612d8e565b5f8060208385031215612f36575f80fd5b82356001600160401b0380821115612f4c575f80fd5b818501915085601f830112612f5f575f80fd5b813581811115612f6d575f80fd5b866020828501011115612f7e575f80fd5b60209290920196919550909350505050565b600181811c90821680612fa457607f821691505b602082108103612fc257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020810161148a8284612de7565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561300c5761300c612fd6565b60405290565b604080519081016001600160401b038111828210171561300c5761300c612fd6565b604051601f8201601f191681016001600160401b038111828210171561305c5761305c612fd6565b604052919050565b5f6001600160401b0382111561307c5761307c612fd6565b50601f01601f191660200190565b5f82601f830112613099575f80fd5b81516130ac6130a782613064565b613034565b8181528460208386010111156130c0575f80fd5b6130d1826020830160208701612e07565b949350505050565b5f602082840312156130e9575f80fd5b81516001600160401b038111156130fe575f80fd5b6130d18482850161308a565b602081525f612d216020830184612e29565b5f6020828403121561312c575f80fd5b5051919050565b5f808335601e19843603018112613148575f80fd5b8301803591506001600160401b03821115613161575f80fd5b6020019150600581901b3603821315612687575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126131a0575f80fd5b9190910192915050565b5f82601f8301126131b9575f80fd5b81356131c76130a782613064565b8181528460208386010111156131db575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215613207575f80fd5b61320f612fea565b82356001600160401b0380821115613225575f80fd5b613231368387016131aa565b83526020850135915080821115613246575f80fd5b50613253368286016131aa565b602083015250604083013561326781612d28565b604082015292915050565b5f82516131a0818460208701612e07565b601f821115610ffb57805f5260205f20601f840160051c810160208510156132a85750805b601f840160051c820191505b818110156132c7575f81556001016132b4565b5050505050565b81516001600160401b038111156132e7576132e7612fd6565b6132fb816132f58454612f90565b84613283565b602080601f83116001811461332e575f84156133175750858301515b5f19600386901b1c1916600185901b178555613385565b5f85815260208120601f198616915b8281101561335c5788860151825594840194600190910190840161333d565b508582101561337957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561159f5761159f61338d565b604081525f6133d36040830185612e29565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036134035761340361338d565b6001019392505050565b6001600160401b038181168382160280821691908281146134305761343061338d565b505092915050565b5f808335601e1984360301811261344d575f80fd5b83016020810192503590506001600160401b0381111561346b575f80fd5b803603821315612687575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561355657848303601f19018952813536889003605e190181126134dd575f80fd5b870160606134eb8280613438565b8287526134fb8388018284613479565b9250505061350b86830183613438565b8683038888015261351d838284613479565b92505050604080830135925061353283612d28565b6001600160401b0392909216949091019390935297830197908301906001016134b8565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561358781612d8e565b6001600160a01b031660608381019190915283013536849003601e190181126135ae575f80fd5b83016020810190356001600160401b038111156135c9575f80fd5b8060051b36038213156135da575f80fd5b6080808501526135ee60a0850182846134a1565b95945050505050565b5f808335601e1984360301811261360c575f80fd5b8301803591506001600160401b03821115613625575f80fd5b602001915036819003821315612687575f80fd5b5f60208284031215613649575f80fd5b8135612d2181612d28565b5f8235603e198336030181126131a0575f80fd5b5f60408236031215613678575f80fd5b613680613012565b61368983612ca2565b81526020808401356001600160401b03808211156136a5575f80fd5b9085019036601f8301126136b7575f80fd5b8135818111156136c9576136c9612fd6565b8060051b91506136da848301613034565b81815291830184019184810190368411156136f3575f80fd5b938501935b8385101561371d578435925061370d83612d8e565b82825293850193908501906136f8565b94860194909452509295945050505050565b80518015158114612cb5575f80fd5b5f806040838503121561374f575f80fd5b82519150612cff6020840161372f565b5f815461376b81612f90565b80855260206001838116801561378857600181146137a2576137cd565b60ff1985168884015283151560051b8801830195506137cd565b865f52825f205f5b858110156137c55781548a82018601529083019084016137aa565b890184019650505b505050505092915050565b604081525f6133d3604083018561375f565b602081525f612d21602083018461375f565b5f805f6060848603121561380e575f80fd5b83519250602084015161382081612d28565b604085015190925061383181612d28565b809150509250925092565b818382375f9101908152919050565b5f806040838503121561385c575f80fd5b82516001600160401b0380821115613872575f80fd5b9084019060608287031215613885575f80fd5b61388d612fea565b82518152602083015161389f81612d8e565b60208201526040830151828111156138b5575f80fd5b6138c18882860161308a565b6040830152509350612cff9150506020840161372f565b8082018082111561148a5761148a61338d565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156139465784516001600160a01b0316825293830193600192909201919083019061391d565b509695505050505050565b60208152815160208201525f602083015160e06040840152613977610100840182612e29565b90506040840151601f19808584030160608601526139958383612e29565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526139c583836138eb565b925060a08601519150808584030160c0860152506139e382826138eb565b91505060c0840151610bd760e08501826001600160401b03169052565b5f8060408385031215613a11575f80fd5b8251915060208301516001600160401b03811115613a2d575f80fd5b613a398582860161308a565b9150509250929050565b608081525f613a556080830187612e29565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b8181038181111561148a5761148a61338d565b6001600160401b0382811682821603908082111561159f5761159f61338d565b5f6001600160401b038083168181036134035761340361338d565b5f60208284031215613ad9575f80fd5b813560ff81168114612d21575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a26469706673582212204186b1b4c1d56af18e97548cda055449433fa2af7e803af10fe6217256e606d264736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. @@ -2182,7 +2182,7 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseRegisteredInitialV // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122017004d9191e69227d5fc936d07424760c48913f19025eee71ffca047901c2db664736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/contracts/validator-manager/ACP99Manager.sol b/contracts/validator-manager/ACP99Manager.sol index fd9895439..dce17a9db 100644 --- a/contracts/validator-manager/ACP99Manager.sol +++ b/contracts/validator-manager/ACP99Manager.sol @@ -143,6 +143,7 @@ abstract contract ACP99Manager { * @param disableOwner The disable owner of the validator. * @param weight The weight of the node on the L1. * @return validationID The ID of the registered validator. + * @return validator The registered validator. */ function _initiateValidatorRegistration( bytes memory nodeID, @@ -151,7 +152,7 @@ abstract contract ACP99Manager { PChainOwner memory remainingBalanceOwner, PChainOwner memory disableOwner, uint64 weight - ) internal virtual returns (bytes32 validationID); + ) internal virtual returns (bytes32 validationID, Validator memory validator); /** * @notice Completes the validator registration process by returning an acknowledgement of the registration of a @@ -174,8 +175,12 @@ abstract contract ACP99Manager { * Emits an {InitiatedValidatorRemoval} on success. * * @param validationID The ID of the validator to remove. + * @return validator The validator to remove. */ - function _initiateValidatorRemoval(bytes32 validationID) internal virtual; + function _initiateValidatorRemoval(bytes32 validationID) + internal + virtual + returns (Validator memory validator); /** * @notice Completes validator removal by consuming an RegisterL1ValidatorMessage from the P-Chain acknowledging @@ -198,13 +203,13 @@ abstract contract ACP99Manager { * * @param validationID The ID of the validator to modify. * @param weight The new weight of the validator. - * @return nonce The validator nonce associated with the weight change. * @return messageID The ID of the L1ValidatorWeightMessage used to update the validator's weight. + * @return validator The updated validator. */ function _initiateValidatorWeightUpdate( bytes32 validationID, uint64 weight - ) internal virtual returns (uint64 nonce, bytes32 messageID); + ) internal virtual returns (bytes32 messageID, Validator memory validator); /** * @notice Completes the validator weight update process by consuming a L1ValidatorWeightMessage from the P-Chain diff --git a/contracts/validator-manager/PoAValidatorManager.sol b/contracts/validator-manager/PoAValidatorManager.sol index 2f6ffa823..65000706e 100644 --- a/contracts/validator-manager/PoAValidatorManager.sol +++ b/contracts/validator-manager/PoAValidatorManager.sol @@ -55,7 +55,7 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU ValidatorRegistrationInput calldata registrationInput, uint64 weight ) external onlyOwner returns (bytes32 validationID) { - return _initiateValidatorRegistration({ + (validationID,) = _initiateValidatorRegistration({ nodeID: registrationInput.nodeID, blsPublicKey: registrationInput.blsPublicKey, registrationExpiry: registrationInput.registrationExpiry, diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 6c1be7c06..180b98f32 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -323,10 +323,7 @@ abstract contract PoSValidatorManager is ) internal returns (bool) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); - // TODONOW: Functions that modify Validator state invalid any references to the Validator object. - // How can we make this safer to use? - _initiateValidatorRemoval(validationID); - Validator memory validator = getValidator(validationID); + Validator memory validator = _initiateValidatorRemoval(validationID); // Non-PoS validators are required to boostrap the network, but are not eligible for rewards. if (!_isPoSValidator(validationID)) { @@ -482,7 +479,7 @@ abstract contract PoSValidatorManager is uint256 lockedValue = _lock(stakeAmount); uint64 weight = valueToWeight(lockedValue); - bytes32 validationID = _initiateValidatorRegistration({ + (bytes32 validationID,) = _initiateValidatorRegistration({ nodeID: registrationInput.nodeID, blsPublicKey: registrationInput.blsPublicKey, registrationExpiry: registrationInput.registrationExpiry, @@ -559,10 +556,10 @@ abstract contract PoSValidatorManager is revert MaxWeightExceeded(newValidatorWeight); } - (uint64 nonce, bytes32 messageID) = - _initiateValidatorWeightUpdate(validationID, newValidatorWeight); + bytes32 messageID; + (messageID, validator) = _initiateValidatorWeightUpdate(validationID, newValidatorWeight); - bytes32 delegationID = keccak256(abi.encodePacked(validationID, nonce)); + bytes32 delegationID = keccak256(abi.encodePacked(validationID, validator.sentNonce)); // Store the delegation information. Set the delegator status to pending added, // so that it can be properly started in the complete step, even if the delivered @@ -572,14 +569,14 @@ abstract contract PoSValidatorManager is $._delegatorStakes[delegationID].validationID = validationID; $._delegatorStakes[delegationID].weight = weight; $._delegatorStakes[delegationID].startTime = 0; - $._delegatorStakes[delegationID].startingNonce = nonce; + $._delegatorStakes[delegationID].startingNonce = validator.sentNonce; $._delegatorStakes[delegationID].endingNonce = 0; emit DelegatorAdded({ delegationID: delegationID, validationID: validationID, delegatorAddress: delegatorAddress, - nonce: nonce, + nonce: validator.sentNonce, validatorWeight: newValidatorWeight, delegatorWeight: weight, setWeightMessageID: messageID @@ -754,9 +751,9 @@ abstract contract PoSValidatorManager is // initialize the removal. $._delegatorStakes[delegationID].status = DelegatorStatus.PendingRemoved; - ($._delegatorStakes[delegationID].endingNonce,) = + (, validator) = _initiateValidatorWeightUpdate(validationID, validator.weight - delegator.weight); - + $._delegatorStakes[delegationID].endingNonce = validator.sentNonce; uint256 reward = _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 4bd80533f..429cd5d0e 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -252,7 +252,7 @@ abstract contract ValidatorManager is PChainOwner memory remainingBalanceOwner, PChainOwner memory disableOwner, uint64 weight - ) internal virtual override initializedValidatorSet returns (bytes32) { + ) internal virtual override initializedValidatorSet returns (bytes32, Validator memory) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); if ( @@ -302,19 +302,21 @@ abstract contract ValidatorManager is // Submit the message to the Warp precompile. bytes32 messageID = WARP_MESSENGER.sendWarpMessage(registerL1ValidatorMessage); - $._validationPeriods[validationID].status = ValidatorStatus.PendingAdded; - $._validationPeriods[validationID].nodeID = nodeID; - $._validationPeriods[validationID].startingWeight = weight; - $._validationPeriods[validationID].sentNonce = 0; - $._validationPeriods[validationID].weight = weight; - $._validationPeriods[validationID].startTime = 0; // The validation period only starts once the registration is acknowledged. - $._validationPeriods[validationID].endTime = 0; + Validator memory validator = $._validationPeriods[validationID]; + validator.status = ValidatorStatus.PendingAdded; + validator.nodeID = nodeID; + validator.startingWeight = weight; + validator.sentNonce = 0; + validator.weight = weight; + validator.startTime = 0; // The validation period only starts once the registration is acknowledged. + validator.endTime = 0; + $._validationPeriods[validationID] = validator; emit InitiatedValidatorRegistration( validationID, nodeID, messageID, registrationExpiry, weight ); - return validationID; + return (validationID, validator); } /** @@ -433,7 +435,12 @@ abstract contract ValidatorManager is * Any rewards for this validation period will stop accruing when this function is called. * @param validationID The ID of the validation period being ended. */ - function _initiateValidatorRemoval(bytes32 validationID) internal virtual override { + function _initiateValidatorRemoval(bytes32 validationID) + internal + virtual + override + returns (Validator memory) + { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); // Ensure the validation period is active. @@ -451,15 +458,20 @@ abstract contract ValidatorManager is // on the P-Chain. validator.endTime = uint64(block.timestamp); + uint64 endingWeight = validator.weight; + // Save the validator updates. $._validationPeriods[validationID] = validator; - (, bytes32 messageID) = _initiateValidatorWeightUpdate(validationID, 0); + bytes32 messageID; + (messageID, validator) = _initiateValidatorWeightUpdate(validationID, 0); // Emit the event to signal the start of the validator removal process. emit InitiatedValidatorRemoval( - validationID, messageID, validator.weight, uint64(block.timestamp) + validationID, messageID, endingWeight, uint64(block.timestamp) ); + + return validator; } /** @@ -558,7 +570,7 @@ abstract contract ValidatorManager is function _initiateValidatorWeightUpdate( bytes32 validationID, uint64 newWeight - ) internal virtual override returns (uint64, bytes32) { + ) internal virtual override returns (bytes32, Validator memory) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); uint64 validatorWeight = $._validationPeriods[validationID].weight; @@ -581,7 +593,7 @@ abstract contract ValidatorManager is weight: newWeight }); - return (nonce, messageID); + return (messageID, $._validationPeriods[validationID]); } function _getChurnPeriodSeconds() internal view returns (uint64) { From 3b3ae7da41d5a42a36a800382abba82936630705 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 12:20:27 -0600 Subject: [PATCH 16/29] Revert "internal functions return validator state" This reverts commit 28046581fbbc426ca17be4c490c62f797a66d6dc. --- .../ERC20TokenStakingManager.go | 4 +- .../NativeTokenStakingManager.go | 4 +- .../PoAValidatorManager.go | 4 +- contracts/validator-manager/ACP99Manager.sol | 13 ++---- .../validator-manager/PoAValidatorManager.sol | 2 +- .../validator-manager/PoSValidatorManager.sol | 21 +++++----- .../validator-manager/ValidatorManager.sol | 40 +++++++------------ 7 files changed, 37 insertions(+), 51 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 23e7c62b8..ee30af02e 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161622b38038061622b83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6160de8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004615083565b6105f4565b005b6102776102873660046150be565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004615083565b610898565b6102776102cc3660046150d5565b6108a4565b6102776102df366004615123565b610e12565b6102f76102f23660046150be565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004615158565b610eda565b61027761034c366004615083565b610eed565b61036461035f3660046151cb565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004615158565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004615123565b610f49565b6103646103cb366004615232565b61119a565b6103645f81565b6102776103e5366004615083565b6111ba565b5f80516020616069833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004615158565b6111c6565b61027761043c366004615123565b6111d2565b610294603081565b61027761045736600461524d565b6113c5565b61027761046a3660046150be565b611476565b61036461047d36600461527b565b61150a565b610277610490366004615158565b6115e3565b6103646104a3366004615294565b6115ef565b6102776104b63660046152b4565b61161b565b6103646104c936600461527b565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b6102776105113660046150be565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b6102776105533660046150be565b611b70565b610294601481565b61057361056e36600461527b565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e3660046150be565b611e0f565b6040516102a2919061535c565b6102f76202a30081565b6103645f8051602061606983398151915281565b6102776105dc36600461524d565b611f5e565b6103646105ef366004615412565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115610648576106486152e7565b6005811115610659576106596152e7565b815260200160018201805461066d9061547d565b80601f01602080910402602001604051908101604052809291908181526020018280546106999061547d565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c6152e7565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff16906004016154b5565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261083691908101906155be565b6040518263ffffffff1660e01b815260040161085291906155ef565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108929190615601565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d9190615601565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615618565b6001600160a01b0316146109ba576109956060840160408501615618565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c86060850185615633565b905090505f805b828163ffffffff161015610c08575f6109eb6060880188615633565b8363ffffffff16818110610a0157610a01615678565b9050602002810190610a13919061568c565b610a1c906156f7565b80516040519192505f916006880191610a3491615772565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f91906004016155ef565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad91615772565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb9190615601565b90508086600601835f0151604051610b039190615772565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b4390826157c7565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb29085615896565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed9291906158b6565b60405180910390a2505080610c01906158e0565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff1683615902565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123b3565b604001516040518263ffffffff1660e01b8152600401610cc291906155ef565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d019190615601565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b9190615a58565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c91908101906155be565b90505f600282604051610d8f9190615772565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd9190615601565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c9565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c6152e7565b14610e7c578060405163170cc93360e21b815260040161078f91906154b5565b61089283836124f2565b5f80610e90612791565b60030154610e9e9084615aec565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127b5565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f8051602061608983398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c78565b5f610f52612791565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b6152e7565b6003811115610f9c57610f9c6152e7565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b9050600183516003811115611029576110296152e7565b1461104a578251604051633b0d540d60e21b815261078f9190600401615b0b565b60048151600581111561105f5761105f6152e7565b036110755761106d86612ca4565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612791565b60030154610ed4906001600160401b038416615b25565b6106008383835f612c78565b610ee6848484846127b5565b6111da6129f3565b5f6111e3612791565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c6152e7565b600381111561122d5761122d6152e7565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a66152e7565b146112c7578051604051633b0d540d60e21b815261078f9190600401615b0b565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f86152e7565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca4565b5050506113c160015f8051602061608983398151915255565b5050565b5f6113ce612791565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612791565b90505f61148b83611e0f565b51905060048160058111156114a2576114a26152e7565b146114c2578060405163170cc93360e21b815260040161078f91906154b5565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e75565b5f6115136129f3565b5f61151c612791565b90505f8061152985612e9f565b91509150611536826124c9565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b6152e7565b036115aa576115aa8185612e75565b6115c0826115bb856040015161119a565b613254565b509193505050505b6115de60015f8051602061608983398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613277565b9050610ed460015f8051602061608983398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134c4565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123b3565b604001516040518263ffffffff1660e01b815260040161174b91906155ef565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615b3c565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c99061547d565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff1690811115611814576118146152e7565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff16906004016154b5565b5f828152600484016020526040812061185f91614fcf565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615bd8565b60405180910390a2509392505050565b5f6118fe612791565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611937576119376152e7565b6003811115611948576119486152e7565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c16152e7565b141580156119e257506003815160038111156119df576119df6152e7565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615b0b565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af291908101906155be565b6040518263ffffffff1660e01b8152600401611b0e91906155ef565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee69190615601565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b979061547d565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be26152e7565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff16906004016154b5565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615bea565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106009190615601565b5f805f611c98846123b3565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd891906155ef565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615bfc565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17615006565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a6152e7565b6005811115611e6b57611e6b6152e7565b8152602001600182018054611e7f9061547d565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab9061547d565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612791565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615c3c565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612791565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c06152e7565b60038111156120d1576120d16152e7565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e6152e7565b1461217f578251604051633b0d540d60e21b815261078f9190600401615b0b565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b031690615896565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b600281516005811115612230576122306152e7565b0361235b5760028401546080840151612252916001600160401b031690615896565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124f2565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615c4b565b6134de565b60608101515f8c8152600788016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155909250905061231d84888c6137eb565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b600481516005811115612370576123706152e7565b036123975761238083878b6137eb565b5061238a89612ca4565b6001945050505050610f26565b805160405163170cc93360e21b815261078f91906004016154b5565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612417573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243e9190810190615c6b565b915091508061246057604051636b2f19e960e01b815260040160405180910390fd5b815115612486578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124c2576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124d3612791565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561253d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125649190810190615c6b565b915091508061258657604051636b2f19e960e01b815260040160405180910390fd5b5f61258f612791565b60058101548451919250146125bd578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f9576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b031615612635576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161267291906155ef565b6040805180830381865af415801561268c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b09190615cfb565b915091508188146126d75760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b039081169082161115612768575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612786565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127bf612791565b90505f6127cb876139d9565b90506127d6876124c9565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b031690615896565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124f2565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129699190615601565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615d1e565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020616089833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612791565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613cca565b90505f612b0682610e86565b90505f612bcd612b168a80615d31565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c615d31565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01615232565b612ba860608e018e615d73565b612bb190615d87565b612bbe60808f018f615d73565b612bc790615d87565b87613ced565b505f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f8051602061608983398151915255565b612c84848484846127b5565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cad612791565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce657612ce66152e7565b6003811115612cf757612cf76152e7565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6b614309565b8260800151612d7a9190615896565b6001600160401b0316421015612dae5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e09575060208201515b5f80612e16838886614324565b91509150612e2f85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7e612791565b5f838152600a820160205260408120805491905590915061089284826143d1565b5f612ea8615006565b5f612eb1612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed8886123b3565b604001516040518263ffffffff1660e01b8152600401612ef891906155ef565b6040805180830381865af4158015612f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f369190615b3c565b915091508015612f5d57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9557612f956152e7565b6005811115612fa657612fa66152e7565b8152602001600182018054612fba9061547d565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe69061547d565b80156130315780601f1061300857610100808354040283529160200191613031565b820191905f5260205f20905b81548152906001019060200180831161301457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a9576130a96152e7565b141580156130ca57506001815160058111156130c7576130c76152e7565b14155b156130eb57805160405163170cc93360e21b815261078f91906004016154b5565b600381516005811115613100576131006152e7565b0361310e5760048152613113565b600581525b8360060181602001516040516131299190615772565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316c5761316c6152e7565b02179055506020820151600182019061318590826157c7565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020616069833981519152546113c1906001600160a01b03168383614447565b5f80613281612791565b90505f6132906102f285613cca565b90505f61329c87611e0f565b90506132a7876124c9565b6132c7576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132dc576132dc6152e7565b146132fd57805160405163170cc93360e21b815261078f91906004016154b5565b5f828260a0015161330e9190615896565b905083600201600a9054906101000a90046001600160401b031682604001516133379190615902565b6001600160401b0316816001600160401b0316111561337457604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f61337f89836134de565b60608101516040519195509192505f916133b4918c919060200191825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078a019093529120805491925060019160ff1916828002179055505f8181526007870160209081526040918290208054610100600160a81b0319166101006001600160a01b038e16908102919091178255600182018e9055600290910180546060898101516001600160401b038c81166001600160c01b03199094168417600160801b928216928302176001600160c01b031690945586519081529289169483019490945293810193909352908201849052908b9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a4955050505050505b9392505050565b6134cc6144a6565b6134d5826144f1565b6113c18161456e565b5f6134e7615006565b5f6134f0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b031661352085826145d6565b5f61352a87614843565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135ce573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135f591908101906155be565b6040518263ffffffff1660e01b815260040161361191906155ef565b6020604051808303815f875af115801561362d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136519190615601565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a25f8881526005808601602052604091829020825161010081019093528054849391928391839160ff909116908111156136db576136db6152e7565b60058111156136ec576136ec6152e7565b81526020016001820180546137009061547d565b80601f016020809104026020016040519081016040528092919081815260200182805461372c9061547d565b80156137775780601f1061374e57610100808354040283529160200191613777565b820191905f5260205f20905b81548152906001019060200180831161375a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c09091015291975090955050505050505b9250929050565b5f806137f5612791565b90505f6138058660400151611e0f565b90505f60038251600581111561381d5761381d6152e7565b148061383b5750600482516005811115613839576138396152e7565b145b1561384b575060e0810151613888565b600282516005811115613860576138606152e7565b0361386c575042613888565b815160405163170cc93360e21b815261078f91906004016154b5565b86608001516001600160401b0316816001600160401b0316116138b0575f93505050506134bd565b600483015460608801515f916001600160a01b031690634f22429f906138d59061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613956573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061397a9190615601565b90506001600160a01b03871661399257876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b6139e1615006565b5f6139ea612059565b5f848152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613a2457613a246152e7565b6005811115613a3557613a356152e7565b8152602001600182018054613a499061547d565b80601f0160208091040260200160405190810160405280929190818152602001828054613a759061547d565b8015613ac05780601f10613a9757610100808354040283529160200191613ac0565b820191905f5260205f20905b815481529060010190602001808311613aa357829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613b3857613b386152e7565b14613b6b575f8481526005830160205260409081902054905163170cc93360e21b815261078f9160ff16906004016154b5565b60038152426001600160401b031660e082015260a08101515f85815260058481016020526040909120835181548593839160ff1916906001908490811115613bb557613bb56152e7565b021790555060208201516001820190613bce90826157c7565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613c6e86826134de565b604080518381526001600160401b038681166020830152421681830152905191955091925087917fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273919081900360600190a25090949350505050565b5f610ed4825f80516020616069833981519152546001600160a01b0316906148ac565b5f613cf6615006565b613cfe612059565b6007015460ff16613d2257604051637fab81e560e01b815260040160405180910390fd5b5f613d2b612059565b905042876001600160401b0316111580613d5a5750613d4d6202a30042615d1e565b876001600160401b031610155b15613d8357604051635879da1360e11b81526001600160401b038816600482015260240161078f565b60038101546001600160401b0390613da690600160401b90048216868316615d1e565b1115613dd057604051633e1a785160e01b81526001600160401b038516600482015260240161078f565b613dd9866148b8565b613de2856148b8565b8751603014613e095787516040516326475b2f60e11b815260040161078f91815260200190565b88515f03613e2c5788604051633e08a12560e11b815260040161078f91906155ef565b5f801b816006018a604051613e419190615772565b90815260200160405180910390205414613e70578860405163a41f772f60e01b815260040161078f91906155ef565b613e7a845f6145d6565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018e81526020018d81526020018c6001600160401b031681526020018b81526020018a8152602001896001600160401b03168152506040518263ffffffff1660e01b8152600401613efa9190615eb4565b5f60405180830381865af4158015613f14573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613f3b9190810190615f6b565b5f82815260048601602052604090209193509150613f5982826157c7565b5081836006018c604051613f6d9190615772565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613fa99085906004016155ef565b6020604051808303815f875af1158015613fc5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fe99190615601565b5f848152600580870160205260408083208151610100810190925280549495509293909291839160ff1690811115614023576140236152e7565b6005811115614034576140346152e7565b81526020016001820180546140489061547d565b80601f01602080910402602001604051908101604052809291908181526020018280546140749061547d565b80156140bf5780601f10614096576101008083540402835291602001916140bf565b820191905f5260205f20905b8154815290600101906020018083116140a257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c09091015290506001818190525060208082018e90526001600160401b03891660408084018290525f6060850181905260a085019290925260c0840182905260e0840182905286825260058089019093529020825181548493839160ff191690600190849081111561418f5761418f6152e7565b0217905550602082015160018201906141a890826157c7565b506040820151816002015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160020160086101000a8154816001600160401b0302191690836001600160401b0316021790555060808201518160020160106101000a8154816001600160401b0302191690836001600160401b0316021790555060a08201518160020160186101000a8154816001600160401b0302191690836001600160401b0316021790555060c0820151816003015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060e08201518160030160086101000a8154816001600160401b0302191690836001600160401b03160217905550905050837f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf8e848e8c6040516142ee9493929190615fae565b60405180910390a2929c929b50919950505050505050505050565b5f614312612059565b600101546001600160401b0316919050565b5f805f61432f612791565b5f868152600882016020526040812080549082905591925090819080156143c3575f8781526006850160205260409020546127109061437990600160a01b900461ffff1683615b25565b6143839190615aec565b91508184600a015f8981526020019081526020015f205f8282546143a79190615d1e565b909155506143b790508282615fe6565b92506143c389846143d1565b509097909650945050505050565b5f5f8051602061606983398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b15801561442c575f80fd5b505af115801561443e573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506149d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166144ef57604051631afcd79f60e31b815260040160405180910390fd5b565b6144f96144a6565b61450281614a38565b61450a614a51565b61456b6060820135608083013561452760c0850160a08601615232565b61453760e0860160c08701615ff9565b614548610100870160e08801616012565b61010087013561456061014089016101208a01615618565b886101400135614a61565b50565b6145766144a6565b5f805160206160698339815191526001600160a01b0382166145b657604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6145df612059565b90505f826001600160401b0316846001600160401b0316111561460d576146068385615c4b565b905061461a565b6146178484615c4b565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580614687575060018401548151614683916001600160401b031690615d1e565b8210155b156146af576001600160401b03808416606083015282825260408201511660208201526146ce565b82816060018181516146c19190615896565b6001600160401b03169052505b60608101516146de906064615902565b602082015160018601546001600160401b0392909216916147099190600160401b900460ff16615902565b6001600160401b0316101561474257606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b85816040018181516147549190615896565b6001600160401b0316905250604081018051869190614774908390615c4b565b6001600160401b0316905250600184015460408201516064916147a291600160401b90910460ff1690615902565b6001600160401b031610156147db576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061484d612059565b5f848152600582016020526040902060020180549192509060089061488190600160401b90046001600160401b0316616032565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134bd833384614c23565b805163ffffffff161580156148d1575060208101515115155b1561490557805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561494857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c1576020820151614968600183615fe6565b8151811061497857614978615678565b60200260200101516001600160a01b03168260200151828151811061499f5761499f615678565b60200260200101516001600160a01b031610156149cf57604051630dbc8d5f60e31b815260040160405180910390fd5b60010161494b565b5f6149eb6001600160a01b03841683614d86565b905080515f14158015614a0f575080806020019051810190614a0d919061604d565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b614a406144a6565b614a48614d93565b61456b81614d9b565b614a596144a6565b6144ef614e7f565b614a696144a6565b5f614a72612791565b905061ffff86161580614a8a575061271061ffff8716115b15614aae57604051635f12e6c360e11b815261ffff8716600482015260240161078f565b87891115614ad25760405163222d164360e21b8152600481018a905260240161078f565b60ff85161580614ae55750600a60ff8616115b15614b085760405163170db35960e31b815260ff8616600482015260240161078f565b614b10614309565b6001600160401b0316876001600160401b03161015614b4c576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f03614b6c5760405163a733007160e01b815260040160405180910390fd5b81614b8d57604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614c69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614c8d9190615601565b9050614ca46001600160a01b038616853086614e87565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614ce8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d0c9190615601565b9050818111614d725760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b614d7c8282615fe6565b9695505050505050565b60606134bd83835f614ec0565b6144ef6144a6565b614da36144a6565b5f614dac612059565b8235815590506014614dc46060840160408501616012565b60ff161180614de35750614dde6060830160408401616012565b60ff16155b15614e1757614df86060830160408401616012565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614e276060830160408401616012565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614e586040830160208401615232565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c656144a6565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd90608401614474565b606081471015614ee55760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614f009190615772565b5f6040518083038185875af1925050503d805f8114614f3a576040519150601f19603f3d011682016040523d82523d5f602084013e614f3f565b606091505b5091509150614d7c868383606082614f5f57614f5a82614fa6565b6134bd565b8151158015614f7657506001600160a01b0384163b155b15614f9f57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134bd565b805115614fb65780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614fdb9061547d565b5f825580601f10614fea575050565b601f0160209004905f5260205f209081019061456b919061504b565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561505f575f815560010161504c565b5090565b801515811461456b575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215615095575f80fd5b8335925060208401356150a781615063565b91506150b560408501615070565b90509250925092565b5f602082840312156150ce575f80fd5b5035919050565b5f80604083850312156150e6575f80fd5b82356001600160401b038111156150fb575f80fd5b83016080818603121561510c575f80fd5b915061511a60208401615070565b90509250929050565b5f8060408385031215615134575f80fd5b8235915061511a60208401615070565b6001600160a01b038116811461456b575f80fd5b5f805f806080858703121561516b575f80fd5b84359350602085013561517d81615063565b925061518b60408601615070565b9150606085013561519b81615144565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b038116811461456b575f80fd5b5f805f80608085870312156151de575f80fd5b84356001600160401b038111156151f3575f80fd5b850160a08188031215615204575f80fd5b9350615212602086016151a6565b92506040850135615222816151b7565b9396929550929360600135925050565b5f60208284031215615242575f80fd5b81356134bd816151b7565b5f806040838503121561525e575f80fd5b82359150602083013561527081615144565b809150509250929050565b5f6020828403121561528b575f80fd5b6134bd82615070565b5f80604083850312156152a5575f80fd5b50508035926020909101359150565b5f808284036101808112156152c7575f80fd5b610160808212156152d6575f80fd5b849350830135905061527081615144565b634e487b7160e01b5f52602160045260245ffd5b6006811061530b5761530b6152e7565b9052565b5f5b83811015615329578181015183820152602001615311565b50505f910152565b5f815180845261534881602086016020860161530f565b601f01601f19169290920160200192915050565b6020815261536e6020820183516152fb565b5f602083015161010080604085015261538b610120850183615331565b915060408501516001600160401b038082166060870152806060880151166080870152505060808501516153ca60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215615423575f80fd5b82356001600160401b0380821115615439575f80fd5b818501915085601f83011261544c575f80fd5b81358181111561545a575f80fd5b86602082850101111561546b575f80fd5b60209290920196919550909350505050565b600181811c9082168061549157607f821691505b6020821081036154af57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed482846152fb565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156154f9576154f96154c3565b60405290565b604080519081016001600160401b03811182821017156154f9576154f96154c3565b604051601f8201601f191681016001600160401b0381118282101715615549576155496154c3565b604052919050565b5f6001600160401b03821115615569576155696154c3565b50601f01601f191660200190565b5f82601f830112615586575f80fd5b815161559961559482615551565b615521565b8181528460208386010111156155ad575f80fd5b610f2682602083016020870161530f565b5f602082840312156155ce575f80fd5b81516001600160401b038111156155e3575f80fd5b610f2684828501615577565b602081525f6134bd6020830184615331565b5f60208284031215615611575f80fd5b5051919050565b5f60208284031215615628575f80fd5b81356134bd81615144565b5f808335601e19843603018112615648575f80fd5b8301803591506001600160401b03821115615661575f80fd5b6020019150600581901b36038213156137e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156a0575f80fd5b9190910192915050565b5f82601f8301126156b9575f80fd5b81356156c761559482615551565b8181528460208386010111156156db575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615707575f80fd5b61570f6154d7565b82356001600160401b0380821115615725575f80fd5b615731368387016156aa565b83526020850135915080821115615746575f80fd5b50615753368286016156aa565b6020830152506040830135615767816151b7565b604082015292915050565b5f82516156a081846020870161530f565b601f82111561060057805f5260205f20601f840160051c810160208510156157a85750805b601f840160051c820191505b81811015610ee6575f81556001016157b4565b81516001600160401b038111156157e0576157e06154c3565b6157f4816157ee845461547d565b84615783565b602080601f831160018114615827575f84156158105750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b8281101561585557888601518255948401946001909101908401615836565b508582101561587257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124c2576124c2615882565b604081525f6158c86040830185615331565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036158f8576158f8615882565b6001019392505050565b6001600160401b0381811683821602808216919082811461592557615925615882565b505092915050565b5f808335601e19843603018112615942575f80fd5b83016020810192503590506001600160401b03811115615960575f80fd5b8036038213156137e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015615a4b57848303601f19018952813536889003605e190181126159d2575f80fd5b870160606159e0828061592d565b8287526159f0838801828461596e565b92505050615a008683018361592d565b86830388880152615a1283828461596e565b925050506040808301359250615a27836151b7565b6001600160401b0392909216949091019390935297830197908301906001016159ad565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135615a7c81615144565b6001600160a01b031660608381019190915283013536849003601e19018112615aa3575f80fd5b83016020810190356001600160401b03811115615abe575f80fd5b8060051b3603821315615acf575f80fd5b608080850152615ae360a085018284615996565b95945050505050565b5f82615b0657634e487b7160e01b5f52601260045260245ffd5b500490565b6020810160048310615b1f57615b1f6152e7565b91905290565b8082028115828204841417610ed457610ed4615882565b5f8060408385031215615b4d575f80fd5b82519150602083015161527081615063565b5f8154615b6b8161547d565b808552602060018381168015615b885760018114615ba257615bcd565b60ff1985168884015283151560051b880183019550615bcd565b865f52825f205f5b85811015615bc55781548a8201860152908301908401615baa565b890184019650505b505050505092915050565b604081525f6158c86040830185615b5f565b602081525f6134bd6020830184615b5f565b5f805f60608486031215615c0e575f80fd5b835192506020840151615c20816151b7565b6040850151909250615c31816151b7565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124c2576124c2615882565b5f8060408385031215615c7c575f80fd5b82516001600160401b0380821115615c92575f80fd5b9084019060608287031215615ca5575f80fd5b615cad6154d7565b825181526020830151615cbf81615144565b6020820152604083015182811115615cd5575f80fd5b615ce188828601615577565b604083015250809450505050602083015161527081615063565b5f8060408385031215615d0c575f80fd5b825191506020830151615270816151b7565b80820180821115610ed457610ed4615882565b5f808335601e19843603018112615d46575f80fd5b8301803591506001600160401b03821115615d5f575f80fd5b6020019150368190038213156137e4575f80fd5b5f8235603e198336030181126156a0575f80fd5b5f60408236031215615d97575f80fd5b615d9f6154ff565b615da883615070565b81526020808401356001600160401b0380821115615dc4575f80fd5b9085019036601f830112615dd6575f80fd5b813581811115615de857615de86154c3565b8060051b9150615df9848301615521565b8181529183018401918481019036841115615e12575f80fd5b938501935b83851015615e3c5784359250615e2c83615144565b8282529385019390850190615e17565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615ea95784516001600160a01b03168252938301936001929092019190830190615e80565b509695505050505050565b60208152815160208201525f602083015160e06040840152615eda610100840182615331565b90506040840151601f1980858403016060860152615ef88383615331565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615f288383615e4e565b925060a08601519150808584030160c086015250615f468282615e4e565b91505060c0840151615f6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215615f7c575f80fd5b8251915060208301516001600160401b03811115615f98575f80fd5b615fa485828601615577565b9150509250929050565b608081525f615fc06080830187615331565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed4615882565b5f60208284031215616009575f80fd5b6134bd826151a6565b5f60208284031215616022575f80fd5b813560ff811681146134bd575f80fd5b5f6001600160401b038083168181036158f8576158f8615882565b5f6020828403121561605d575f80fd5b81516134bd8161506356fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212207f299db3d8b7ca34e1e681406dd83771eed7f7bee7496a59412931b901ee943064736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220ac7367027bb3b334db593d0a3276740bf09687e2f8947a6fe0d701dc087c976c64736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -3305,7 +3305,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseUptimeUp // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122017004d9191e69227d5fc936d07424760c48913f19025eee71ffca047901c2db664736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index a1c5644b0..489a753b8 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615f83380380615f8383398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e368061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614e69565b610792565b005b348015610279575f80fd5b5061026c610288366004614ea4565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614ebb565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614e69565b610b13565b348015610301575f80fd5b5061026c610310366004614ed2565b610b1f565b348015610320575f80fd5b5061026c61032f366004614f20565b61108d565b34801561033f575f80fd5b5061035361034e366004614ea4565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614f55565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614e69565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614f55565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614f20565b61118f565b348015610497575f80fd5b506104176104a6366004614fb7565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614e69565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614f55565b61140c565b348015610507575f80fd5b5061026c610516366004614f20565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614fd2565b61160b565b348015610559575f80fd5b5061026c610568366004614ea4565b6116bc565b348015610578575f80fd5b50610417610587366004615000565b611750565b348015610597575f80fd5b5061026c6105a6366004614f55565b611829565b3480156105b6575f80fd5b506104176105c5366004615000565b611835565b6104176105d836600461502a565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614ea4565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614ea4565b611cdf565b6104176106bd366004614ea4565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004615000565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614ea4565b611faa565b6040516102ce9190615100565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614fd2565b6120f9565b34801561077e575f80fd5b5061041761078d3660046151b6565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e661508b565b60058111156107f7576107f761508b565b815260200160018201805461080b90615221565b80601f016020809104026020016040519081016040528092919081815260200182805461083790615221565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa61508b565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401615253565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d4919081019061535c565b6040518263ffffffff1660e01b81526004016109f0919061538d565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a30919061539f565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb8919061539f565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf260608501604086016153b6565b6001600160a01b031614610c3557610c1060608401604085016153b6565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c4360608501856153d1565b905090505f805b828163ffffffff161015610e83575f610c6660608801886153d1565b8363ffffffff16818110610c7c57610c7c615416565b9050602002810190610c8e919061542a565b610c9790615495565b80516040519192505f916006880191610caf91615510565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d919060040161538d565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d2891615510565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d66919061539f565b90508086600601835f0151604051610d7e9190615510565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe9082615565565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d9085615634565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e68929190615654565b60405180910390a2505080610e7c9061567e565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836156a0565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d8761256a565b604001516040518263ffffffff1660e01b8152600401610f3d919061538d565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c919061539f565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb691906157f6565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff7919081019061535c565b90505f60028260405161100a9190615510565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611048919061539f565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612680565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d761508b565b146110f7578060405163170cc93360e21b815260040161092d9190615253565b610a3083836126a9565b5f8061110b612948565b60030154611119908461588a565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f61296c565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f611198612948565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d161508b565b60038111156111e2576111e261508b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f61508b565b14611290578251604051633b0d540d60e21b815261092d91906004016158a9565b6004815160058111156112a5576112a561508b565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e9612948565b6003015461114f906001600160401b0384166158c3565b61079e8383835f612baa565b6111618484848461296c565b611420612da7565b5f611429612948565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156114625761146261508b565b60038111156114735761147361508b565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec61508b565b1461150d578051604051633b0d540d60e21b815261092d91906004016158a9565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e61508b565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615de183398151915255565b5050565b5f611614612948565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c5612948565b90505f6116d183611faa565b51905060048160058111156116e8576116e861508b565b14611708578060405163170cc93360e21b815260040161092d9190615253565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f611762612948565b90505f8061176f85612e1b565b9150915061177c82612680565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e161508b565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615de183398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118668761256a565b604001516040518263ffffffff1660e01b8152600401611886919061538d565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c491906158da565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490615221565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f61508b565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401615253565b5f828152600484016020526040812061199a91614db5565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b9092041690615976565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615de183398151915255565b9392505050565b5f611a6d612948565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa661508b565b6003811115611ab757611ab761508b565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b3061508b565b14158015611b515750600381516003811115611b4e57611b4e61508b565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016158a9565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c61919081019061535c565b6040518263ffffffff1660e01b8152600401611c7d919061538d565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611161919061539f565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690615221565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d5161508b565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401615253565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb9201615988565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e919061539f565b5f611e04612da7565b611e0f823334613413565b905061182460015f80516020615de183398151915255565b5f805f611e338461256a565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e73919061538d565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb2919061599a565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614dec565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff561508b565b60058111156120065761200661508b565b815260200160018201805461201a90615221565b80601f016020809104026020016040519081016040528092919081815260200182805461204690615221565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f612134612948565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b09291906159cf565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b61222061365b565b612229816136a6565b50565b5f80612236612948565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f61508b565b60038111156122805761228061508b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d61508b565b1461232e578251604051633b0d540d60e21b815261092d91906004016158a9565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b031690615634565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df61508b565b0361250a5760028401546080840151612401916001600160401b031690615634565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b91906159de565b613720565b60608101515f8c8152600788016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915590925090506124cc84888c613a2d565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125629350505050565b60048151600581111561251f5761251f61508b565b036125465761252f83878b613a2d565b5061253989612bd6565b6001945050505050612562565b805160405163170cc93360e21b815261092d9190600401615253565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125ce573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125f591908101906159fe565b915091508061261757604051636b2f19e960e01b815260040160405180910390fd5b81511561263d578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612679576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268a612948565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126f4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261271b91908101906159fe565b915091508061273d57604051636b2f19e960e01b815260040160405180910390fd5b5f612746612948565b6005810154845191925014612774578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127b0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127ec576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612829919061538d565b6040805180830381865af4158015612843573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128679190615a8e565b9150915081881461288e5760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b03908116908216111561291f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261293d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612976612948565b90505f61298287613c1b565b905061298d87612680565b61299c57600192505050612562565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b031690615634565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a9565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b20919061539f565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b908490615ab1565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb68484848461296c565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf612948565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c1861508b565b6003811115612c2957612c2961508b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613f0c565b8260800151612cac9190615634565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613f27565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615de1833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615de183398151915255565b5f612dfa612948565b5f838152600a8201602052604081208054919055909150610a308482613fd4565b5f612e24614dec565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e548861256a565b604001516040518263ffffffff1660e01b8152600401612e74919061538d565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb291906158da565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f1161508b565b6005811115612f2257612f2261508b565b8152602001600182018054612f3690615221565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290615221565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130255761302561508b565b1415801561304657506001815160058111156130435761304361508b565b14155b1561306757805160405163170cc93360e21b815261092d9190600401615253565b60038151600581111561307c5761307c61508b565b0361308a576004815261308f565b600581525b8360060181602001516040516130a59190615510565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e861508b565b0217905550602082015160018201906131019082615565565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682614032565b5f806131ed612948565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a80615ac4565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c615ac4565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614fb7565b61335660608e018e615b06565b61335f90615b1a565b61336c60808f018f615b06565b61337590615b1a565b876140c5565b505f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341d612948565b90505f61342984611101565b90505f61343587611faa565b905061344087612680565b613460576040516330efa98b60e01b81526004810188905260240161092d565b6002815160058111156134755761347561508b565b1461349657805160405163170cc93360e21b815261092d9190600401615253565b5f828260a001516134a79190615634565b905083600201600a9054906101000a90046001600160401b031682604001516134d091906156a0565b6001600160401b0316816001600160401b0316111561350d57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f6135188983613720565b60608101516040519195509192505f9161354d918c919060200191825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078a019093529120805491925060019160ff1916828002179055505f8181526007870160209081526040918290208054610100600160a81b0319166101006001600160a01b038e16908102919091178255600182018e9055600290910180546060898101516001600160401b038c81166001600160c01b03199094168417600160801b928216928302176001600160c01b031690945586519081529289169483019490945293810193909352908201849052908b9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49998505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166136a457604051631afcd79f60e31b815260040160405180910390fd5b565b6136ae61365b565b6136b7816146e1565b6136bf6146fa565b612229606082013560808301356136dc60c0850160a08601614fb7565b6136ec60e0860160c08701615be1565b6136fd610100870160e08801615bfa565b61010087013561371561014089016101208a016153b6565b88610140013561470a565b5f613729614dec565b5f6137326121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b031661376285826148cc565b5f61376c87614b39565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613810573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613837919081019061535c565b6040518263ffffffff1660e01b8152600401613853919061538d565b6020604051808303815f875af115801561386f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613893919061539f565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a25f8881526005808601602052604091829020825161010081019093528054849391928391839160ff9091169081111561391d5761391d61508b565b600581111561392e5761392e61508b565b815260200160018201805461394290615221565b80601f016020809104026020016040519081016040528092919081815260200182805461396e90615221565b80156139b95780601f10613990576101008083540402835291602001916139b9565b820191905f5260205f20905b81548152906001019060200180831161399c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c09091015291975090955050505050505b9250929050565b5f80613a37612948565b90505f613a478660400151611faa565b90505f600382516005811115613a5f57613a5f61508b565b1480613a7d5750600482516005811115613a7b57613a7b61508b565b145b15613a8d575060e0810151613aca565b600282516005811115613aa257613aa261508b565b03613aae575042613aca565b815160405163170cc93360e21b815261092d9190600401615253565b86608001516001600160401b0316816001600160401b031611613af2575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f90613b17906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613b98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bbc919061539f565b90506001600160a01b038716613bd457876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b613c23614dec565b5f613c2c6121f4565b5f848152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613c6657613c6661508b565b6005811115613c7757613c7761508b565b8152602001600182018054613c8b90615221565b80601f0160208091040260200160405190810160405280929190818152602001828054613cb790615221565b8015613d025780601f10613cd957610100808354040283529160200191613d02565b820191905f5260205f20905b815481529060010190602001808311613ce557829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613d7a57613d7a61508b565b14613dad575f8481526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401615253565b60038152426001600160401b031660e082015260a08101515f85815260058481016020526040909120835181548593839160ff1916906001908490811115613df757613df761508b565b021790555060208201516001820190613e109082615565565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613eb08682613720565b604080518381526001600160401b038681166020830152421681830152905191955091925087917fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273919081900360600190a25090949350505050565b5f613f156121f4565b600101546001600160401b0316919050565b5f805f613f32612948565b5f86815260088201602052604081208054908290559192509081908015613fc6575f87815260068501602052604090205461271090613f7c90600160a01b900461ffff16836158c3565b613f86919061588a565b91508184600a015f8981526020019081526020015f205f828254613faa9190615ab1565b90915550613fba90508282615c1a565b9250613fc68984613fd4565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015614020575f80fd5b505af11580156112b3573d5f803e3d5ffd5b804710156140555760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461409e576040519150601f19603f3d011682016040523d82523d5f602084013e6140a3565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f6140ce614dec565b6140d66121f4565b6007015460ff166140fa57604051637fab81e560e01b815260040160405180910390fd5b5f6141036121f4565b905042876001600160401b031611158061413257506141256202a30042615ab1565b876001600160401b031610155b1561415b57604051635879da1360e11b81526001600160401b038816600482015260240161092d565b60038101546001600160401b039061417e90600160401b90048216868316615ab1565b11156141a857604051633e1a785160e01b81526001600160401b038516600482015260240161092d565b6141b186614ba2565b6141ba85614ba2565b87516030146141e15787516040516326475b2f60e11b815260040161092d91815260200190565b88515f036142045788604051633e08a12560e11b815260040161092d919061538d565b5f801b816006018a6040516142199190615510565b90815260200160405180910390205414614248578860405163a41f772f60e01b815260040161092d919061538d565b614252845f6148cc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018e81526020018d81526020018c6001600160401b031681526020018b81526020018a8152602001896001600160401b03168152506040518263ffffffff1660e01b81526004016142d29190615c93565b5f60405180830381865af41580156142ec573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526143139190810190615d4a565b5f828152600486016020526040902091935091506143318282615565565b5081836006018c6040516143459190615510565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061438190859060040161538d565b6020604051808303815f875af115801561439d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143c1919061539f565b5f848152600580870160205260408083208151610100810190925280549495509293909291839160ff16908111156143fb576143fb61508b565b600581111561440c5761440c61508b565b815260200160018201805461442090615221565b80601f016020809104026020016040519081016040528092919081815260200182805461444c90615221565b80156144975780601f1061446e57610100808354040283529160200191614497565b820191905f5260205f20905b81548152906001019060200180831161447a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c09091015290506001818190525060208082018e90526001600160401b03891660408084018290525f6060850181905260a085019290925260c0840182905260e0840182905286825260058089019093529020825181548493839160ff19169060019084908111156145675761456761508b565b0217905550602082015160018201906145809082615565565b506040820151816002015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160020160086101000a8154816001600160401b0302191690836001600160401b0316021790555060808201518160020160106101000a8154816001600160401b0302191690836001600160401b0316021790555060a08201518160020160186101000a8154816001600160401b0302191690836001600160401b0316021790555060c0820151816003015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060e08201518160030160086101000a8154816001600160401b0302191690836001600160401b03160217905550905050837f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf8e848e8c6040516146c69493929190615d8d565b60405180910390a2929c929b50919950505050505050505050565b6146e961365b565b6146f1614cc1565b61222981614cc9565b61470261365b565b6136a4614dad565b61471261365b565b5f61471b612948565b905061ffff86161580614733575061271061ffff8716115b1561475757604051635f12e6c360e11b815261ffff8716600482015260240161092d565b8789111561477b5760405163222d164360e21b8152600481018a905260240161092d565b60ff8516158061478e5750600a60ff8616115b156147b15760405163170db35960e31b815260ff8616600482015260240161092d565b6147b9613f0c565b6001600160401b0316876001600160401b031610156147f5576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036148155760405163a733007160e01b815260040160405180910390fd5b8161483657604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6148d56121f4565b90505f826001600160401b0316846001600160401b03161115614903576148fc83856159de565b9050614910565b61490d84846159de565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061497d575060018401548151614979916001600160401b031690615ab1565b8210155b156149a5576001600160401b03808416606083015282825260408201511660208201526149c4565b82816060018181516149b79190615634565b6001600160401b03169052505b60608101516149d49060646156a0565b602082015160018601546001600160401b0392909216916149ff9190600160401b900460ff166156a0565b6001600160401b03161015614a3857606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614a4a9190615634565b6001600160401b0316905250604081018051869190614a6a9083906159de565b6001600160401b031690525060018401546040820151606491614a9891600160401b90910460ff16906156a0565b6001600160401b03161015614ad1576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614b436121f4565b5f8481526005820160205260409020600201805491925090600890614b7790600160401b90046001600160401b0316615dc5565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614bbb575060208101515115155b15614bef57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff161115614c3257805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b816020015151811015611607576020820151614c52600183615c1a565b81518110614c6257614c62615416565b60200260200101516001600160a01b031682602001518281518110614c8957614c89615416565b60200260200101516001600160a01b03161015614cb957604051630dbc8d5f60e31b815260040160405180910390fd5b600101614c35565b6136a461365b565b614cd161365b565b5f614cda6121f4565b8235815590506014614cf26060840160408501615bfa565b60ff161180614d115750614d0c6060830160408401615bfa565b60ff16155b15614d4557614d266060830160408401615bfa565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b614d556060830160408401615bfa565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614d866040830160208401614fb7565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde61365b565b508054614dc190615221565b5f825580601f10614dd0575050565b601f0160209004905f5260205f20908101906122299190614e31565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614e45575f8155600101614e32565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614e7b575f80fd5b833592506020840135614e8d81614e49565b9150614e9b60408501614e56565b90509250925092565b5f60208284031215614eb4575f80fd5b5035919050565b5f6101608284031215614ecc575f80fd5b50919050565b5f8060408385031215614ee3575f80fd5b82356001600160401b03811115614ef8575f80fd5b830160808186031215614f09575f80fd5b9150614f1760208401614e56565b90509250929050565b5f8060408385031215614f31575f80fd5b82359150614f1760208401614e56565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614f68575f80fd5b843593506020850135614f7a81614e49565b9250614f8860408601614e56565b91506060850135614f9881614f41565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614fc7575f80fd5b8135611a5d81614fa3565b5f8060408385031215614fe3575f80fd5b823591506020830135614ff581614f41565b809150509250929050565b5f60208284031215615010575f80fd5b611a5d82614e56565b803561ffff81168114611824575f80fd5b5f805f6060848603121561503c575f80fd5b83356001600160401b03811115615051575f80fd5b840160a08187031215615062575f80fd5b925061507060208501615019565b9150604084013561508081614fa3565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b600681106150af576150af61508b565b9052565b5f5b838110156150cd5781810151838201526020016150b5565b50505f910152565b5f81518084526150ec8160208601602086016150b3565b601f01601f19169290920160200192915050565b6020815261511260208201835161509f565b5f602083015161010080604085015261512f6101208501836150d5565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161516e60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f80602083850312156151c7575f80fd5b82356001600160401b03808211156151dd575f80fd5b818501915085601f8301126151f0575f80fd5b8135818111156151fe575f80fd5b86602082850101111561520f575f80fd5b60209290920196919550909350505050565b600181811c9082168061523557607f821691505b602082108103614ecc57634e487b7160e01b5f52602260045260245ffd5b6020810161114f828461509f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561529757615297615261565b60405290565b604080519081016001600160401b038111828210171561529757615297615261565b604051601f8201601f191681016001600160401b03811182821017156152e7576152e7615261565b604052919050565b5f6001600160401b0382111561530757615307615261565b50601f01601f191660200190565b5f82601f830112615324575f80fd5b8151615337615332826152ef565b6152bf565b81815284602083860101111561534b575f80fd5b6125628260208301602087016150b3565b5f6020828403121561536c575f80fd5b81516001600160401b03811115615381575f80fd5b61256284828501615315565b602081525f611a5d60208301846150d5565b5f602082840312156153af575f80fd5b5051919050565b5f602082840312156153c6575f80fd5b8135611a5d81614f41565b5f808335601e198436030181126153e6575f80fd5b8301803591506001600160401b038211156153ff575f80fd5b6020019150600581901b3603821315613a26575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261543e575f80fd5b9190910192915050565b5f82601f830112615457575f80fd5b8135615465615332826152ef565b818152846020838601011115615479575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156154a5575f80fd5b6154ad615275565b82356001600160401b03808211156154c3575f80fd5b6154cf36838701615448565b835260208501359150808211156154e4575f80fd5b506154f136828601615448565b602083015250604083013561550581614fa3565b604082015292915050565b5f825161543e8184602087016150b3565b601f82111561079e57805f5260205f20601f840160051c810160208510156155465750805b601f840160051c820191505b81811015611161575f8155600101615552565b81516001600160401b0381111561557e5761557e615261565b6155928161558c8454615221565b84615521565b602080601f8311600181146155c5575f84156155ae5750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b828110156155f3578886015182559484019460019091019084016155d4565b508582101561561057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561267957612679615620565b604081525f61566660408301856150d5565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361569657615696615620565b6001019392505050565b6001600160401b038181168382160280821691908281146156c3576156c3615620565b505092915050565b5f808335601e198436030181126156e0575f80fd5b83016020810192503590506001600160401b038111156156fe575f80fd5b803603821315613a26575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156157e957848303601f19018952813536889003605e19018112615770575f80fd5b8701606061577e82806156cb565b82875261578e838801828461570c565b9250505061579e868301836156cb565b868303888801526157b083828461570c565b9250505060408083013592506157c583614fa3565b6001600160401b03929092169490910193909352978301979083019060010161574b565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561581a81614f41565b6001600160a01b031660608381019190915283013536849003601e19018112615841575f80fd5b83016020810190356001600160401b0381111561585c575f80fd5b8060051b360382131561586d575f80fd5b60808085015261588160a085018284615734565b95945050505050565b5f826158a457634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106158bd576158bd61508b565b91905290565b808202811582820484141761114f5761114f615620565b5f80604083850312156158eb575f80fd5b825191506020830151614ff581614e49565b5f815461590981615221565b80855260206001838116801561592657600181146159405761596b565b60ff1985168884015283151560051b88018301955061596b565b865f52825f205f5b858110156159635781548a8201860152908301908401615948565b890184019650505b505050505092915050565b604081525f61566660408301856158fd565b602081525f611a5d60208301846158fd565b5f805f606084860312156159ac575f80fd5b8351925060208401516159be81614fa3565b604085015190925061508081614fa3565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561267957612679615620565b5f8060408385031215615a0f575f80fd5b82516001600160401b0380821115615a25575f80fd5b9084019060608287031215615a38575f80fd5b615a40615275565b825181526020830151615a5281614f41565b6020820152604083015182811115615a68575f80fd5b615a7488828601615315565b6040830152508094505050506020830151614ff581614e49565b5f8060408385031215615a9f575f80fd5b825191506020830151614ff581614fa3565b8082018082111561114f5761114f615620565b5f808335601e19843603018112615ad9575f80fd5b8301803591506001600160401b03821115615af2575f80fd5b602001915036819003821315613a26575f80fd5b5f8235603e1983360301811261543e575f80fd5b5f60408236031215615b2a575f80fd5b615b3261529d565b615b3b83614e56565b81526020808401356001600160401b0380821115615b57575f80fd5b9085019036601f830112615b69575f80fd5b813581811115615b7b57615b7b615261565b8060051b9150615b8c8483016152bf565b8181529183018401918481019036841115615ba5575f80fd5b938501935b83851015615bcf5784359250615bbf83614f41565b8282529385019390850190615baa565b94860194909452509295945050505050565b5f60208284031215615bf1575f80fd5b611a5d82615019565b5f60208284031215615c0a575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f615620565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615c885784516001600160a01b03168252938301936001929092019190830190615c5f565b509695505050505050565b60208152815160208201525f602083015160e06040840152615cb96101008401826150d5565b90506040840151601f1980858403016060860152615cd783836150d5565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615d078383615c2d565b925060a08601519150808584030160c086015250615d258282615c2d565b91505060c0840151615d4260e08501826001600160401b03169052565b509392505050565b5f8060408385031215615d5b575f80fd5b8251915060208301516001600160401b03811115615d77575f80fd5b615d8385828601615315565b9150509250929050565b608081525f615d9f60808301876150d5565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036156965761569661562056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212206e07ec7b7772f66727263bb23a83ff986b4ebd9c0fd9d266f1fa835e8e9abfe464736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122010007e4a95fb989f97d977141959d81ce65ad26366eccb808285b143cfc34a8264736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -3274,7 +3274,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseUptime // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122017004d9191e69227d5fc936d07424760c48913f19025eee71ffca047901c2db664736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index 8890a3e9d..358805b46 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -92,7 +92,7 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051613cac380380613cac83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b613b5f8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a366004612c8b565b610388565b005b61015f61016f366004612cba565b610626565b5f80516020613aea833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612d08565b610bcc565b61015f610242366004612c8b565b610bdf565b610184610255366004612d3c565b610bf4565b610184610268366004612d08565b610cc1565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f80516020613aea83398151915281565b61015f6102e8366004612c8b565b610ebf565b6101cb601481565b610308610303366004612d08565b611000565b604080519283526001600160401b0390911660208301520161018e565b61015f610333366004612da2565b61118f565b61034b610346366004612c8b565b61129d565b60405161018e9190612e54565b6102ae6202a30081565b61015f610370366004612f0a565b6113f7565b610184610383366004612f25565b611434565b5f8181525f80516020613b0a83398151915260205260408082208151610100810190925280545f80516020613aea83398151915293929190829060ff1660058111156103d6576103d6612dd3565b60058111156103e7576103e7612dd3565b81526020016001820180546103fb90612f90565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612f90565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612dd3565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612fc8565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c491908101906130d9565b6040518263ffffffff1660e01b81526004016105e0919061310a565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610620919061311c565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020613aea8339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df919061311c565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612f0a565b6001600160a01b03161461075c576107376060840160408501612f0a565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185613133565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188613133565b8363ffffffff168181106107a3576107a3613178565b90506020028101906107b5919061318c565b6107be906131f7565b80516040519192505f9160068801916107d691613272565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d919060040161310a565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91613272565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d919061311c565b90508086600601835f01516040516108a59190613272565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e590826132ce565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b03199093169290921790915561095490856133a1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f9291906133c1565b60405180910390a25050806109a3906133eb565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361340d565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611490565b604001516040518263ffffffff1660e01b8152600401610a69919061310a565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa8919061311c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae29190613563565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b2391908101906130d9565b90505f600282604051610b369190613272565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b74919061311c565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115a6565b610bca5f611601565b565b5f80610bd783611671565b509392505050565b610be76115a6565b610bf081611a29565b5050565b5f610bfd6115a6565b610bd7610c0a84806135f7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4b9250505060208601866135f7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8f925050506060870160408801613639565b610c9c6060880188613654565b610ca590613668565b610cb26080890189613654565b610cbb90613668565b87611d25565b5f5f80516020613aea833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cf587611490565b604001516040518263ffffffff1660e01b8152600401610d15919061310a565b6040805180830381865af4158015610d2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d53919061373e565b9150915080610d7957604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9390612f90565b90505f03610db75760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610dde57610dde612dd3565b14610e11575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612fc8565b5f8281526004840160205260408120610e2991612bf7565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eaf93600190910192600160c01b90920416906137d8565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020613aea8339815191529190610f0690612f90565b90505f03610f2a5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5157610f51612dd3565b14610f84575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612fc8565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fbb92016137ea565b6020604051808303815f875af1158015610fd7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ffb919061311c565b505050565b5f805f61100c84611490565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b815260040161104c919061310a565b606060405180830381865af4158015611067573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061108b91906137fc565b9250925092505f6110a65f80516020613aea83398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b9092041610156110fa57604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061117a90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111d35750825b90505f826001600160401b031660011480156111ee5750303b155b9050811580156111fc575080155b1561121a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124457845460ff60401b1916600160401b1785555b61124e878761235a565b831561129457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112a5612c2e565b5f8281525f80516020613b0a8339815191526020526040908190208151610100810190925280545f80516020613aea833981519152929190829060ff1660058111156112f3576112f3612dd3565b600581111561130457611304612dd3565b815260200160018201805461131890612f90565b80601f016020809104026020016040519081016040528092919081815260200182805461134490612f90565b801561138f5780601f106113665761010080835404028352916020019161138f565b820191905f5260205f20905b81548152906001019060200180831161137257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6113ff6115a6565b6001600160a01b03811661142857604051631e4fbdf760e01b81525f600482015260240161051d565b61143181611601565b50565b6040515f905f80516020613aea833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611477908690869061383c565b9081526020016040518091039020549150505b92915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151b919081019061384b565b915091508061153d57604051636b2f19e960e01b815260040160405180910390fd5b815115611563578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b03161561159f576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115d87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167a612c2e565b5f80516020613aea8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116ad88611490565b604001516040518263ffffffff1660e01b81526004016116cd919061310a565b6040805180830381865af41580156116e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170b919061373e565b91509150801561173257604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176a5761176a612dd3565b600581111561177b5761177b612dd3565b815260200160018201805461178f90612f90565b80601f01602080910402602001604051908101604052809291908181526020018280546117bb90612f90565b80156118065780601f106117dd57610100808354040283529160200191611806565b820191905f5260205f20905b8154815290600101906020018083116117e957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561187e5761187e612dd3565b1415801561189f575060018151600581111561189c5761189c612dd3565b14155b156118c057805160405163170cc93360e21b815261051d9190600401612fc8565b6003815160058111156118d5576118d5612dd3565b036118e357600481526118e8565b600581525b8360060181602001516040516118fe9190613272565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194157611941612dd3565b02179055506020820151600182019061195a90826132ce565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b611a31612c2e565b5f8281525f80516020613b0a83398151915260205260408082208151610100810190925280545f80516020613aea83398151915293929190829060ff166005811115611a7f57611a7f612dd3565b6005811115611a9057611a90612dd3565b8152602001600182018054611aa490612f90565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad090612f90565b8015611b1b5780601f10611af257610100808354040283529160200191611b1b565b820191905f5260205f20905b815481529060010190602001808311611afe57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b9357611b93612dd3565b14611bc6575f8481526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612fc8565b60038152426001600160401b031660e082015260a08101515f85815260058481016020526040909120835181548593839160ff1916906001908490811115611c1057611c10612dd3565b021790555060208201516001820190611c2990826132ce565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc98682612374565b604080518381526001600160401b038681166020830152421681830152905191955091925087917fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273919081900360600190a25090949350505050565b5f611d2e612c2e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb075460ff16611d7057604051637fab81e560e01b815260040160405180910390fd5b5f80516020613aea833981519152426001600160401b038816111580611dab5750611d9e6202a300426138d8565b876001600160401b031610155b15611dd457604051635879da1360e11b81526001600160401b038816600482015260240161051d565b60038101546001600160401b0390611df790600160401b900482168683166138d8565b1115611e2157604051633e1a785160e01b81526001600160401b038516600482015260240161051d565b611e2a8661268e565b611e338561268e565b8751603014611e5a5787516040516326475b2f60e11b815260040161051d91815260200190565b88515f03611e7d5788604051633e08a12560e11b815260040161051d919061310a565b5f801b816006018a604051611e929190613272565b90815260200160405180910390205414611ec1578860405163a41f772f60e01b815260040161051d919061310a565b611ecb845f6127ad565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018e81526020018d81526020018c6001600160401b031681526020018b81526020018a8152602001896001600160401b03168152506040518263ffffffff1660e01b8152600401611f4b9190613951565b5f60405180830381865af4158015611f65573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f8c9190810190613a00565b5f82815260048601602052604090209193509150611faa82826132ce565b5081836006018c604051611fbe9190613272565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ffa90859060040161310a565b6020604051808303815f875af1158015612016573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061203a919061311c565b5f848152600580870160205260408083208151610100810190925280549495509293909291839160ff169081111561207457612074612dd3565b600581111561208557612085612dd3565b815260200160018201805461209990612f90565b80601f01602080910402602001604051908101604052809291908181526020018280546120c590612f90565b80156121105780601f106120e757610100808354040283529160200191612110565b820191905f5260205f20905b8154815290600101906020018083116120f357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c09091015290506001818190525060208082018e90526001600160401b03891660408084018290525f6060850181905260a085019290925260c0840182905260e0840182905286825260058089019093529020825181548493839160ff19169060019084908111156121e0576121e0612dd3565b0217905550602082015160018201906121f990826132ce565b506040820151816002015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160020160086101000a8154816001600160401b0302191690836001600160401b0316021790555060808201518160020160106101000a8154816001600160401b0302191690836001600160401b0316021790555060a08201518160020160186101000a8154816001600160401b0302191690836001600160401b0316021790555060c0820151816003015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060e08201518160030160086101000a8154816001600160401b0302191690836001600160401b03160217905550905050837f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf8e848e8c60405161233f9493929190613a43565b60405180910390a2929c929b50919950505050505050505050565b612362612a17565b61236b82612a60565b610bf081612a79565b5f61237d612c2e565b5f8481525f80516020613b0a83398151915260205260409020600201545f80516020613aea83398151915290600160c01b90046001600160401b03166123c385826127ad565b5f6123cd87612a8a565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612471573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261249891908101906130d9565b6040518263ffffffff1660e01b81526004016124b4919061310a565b6020604051808303815f875af11580156124d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124f4919061311c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a25f8881526005808601602052604091829020825161010081019093528054849391928391839160ff9091169081111561257e5761257e612dd3565b600581111561258f5761258f612dd3565b81526020016001820180546125a390612f90565b80601f01602080910402602001604051908101604052809291908181526020018280546125cf90612f90565b801561261a5780601f106125f15761010080835404028352916020019161261a565b820191905f5260205f20905b8154815290600101906020018083116125fd57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c09091015291975090955050505050505b9250929050565b805163ffffffff161580156126a7575060208101515115155b156126db57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561271e57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b816020015151811015610bf057602082015161273e600183613a7b565b8151811061274e5761274e613178565b60200260200101516001600160a01b03168260200151828151811061277557612775613178565b60200260200101516001600160a01b031610156127a557604051630dbc8d5f60e31b815260040160405180910390fd5b600101612721565b5f80516020613aea8339815191525f6001600160401b0380841690851611156127e1576127da8385613a8e565b90506127ee565b6127eb8484613a8e565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061285b575060018401548151612857916001600160401b0316906138d8565b8210155b15612883576001600160401b03808416606083015282825260408201511660208201526128a2565b828160600181815161289591906133a1565b6001600160401b03169052505b60608101516128b290606461340d565b602082015160018601546001600160401b0392909216916128dd9190600160401b900460ff1661340d565b6001600160401b0316101561291657606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b858160400181815161292891906133a1565b6001600160401b0316905250604081018051869190612948908390613a8e565b6001600160401b03169052506001840154604082015160649161297691600160401b90910460ff169061340d565b6001600160401b031610156129af576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b612a68612a17565b612a70612aff565b61143181612b07565b612a81612a17565b61143181612bef565b5f8181525f80516020613b0a8339815191526020526040812060020180545f80516020613aea8339815191529190600890612ad490600160401b90046001600160401b0316613aae565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612a17565b612b0f612a17565b80355f80516020613aea8339815191529081556014612b346060840160408501613ac9565b60ff161180612b535750612b4e6060830160408401613ac9565b60ff16155b15612b8757612b686060830160408401613ac9565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b612b976060830160408401613ac9565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055612bc86040830160208401613639565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b6113ff612a17565b508054612c0390612f90565b5f825580601f10612c12575050565b601f0160209004905f5260205f20908101906114319190612c73565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115612c87575f8155600101612c74565b5090565b5f60208284031215612c9b575f80fd5b5035919050565b803563ffffffff81168114612cb5575f80fd5b919050565b5f8060408385031215612ccb575f80fd5b82356001600160401b03811115612ce0575f80fd5b830160808186031215612cf1575f80fd5b9150612cff60208401612ca2565b90509250929050565b5f60208284031215612d18575f80fd5b612d2182612ca2565b9392505050565b6001600160401b0381168114611431575f80fd5b5f8060408385031215612d4d575f80fd5b82356001600160401b03811115612d62575f80fd5b830160a08186031215612d73575f80fd5b91506020830135612d8381612d28565b809150509250929050565b6001600160a01b0381168114611431575f80fd5b5f808284036080811215612db4575f80fd5b6060811215612dc1575f80fd5b508291506060830135612d8381612d8e565b634e487b7160e01b5f52602160045260245ffd5b60068110612e0357634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612e21578181015183820152602001612e09565b50505f910152565b5f8151808452612e40816020860160208601612e07565b601f01601f19169290920160200192915050565b60208152612e66602082018351612de7565b5f6020830151610100806040850152612e83610120850183612e29565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612ec260a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612f1a575f80fd5b8135612d2181612d8e565b5f8060208385031215612f36575f80fd5b82356001600160401b0380821115612f4c575f80fd5b818501915085601f830112612f5f575f80fd5b813581811115612f6d575f80fd5b866020828501011115612f7e575f80fd5b60209290920196919550909350505050565b600181811c90821680612fa457607f821691505b602082108103612fc257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020810161148a8284612de7565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561300c5761300c612fd6565b60405290565b604080519081016001600160401b038111828210171561300c5761300c612fd6565b604051601f8201601f191681016001600160401b038111828210171561305c5761305c612fd6565b604052919050565b5f6001600160401b0382111561307c5761307c612fd6565b50601f01601f191660200190565b5f82601f830112613099575f80fd5b81516130ac6130a782613064565b613034565b8181528460208386010111156130c0575f80fd5b6130d1826020830160208701612e07565b949350505050565b5f602082840312156130e9575f80fd5b81516001600160401b038111156130fe575f80fd5b6130d18482850161308a565b602081525f612d216020830184612e29565b5f6020828403121561312c575f80fd5b5051919050565b5f808335601e19843603018112613148575f80fd5b8301803591506001600160401b03821115613161575f80fd5b6020019150600581901b3603821315612687575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126131a0575f80fd5b9190910192915050565b5f82601f8301126131b9575f80fd5b81356131c76130a782613064565b8181528460208386010111156131db575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215613207575f80fd5b61320f612fea565b82356001600160401b0380821115613225575f80fd5b613231368387016131aa565b83526020850135915080821115613246575f80fd5b50613253368286016131aa565b602083015250604083013561326781612d28565b604082015292915050565b5f82516131a0818460208701612e07565b601f821115610ffb57805f5260205f20601f840160051c810160208510156132a85750805b601f840160051c820191505b818110156132c7575f81556001016132b4565b5050505050565b81516001600160401b038111156132e7576132e7612fd6565b6132fb816132f58454612f90565b84613283565b602080601f83116001811461332e575f84156133175750858301515b5f19600386901b1c1916600185901b178555613385565b5f85815260208120601f198616915b8281101561335c5788860151825594840194600190910190840161333d565b508582101561337957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561159f5761159f61338d565b604081525f6133d36040830185612e29565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036134035761340361338d565b6001019392505050565b6001600160401b038181168382160280821691908281146134305761343061338d565b505092915050565b5f808335601e1984360301811261344d575f80fd5b83016020810192503590506001600160401b0381111561346b575f80fd5b803603821315612687575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561355657848303601f19018952813536889003605e190181126134dd575f80fd5b870160606134eb8280613438565b8287526134fb8388018284613479565b9250505061350b86830183613438565b8683038888015261351d838284613479565b92505050604080830135925061353283612d28565b6001600160401b0392909216949091019390935297830197908301906001016134b8565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561358781612d8e565b6001600160a01b031660608381019190915283013536849003601e190181126135ae575f80fd5b83016020810190356001600160401b038111156135c9575f80fd5b8060051b36038213156135da575f80fd5b6080808501526135ee60a0850182846134a1565b95945050505050565b5f808335601e1984360301811261360c575f80fd5b8301803591506001600160401b03821115613625575f80fd5b602001915036819003821315612687575f80fd5b5f60208284031215613649575f80fd5b8135612d2181612d28565b5f8235603e198336030181126131a0575f80fd5b5f60408236031215613678575f80fd5b613680613012565b61368983612ca2565b81526020808401356001600160401b03808211156136a5575f80fd5b9085019036601f8301126136b7575f80fd5b8135818111156136c9576136c9612fd6565b8060051b91506136da848301613034565b81815291830184019184810190368411156136f3575f80fd5b938501935b8385101561371d578435925061370d83612d8e565b82825293850193908501906136f8565b94860194909452509295945050505050565b80518015158114612cb5575f80fd5b5f806040838503121561374f575f80fd5b82519150612cff6020840161372f565b5f815461376b81612f90565b80855260206001838116801561378857600181146137a2576137cd565b60ff1985168884015283151560051b8801830195506137cd565b865f52825f205f5b858110156137c55781548a82018601529083019084016137aa565b890184019650505b505050505092915050565b604081525f6133d3604083018561375f565b602081525f612d21602083018461375f565b5f805f6060848603121561380e575f80fd5b83519250602084015161382081612d28565b604085015190925061383181612d28565b809150509250925092565b818382375f9101908152919050565b5f806040838503121561385c575f80fd5b82516001600160401b0380821115613872575f80fd5b9084019060608287031215613885575f80fd5b61388d612fea565b82518152602083015161389f81612d8e565b60208201526040830151828111156138b5575f80fd5b6138c18882860161308a565b6040830152509350612cff9150506020840161372f565b8082018082111561148a5761148a61338d565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156139465784516001600160a01b0316825293830193600192909201919083019061391d565b509695505050505050565b60208152815160208201525f602083015160e06040840152613977610100840182612e29565b90506040840151601f19808584030160608601526139958383612e29565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526139c583836138eb565b925060a08601519150808584030160c0860152506139e382826138eb565b91505060c0840151610bd760e08501826001600160401b03169052565b5f8060408385031215613a11575f80fd5b8251915060208301516001600160401b03811115613a2d575f80fd5b613a398582860161308a565b9150509250929050565b608081525f613a556080830187612e29565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b8181038181111561148a5761148a61338d565b6001600160401b0382811682821603908082111561159f5761159f61338d565b5f6001600160401b038083168181036134035761340361338d565b5f60208284031215613ad9575f80fd5b813560ff81168114612d21575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a26469706673582212204186b1b4c1d56af18e97548cda055449433fa2af7e803af10fe6217256e606d264736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a264697066735822122059fb7c0d64579e8658fb11c146b783a14a7a9430b47c7ba215e947b21bc6c6cc64736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. @@ -2182,7 +2182,7 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseRegisteredInitialV // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122017004d9191e69227d5fc936d07424760c48913f19025eee71ffca047901c2db664736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/contracts/validator-manager/ACP99Manager.sol b/contracts/validator-manager/ACP99Manager.sol index dce17a9db..fd9895439 100644 --- a/contracts/validator-manager/ACP99Manager.sol +++ b/contracts/validator-manager/ACP99Manager.sol @@ -143,7 +143,6 @@ abstract contract ACP99Manager { * @param disableOwner The disable owner of the validator. * @param weight The weight of the node on the L1. * @return validationID The ID of the registered validator. - * @return validator The registered validator. */ function _initiateValidatorRegistration( bytes memory nodeID, @@ -152,7 +151,7 @@ abstract contract ACP99Manager { PChainOwner memory remainingBalanceOwner, PChainOwner memory disableOwner, uint64 weight - ) internal virtual returns (bytes32 validationID, Validator memory validator); + ) internal virtual returns (bytes32 validationID); /** * @notice Completes the validator registration process by returning an acknowledgement of the registration of a @@ -175,12 +174,8 @@ abstract contract ACP99Manager { * Emits an {InitiatedValidatorRemoval} on success. * * @param validationID The ID of the validator to remove. - * @return validator The validator to remove. */ - function _initiateValidatorRemoval(bytes32 validationID) - internal - virtual - returns (Validator memory validator); + function _initiateValidatorRemoval(bytes32 validationID) internal virtual; /** * @notice Completes validator removal by consuming an RegisterL1ValidatorMessage from the P-Chain acknowledging @@ -203,13 +198,13 @@ abstract contract ACP99Manager { * * @param validationID The ID of the validator to modify. * @param weight The new weight of the validator. + * @return nonce The validator nonce associated with the weight change. * @return messageID The ID of the L1ValidatorWeightMessage used to update the validator's weight. - * @return validator The updated validator. */ function _initiateValidatorWeightUpdate( bytes32 validationID, uint64 weight - ) internal virtual returns (bytes32 messageID, Validator memory validator); + ) internal virtual returns (uint64 nonce, bytes32 messageID); /** * @notice Completes the validator weight update process by consuming a L1ValidatorWeightMessage from the P-Chain diff --git a/contracts/validator-manager/PoAValidatorManager.sol b/contracts/validator-manager/PoAValidatorManager.sol index 65000706e..2f6ffa823 100644 --- a/contracts/validator-manager/PoAValidatorManager.sol +++ b/contracts/validator-manager/PoAValidatorManager.sol @@ -55,7 +55,7 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU ValidatorRegistrationInput calldata registrationInput, uint64 weight ) external onlyOwner returns (bytes32 validationID) { - (validationID,) = _initiateValidatorRegistration({ + return _initiateValidatorRegistration({ nodeID: registrationInput.nodeID, blsPublicKey: registrationInput.blsPublicKey, registrationExpiry: registrationInput.registrationExpiry, diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 180b98f32..6c1be7c06 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -323,7 +323,10 @@ abstract contract PoSValidatorManager is ) internal returns (bool) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); - Validator memory validator = _initiateValidatorRemoval(validationID); + // TODONOW: Functions that modify Validator state invalid any references to the Validator object. + // How can we make this safer to use? + _initiateValidatorRemoval(validationID); + Validator memory validator = getValidator(validationID); // Non-PoS validators are required to boostrap the network, but are not eligible for rewards. if (!_isPoSValidator(validationID)) { @@ -479,7 +482,7 @@ abstract contract PoSValidatorManager is uint256 lockedValue = _lock(stakeAmount); uint64 weight = valueToWeight(lockedValue); - (bytes32 validationID,) = _initiateValidatorRegistration({ + bytes32 validationID = _initiateValidatorRegistration({ nodeID: registrationInput.nodeID, blsPublicKey: registrationInput.blsPublicKey, registrationExpiry: registrationInput.registrationExpiry, @@ -556,10 +559,10 @@ abstract contract PoSValidatorManager is revert MaxWeightExceeded(newValidatorWeight); } - bytes32 messageID; - (messageID, validator) = _initiateValidatorWeightUpdate(validationID, newValidatorWeight); + (uint64 nonce, bytes32 messageID) = + _initiateValidatorWeightUpdate(validationID, newValidatorWeight); - bytes32 delegationID = keccak256(abi.encodePacked(validationID, validator.sentNonce)); + bytes32 delegationID = keccak256(abi.encodePacked(validationID, nonce)); // Store the delegation information. Set the delegator status to pending added, // so that it can be properly started in the complete step, even if the delivered @@ -569,14 +572,14 @@ abstract contract PoSValidatorManager is $._delegatorStakes[delegationID].validationID = validationID; $._delegatorStakes[delegationID].weight = weight; $._delegatorStakes[delegationID].startTime = 0; - $._delegatorStakes[delegationID].startingNonce = validator.sentNonce; + $._delegatorStakes[delegationID].startingNonce = nonce; $._delegatorStakes[delegationID].endingNonce = 0; emit DelegatorAdded({ delegationID: delegationID, validationID: validationID, delegatorAddress: delegatorAddress, - nonce: validator.sentNonce, + nonce: nonce, validatorWeight: newValidatorWeight, delegatorWeight: weight, setWeightMessageID: messageID @@ -751,9 +754,9 @@ abstract contract PoSValidatorManager is // initialize the removal. $._delegatorStakes[delegationID].status = DelegatorStatus.PendingRemoved; - (, validator) = + ($._delegatorStakes[delegationID].endingNonce,) = _initiateValidatorWeightUpdate(validationID, validator.weight - delegator.weight); - $._delegatorStakes[delegationID].endingNonce = validator.sentNonce; + uint256 reward = _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 429cd5d0e..4bd80533f 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -252,7 +252,7 @@ abstract contract ValidatorManager is PChainOwner memory remainingBalanceOwner, PChainOwner memory disableOwner, uint64 weight - ) internal virtual override initializedValidatorSet returns (bytes32, Validator memory) { + ) internal virtual override initializedValidatorSet returns (bytes32) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); if ( @@ -302,21 +302,19 @@ abstract contract ValidatorManager is // Submit the message to the Warp precompile. bytes32 messageID = WARP_MESSENGER.sendWarpMessage(registerL1ValidatorMessage); - Validator memory validator = $._validationPeriods[validationID]; - validator.status = ValidatorStatus.PendingAdded; - validator.nodeID = nodeID; - validator.startingWeight = weight; - validator.sentNonce = 0; - validator.weight = weight; - validator.startTime = 0; // The validation period only starts once the registration is acknowledged. - validator.endTime = 0; - $._validationPeriods[validationID] = validator; + $._validationPeriods[validationID].status = ValidatorStatus.PendingAdded; + $._validationPeriods[validationID].nodeID = nodeID; + $._validationPeriods[validationID].startingWeight = weight; + $._validationPeriods[validationID].sentNonce = 0; + $._validationPeriods[validationID].weight = weight; + $._validationPeriods[validationID].startTime = 0; // The validation period only starts once the registration is acknowledged. + $._validationPeriods[validationID].endTime = 0; emit InitiatedValidatorRegistration( validationID, nodeID, messageID, registrationExpiry, weight ); - return (validationID, validator); + return validationID; } /** @@ -435,12 +433,7 @@ abstract contract ValidatorManager is * Any rewards for this validation period will stop accruing when this function is called. * @param validationID The ID of the validation period being ended. */ - function _initiateValidatorRemoval(bytes32 validationID) - internal - virtual - override - returns (Validator memory) - { + function _initiateValidatorRemoval(bytes32 validationID) internal virtual override { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); // Ensure the validation period is active. @@ -458,20 +451,15 @@ abstract contract ValidatorManager is // on the P-Chain. validator.endTime = uint64(block.timestamp); - uint64 endingWeight = validator.weight; - // Save the validator updates. $._validationPeriods[validationID] = validator; - bytes32 messageID; - (messageID, validator) = _initiateValidatorWeightUpdate(validationID, 0); + (, bytes32 messageID) = _initiateValidatorWeightUpdate(validationID, 0); // Emit the event to signal the start of the validator removal process. emit InitiatedValidatorRemoval( - validationID, messageID, endingWeight, uint64(block.timestamp) + validationID, messageID, validator.weight, uint64(block.timestamp) ); - - return validator; } /** @@ -570,7 +558,7 @@ abstract contract ValidatorManager is function _initiateValidatorWeightUpdate( bytes32 validationID, uint64 newWeight - ) internal virtual override returns (bytes32, Validator memory) { + ) internal virtual override returns (uint64, bytes32) { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); uint64 validatorWeight = $._validationPeriods[validationID].weight; @@ -593,7 +581,7 @@ abstract contract ValidatorManager is weight: newWeight }); - return (messageID, $._validationPeriods[validationID]); + return (nonce, messageID); } function _getChurnPeriodSeconds() internal view returns (uint64) { From c409ef2d0cd52e62b74fc9a33023949038196ee1 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 12:45:05 -0600 Subject: [PATCH 17/29] doccomments --- .../validator-manager/PoSValidatorManager.sol | 2 -- .../validator-manager/ValidatorManager.sol | 30 ++++++++++++------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 6c1be7c06..fe32865ab 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -323,8 +323,6 @@ abstract contract PoSValidatorManager is ) internal returns (bool) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); - // TODONOW: Functions that modify Validator state invalid any references to the Validator object. - // How can we make this safer to use? _initiateValidatorRemoval(validationID); Validator memory validator = getValidator(validationID); diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 4bd80533f..40fbe58d2 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -29,7 +29,7 @@ import {Initializable} from "@openzeppelin/contracts-upgradeable@5.0.2/proxy/utils/Initializable.sol"; /** - * @dev Implementation of the {IValidatorManager} interface. + * @dev Implementation of the {ACP99Manager} abstract contract. * * @custom:security-contact https://github.com/ava-labs/icm-contracts/blob/main/SECURITY.md */ @@ -240,10 +240,8 @@ abstract contract ValidatorManager is } /** - * @notice Begins the validator registration process, and sets the initial weight for the validator. - * This is the only method related to validator registration and removal that needs the initializedValidatorSet - * modifier. All others are guarded by checking the validator status changes initialized in this function. - * @param weight The weight of the validator being registered. + * @notice See {ACP99Manager-_initiateValidatorRegistration}. + * @dev This function modifies the validator's state. Callers should ensure that any references are updated. */ function _initiateValidatorRegistration( bytes memory nodeID, @@ -380,8 +378,7 @@ abstract contract ValidatorManager is } /** - * @notice Returns a validator registered to the given validationID - * @param validationID ID of the validation period associated with the validator + * @notice See {ACP99Manager-getValidator}. */ function getValidator(bytes32 validationID) public @@ -394,14 +391,23 @@ abstract contract ValidatorManager is return $._validationPeriods[validationID]; } + /** + * @notice See {ACP99Manager-l1TotalWeight}. + */ function l1TotalWeight() public view virtual override returns (uint64) { return _getValidatorManagerStorage()._churnTracker.totalWeight; } + /** + * @notice See {ACP99Manager-subnetID}. + */ function subnetID() public view virtual override returns (bytes32) { return _getValidatorManagerStorage()._subnetID; } + /** + * @notice See {ACP99Manager-completeValidatorWeightUpdate}. + */ function completeValidatorWeightUpdate(uint32 messageIndex) public virtual @@ -428,10 +434,8 @@ abstract contract ValidatorManager is } /** - * @notice Begins the process of ending an active validation period. The validation period must have been previously - * started by a successful call to {completeValidatorRegistration} with the given validationID. - * Any rewards for this validation period will stop accruing when this function is called. - * @param validationID The ID of the validation period being ended. + * @notice See {ACP99Manager-_initiateValidatorRemoval}. + * @dev This function modifies the validator's state. Callers should ensure that any references are updated. */ function _initiateValidatorRemoval(bytes32 validationID) internal virtual override { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); @@ -555,6 +559,10 @@ abstract contract ValidatorManager is return warpMessage; } + /** + * @notice See {ACP99Manager-_initiateValidatorWeightUpdate}. + * @dev This function modifies the validator's state. Callers should ensure that any references are updated. + */ function _initiateValidatorWeightUpdate( bytes32 validationID, uint64 newWeight From 2cf9632b59199269278afde383ed376b4be4776d Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 12:46:54 -0600 Subject: [PATCH 18/29] update bindings --- .../ERC20TokenStakingManager/ERC20TokenStakingManager.go | 2 +- .../NativeTokenStakingManager/NativeTokenStakingManager.go | 2 +- .../PoAValidatorManager/PoAValidatorManager.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index ee30af02e..bb6263f88 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220ac7367027bb3b334db593d0a3276740bf09687e2f8947a6fe0d701dc087c976c64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212202e56ae877e5052d2c0ddd9a5935283ea99b8af5087884b97e75b9fc6dbd6a59164736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index 489a753b8..a0c5fc45d 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122010007e4a95fb989f97d977141959d81ce65ad26366eccb808285b143cfc34a8264736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122055f1486459db5ac8a1a440bf6d0f206207edac77aa2ad44cd82792a3ba6a7ab064736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index 358805b46..97a4df433 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -92,7 +92,7 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a264697066735822122059fb7c0d64579e8658fb11c146b783a14a7a9430b47c7ba215e947b21bc6c6cc64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a2646970667358221220b37f5ae3966980f3bc7b9998c1945c46a812cf2d7258d40d5532ec3d29892e6a64736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. From 655d6994c4c30640eb5ca7326e652af88aa66524 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 15:37:34 -0600 Subject: [PATCH 19/29] remove IValidatorManager --- .../ERC20TokenStakingManager.go | 2 +- .../NativeTokenStakingManager.go | 2 +- .../PoAValidatorManager.go | 2 +- .../IPoSValidatorManager.go | 595 ++++++++++++++++-- .../IValidatorManager/IValidatorManager.go | 223 ------- .../ERC20TokenStakingManager.sol | 2 +- .../NativeTokenStakingManager.sol | 2 +- .../validator-manager/PoAValidatorManager.sol | 5 +- .../validator-manager/PoSValidatorManager.sol | 2 +- .../validator-manager/ValidatorManager.sol | 54 +- .../interfaces/IERC20TokenStakingManager.sol | 2 +- .../interfaces/INativeTokenStakingManager.sol | 2 +- .../interfaces/IPoAValidatorManager.sol | 4 +- .../interfaces/IPoSValidatorManager.sol | 8 +- .../interfaces/IValidatorManager.sol | 60 -- .../tests/ERC20TokenStakingManagerTests.t.sol | 2 +- .../NativeTokenStakingManagerTests.t.sol | 2 +- .../tests/PoAValidatorManagerTests.t.sol | 5 +- .../tests/PoSValidatorManagerTests.t.sol | 5 +- .../tests/ValidatorManagerTests.t.sol | 2 +- scripts/abi_bindings.sh | 2 +- 21 files changed, 614 insertions(+), 369 deletions(-) delete mode 100644 abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go delete mode 100644 contracts/validator-manager/interfaces/IValidatorManager.sol diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index bb6263f88..bf80ea3f3 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212202e56ae877e5052d2c0ddd9a5935283ea99b8af5087884b97e75b9fc6dbd6a59164736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220eb3ee0daa57d2aebbba17cb5368b3b61076fec41c0f031fbf4fa7f5c0eb64b4e64736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index a0c5fc45d..0d5175691 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122055f1486459db5ac8a1a440bf6d0f206207edac77aa2ad44cd82792a3ba6a7ab064736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220fefa8a178e8407d7ad158aabc54689418e8ddd5f996bf78177d3f37d09d805b164736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index 97a4df433..dcd990e46 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -92,7 +92,7 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a2646970667358221220b37f5ae3966980f3bc7b9998c1945c46a812cf2d7258d40d5532ec3d29892e6a64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a26469706673582212200791f69edd437d04d0e564251d830362412ff8a5d0aa30e4b69042271c35f22c64736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go b/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go index a9a1ef28a..2fc70bcaf 100644 --- a/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go +++ b/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go @@ -29,9 +29,41 @@ var ( _ = abi.ConvertType ) +// ConversionData is an auto generated low-level Go binding around an user-defined struct. +type ConversionData struct { + SubnetID [32]byte + ValidatorManagerBlockchainID [32]byte + ValidatorManagerAddress common.Address + InitialValidators []InitialValidator +} + +// InitialValidator is an auto generated low-level Go binding around an user-defined struct. +type InitialValidator struct { + NodeID []byte + BlsPublicKey []byte + Weight uint64 +} + +// PChainOwner is an auto generated low-level Go binding around an user-defined struct. +type PChainOwner struct { + Threshold uint32 + Addresses []common.Address +} + +// ValidatorMessagesValidationPeriod is an auto generated low-level Go binding around an user-defined struct. +type ValidatorMessagesValidationPeriod struct { + SubnetID [32]byte + NodeID []byte + BlsPublicKey []byte + RegistrationExpiry uint64 + RemainingBalanceOwner PChainOwner + DisableOwner PChainOwner + Weight uint64 +} + // IPoSValidatorManagerMetaData contains all meta data concerning the IPoSValidatorManager contract. var IPoSValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // IPoSValidatorManagerABI is the input ABI used to generate the binding from. @@ -453,48 +485,6 @@ func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeEn return _IPoSValidatorManager.Contract.InitializeEndValidation0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. -// -// Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ResendEndValidatorMessage(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "resendEndValidatorMessage", validationID) -} - -// ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. -// -// Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ResendEndValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ResendEndValidatorMessage(&_IPoSValidatorManager.TransactOpts, validationID) -} - -// ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. -// -// Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ResendEndValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ResendEndValidatorMessage(&_IPoSValidatorManager.TransactOpts, validationID) -} - -// ResendRegisterValidatorMessage is a paid mutator transaction binding the contract method 0xbee0a03f. -// -// Solidity: function resendRegisterValidatorMessage(bytes32 validationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ResendRegisterValidatorMessage(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "resendRegisterValidatorMessage", validationID) -} - -// ResendRegisterValidatorMessage is a paid mutator transaction binding the contract method 0xbee0a03f. -// -// Solidity: function resendRegisterValidatorMessage(bytes32 validationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ResendRegisterValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ResendRegisterValidatorMessage(&_IPoSValidatorManager.TransactOpts, validationID) -} - -// ResendRegisterValidatorMessage is a paid mutator transaction binding the contract method 0xbee0a03f. -// -// Solidity: function resendRegisterValidatorMessage(bytes32 validationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ResendRegisterValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ResendRegisterValidatorMessage(&_IPoSValidatorManager.TransactOpts, validationID) -} - // ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. // // Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() @@ -1309,3 +1299,522 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseUptimeUpdated(lo event.Raw = log return event, nil } + +// ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. +var ValidatorMessagesMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", +} + +// ValidatorMessagesABI is the input ABI used to generate the binding from. +// Deprecated: Use ValidatorMessagesMetaData.ABI instead. +var ValidatorMessagesABI = ValidatorMessagesMetaData.ABI + +// ValidatorMessagesBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ValidatorMessagesMetaData.Bin instead. +var ValidatorMessagesBin = ValidatorMessagesMetaData.Bin + +// DeployValidatorMessages deploys a new Ethereum contract, binding an instance of ValidatorMessages to it. +func DeployValidatorMessages(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ValidatorMessages, error) { + parsed, err := ValidatorMessagesMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ValidatorMessagesBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ValidatorMessages{ValidatorMessagesCaller: ValidatorMessagesCaller{contract: contract}, ValidatorMessagesTransactor: ValidatorMessagesTransactor{contract: contract}, ValidatorMessagesFilterer: ValidatorMessagesFilterer{contract: contract}}, nil +} + +// ValidatorMessages is an auto generated Go binding around an Ethereum contract. +type ValidatorMessages struct { + ValidatorMessagesCaller // Read-only binding to the contract + ValidatorMessagesTransactor // Write-only binding to the contract + ValidatorMessagesFilterer // Log filterer for contract events +} + +// ValidatorMessagesCaller is an auto generated read-only Go binding around an Ethereum contract. +type ValidatorMessagesCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ValidatorMessagesTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ValidatorMessagesTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ValidatorMessagesFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ValidatorMessagesFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ValidatorMessagesSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ValidatorMessagesSession struct { + Contract *ValidatorMessages // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ValidatorMessagesCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ValidatorMessagesCallerSession struct { + Contract *ValidatorMessagesCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ValidatorMessagesTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ValidatorMessagesTransactorSession struct { + Contract *ValidatorMessagesTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ValidatorMessagesRaw is an auto generated low-level Go binding around an Ethereum contract. +type ValidatorMessagesRaw struct { + Contract *ValidatorMessages // Generic contract binding to access the raw methods on +} + +// ValidatorMessagesCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ValidatorMessagesCallerRaw struct { + Contract *ValidatorMessagesCaller // Generic read-only contract binding to access the raw methods on +} + +// ValidatorMessagesTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ValidatorMessagesTransactorRaw struct { + Contract *ValidatorMessagesTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewValidatorMessages creates a new instance of ValidatorMessages, bound to a specific deployed contract. +func NewValidatorMessages(address common.Address, backend bind.ContractBackend) (*ValidatorMessages, error) { + contract, err := bindValidatorMessages(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ValidatorMessages{ValidatorMessagesCaller: ValidatorMessagesCaller{contract: contract}, ValidatorMessagesTransactor: ValidatorMessagesTransactor{contract: contract}, ValidatorMessagesFilterer: ValidatorMessagesFilterer{contract: contract}}, nil +} + +// NewValidatorMessagesCaller creates a new read-only instance of ValidatorMessages, bound to a specific deployed contract. +func NewValidatorMessagesCaller(address common.Address, caller bind.ContractCaller) (*ValidatorMessagesCaller, error) { + contract, err := bindValidatorMessages(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ValidatorMessagesCaller{contract: contract}, nil +} + +// NewValidatorMessagesTransactor creates a new write-only instance of ValidatorMessages, bound to a specific deployed contract. +func NewValidatorMessagesTransactor(address common.Address, transactor bind.ContractTransactor) (*ValidatorMessagesTransactor, error) { + contract, err := bindValidatorMessages(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ValidatorMessagesTransactor{contract: contract}, nil +} + +// NewValidatorMessagesFilterer creates a new log filterer instance of ValidatorMessages, bound to a specific deployed contract. +func NewValidatorMessagesFilterer(address common.Address, filterer bind.ContractFilterer) (*ValidatorMessagesFilterer, error) { + contract, err := bindValidatorMessages(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ValidatorMessagesFilterer{contract: contract}, nil +} + +// bindValidatorMessages binds a generic wrapper to an already deployed contract. +func bindValidatorMessages(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ValidatorMessagesMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ValidatorMessages *ValidatorMessagesRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ValidatorMessages.Contract.ValidatorMessagesCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ValidatorMessages *ValidatorMessagesRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ValidatorMessages.Contract.ValidatorMessagesTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ValidatorMessages *ValidatorMessagesRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ValidatorMessages.Contract.ValidatorMessagesTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ValidatorMessages *ValidatorMessagesCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ValidatorMessages.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ValidatorMessages *ValidatorMessagesTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ValidatorMessages.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ValidatorMessages *ValidatorMessagesTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ValidatorMessages.Contract.contract.Transact(opts, method, params...) +} + +// PackConversionData is a free data retrieval call binding the contract method 0x51f48008. +// +// Solidity: function packConversionData((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCaller) PackConversionData(opts *bind.CallOpts, conversionData ConversionData) ([]byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "packConversionData", conversionData) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// PackConversionData is a free data retrieval call binding the contract method 0x51f48008. +// +// Solidity: function packConversionData((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesSession) PackConversionData(conversionData ConversionData) ([]byte, error) { + return _ValidatorMessages.Contract.PackConversionData(&_ValidatorMessages.CallOpts, conversionData) +} + +// PackConversionData is a free data retrieval call binding the contract method 0x51f48008. +// +// Solidity: function packConversionData((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCallerSession) PackConversionData(conversionData ConversionData) ([]byte, error) { + return _ValidatorMessages.Contract.PackConversionData(&_ValidatorMessages.CallOpts, conversionData) +} + +// PackL1ValidatorRegistrationMessage is a free data retrieval call binding the contract method 0xa699c135. +// +// Solidity: function packL1ValidatorRegistrationMessage(bytes32 validationID, bool valid) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCaller) PackL1ValidatorRegistrationMessage(opts *bind.CallOpts, validationID [32]byte, valid bool) ([]byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "packL1ValidatorRegistrationMessage", validationID, valid) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// PackL1ValidatorRegistrationMessage is a free data retrieval call binding the contract method 0xa699c135. +// +// Solidity: function packL1ValidatorRegistrationMessage(bytes32 validationID, bool valid) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesSession) PackL1ValidatorRegistrationMessage(validationID [32]byte, valid bool) ([]byte, error) { + return _ValidatorMessages.Contract.PackL1ValidatorRegistrationMessage(&_ValidatorMessages.CallOpts, validationID, valid) +} + +// PackL1ValidatorRegistrationMessage is a free data retrieval call binding the contract method 0xa699c135. +// +// Solidity: function packL1ValidatorRegistrationMessage(bytes32 validationID, bool valid) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCallerSession) PackL1ValidatorRegistrationMessage(validationID [32]byte, valid bool) ([]byte, error) { + return _ValidatorMessages.Contract.PackL1ValidatorRegistrationMessage(&_ValidatorMessages.CallOpts, validationID, valid) +} + +// PackL1ValidatorWeightMessage is a free data retrieval call binding the contract method 0x854a893f. +// +// Solidity: function packL1ValidatorWeightMessage(bytes32 validationID, uint64 nonce, uint64 weight) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCaller) PackL1ValidatorWeightMessage(opts *bind.CallOpts, validationID [32]byte, nonce uint64, weight uint64) ([]byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "packL1ValidatorWeightMessage", validationID, nonce, weight) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// PackL1ValidatorWeightMessage is a free data retrieval call binding the contract method 0x854a893f. +// +// Solidity: function packL1ValidatorWeightMessage(bytes32 validationID, uint64 nonce, uint64 weight) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesSession) PackL1ValidatorWeightMessage(validationID [32]byte, nonce uint64, weight uint64) ([]byte, error) { + return _ValidatorMessages.Contract.PackL1ValidatorWeightMessage(&_ValidatorMessages.CallOpts, validationID, nonce, weight) +} + +// PackL1ValidatorWeightMessage is a free data retrieval call binding the contract method 0x854a893f. +// +// Solidity: function packL1ValidatorWeightMessage(bytes32 validationID, uint64 nonce, uint64 weight) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCallerSession) PackL1ValidatorWeightMessage(validationID [32]byte, nonce uint64, weight uint64) ([]byte, error) { + return _ValidatorMessages.Contract.PackL1ValidatorWeightMessage(&_ValidatorMessages.CallOpts, validationID, nonce, weight) +} + +// PackRegisterL1ValidatorMessage is a free data retrieval call binding the contract method 0xe0d5478f. +// +// Solidity: function packRegisterL1ValidatorMessage((bytes32,bytes,bytes,uint64,(uint32,address[]),(uint32,address[]),uint64) validationPeriod) pure returns(bytes32, bytes) +func (_ValidatorMessages *ValidatorMessagesCaller) PackRegisterL1ValidatorMessage(opts *bind.CallOpts, validationPeriod ValidatorMessagesValidationPeriod) ([32]byte, []byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "packRegisterL1ValidatorMessage", validationPeriod) + + if err != nil { + return *new([32]byte), *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out1 := *abi.ConvertType(out[1], new([]byte)).(*[]byte) + + return out0, out1, err + +} + +// PackRegisterL1ValidatorMessage is a free data retrieval call binding the contract method 0xe0d5478f. +// +// Solidity: function packRegisterL1ValidatorMessage((bytes32,bytes,bytes,uint64,(uint32,address[]),(uint32,address[]),uint64) validationPeriod) pure returns(bytes32, bytes) +func (_ValidatorMessages *ValidatorMessagesSession) PackRegisterL1ValidatorMessage(validationPeriod ValidatorMessagesValidationPeriod) ([32]byte, []byte, error) { + return _ValidatorMessages.Contract.PackRegisterL1ValidatorMessage(&_ValidatorMessages.CallOpts, validationPeriod) +} + +// PackRegisterL1ValidatorMessage is a free data retrieval call binding the contract method 0xe0d5478f. +// +// Solidity: function packRegisterL1ValidatorMessage((bytes32,bytes,bytes,uint64,(uint32,address[]),(uint32,address[]),uint64) validationPeriod) pure returns(bytes32, bytes) +func (_ValidatorMessages *ValidatorMessagesCallerSession) PackRegisterL1ValidatorMessage(validationPeriod ValidatorMessagesValidationPeriod) ([32]byte, []byte, error) { + return _ValidatorMessages.Contract.PackRegisterL1ValidatorMessage(&_ValidatorMessages.CallOpts, validationPeriod) +} + +// PackSubnetToL1ConversionMessage is a free data retrieval call binding the contract method 0x7f7c427a. +// +// Solidity: function packSubnetToL1ConversionMessage(bytes32 conversionID) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCaller) PackSubnetToL1ConversionMessage(opts *bind.CallOpts, conversionID [32]byte) ([]byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "packSubnetToL1ConversionMessage", conversionID) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// PackSubnetToL1ConversionMessage is a free data retrieval call binding the contract method 0x7f7c427a. +// +// Solidity: function packSubnetToL1ConversionMessage(bytes32 conversionID) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesSession) PackSubnetToL1ConversionMessage(conversionID [32]byte) ([]byte, error) { + return _ValidatorMessages.Contract.PackSubnetToL1ConversionMessage(&_ValidatorMessages.CallOpts, conversionID) +} + +// PackSubnetToL1ConversionMessage is a free data retrieval call binding the contract method 0x7f7c427a. +// +// Solidity: function packSubnetToL1ConversionMessage(bytes32 conversionID) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCallerSession) PackSubnetToL1ConversionMessage(conversionID [32]byte) ([]byte, error) { + return _ValidatorMessages.Contract.PackSubnetToL1ConversionMessage(&_ValidatorMessages.CallOpts, conversionID) +} + +// PackValidationUptimeMessage is a free data retrieval call binding the contract method 0xe1d68f30. +// +// Solidity: function packValidationUptimeMessage(bytes32 validationID, uint64 uptime) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCaller) PackValidationUptimeMessage(opts *bind.CallOpts, validationID [32]byte, uptime uint64) ([]byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "packValidationUptimeMessage", validationID, uptime) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// PackValidationUptimeMessage is a free data retrieval call binding the contract method 0xe1d68f30. +// +// Solidity: function packValidationUptimeMessage(bytes32 validationID, uint64 uptime) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesSession) PackValidationUptimeMessage(validationID [32]byte, uptime uint64) ([]byte, error) { + return _ValidatorMessages.Contract.PackValidationUptimeMessage(&_ValidatorMessages.CallOpts, validationID, uptime) +} + +// PackValidationUptimeMessage is a free data retrieval call binding the contract method 0xe1d68f30. +// +// Solidity: function packValidationUptimeMessage(bytes32 validationID, uint64 uptime) pure returns(bytes) +func (_ValidatorMessages *ValidatorMessagesCallerSession) PackValidationUptimeMessage(validationID [32]byte, uptime uint64) ([]byte, error) { + return _ValidatorMessages.Contract.PackValidationUptimeMessage(&_ValidatorMessages.CallOpts, validationID, uptime) +} + +// UnpackL1ValidatorRegistrationMessage is a free data retrieval call binding the contract method 0x021de88f. +// +// Solidity: function unpackL1ValidatorRegistrationMessage(bytes input) pure returns(bytes32, bool) +func (_ValidatorMessages *ValidatorMessagesCaller) UnpackL1ValidatorRegistrationMessage(opts *bind.CallOpts, input []byte) ([32]byte, bool, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "unpackL1ValidatorRegistrationMessage", input) + + if err != nil { + return *new([32]byte), *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out1 := *abi.ConvertType(out[1], new(bool)).(*bool) + + return out0, out1, err + +} + +// UnpackL1ValidatorRegistrationMessage is a free data retrieval call binding the contract method 0x021de88f. +// +// Solidity: function unpackL1ValidatorRegistrationMessage(bytes input) pure returns(bytes32, bool) +func (_ValidatorMessages *ValidatorMessagesSession) UnpackL1ValidatorRegistrationMessage(input []byte) ([32]byte, bool, error) { + return _ValidatorMessages.Contract.UnpackL1ValidatorRegistrationMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackL1ValidatorRegistrationMessage is a free data retrieval call binding the contract method 0x021de88f. +// +// Solidity: function unpackL1ValidatorRegistrationMessage(bytes input) pure returns(bytes32, bool) +func (_ValidatorMessages *ValidatorMessagesCallerSession) UnpackL1ValidatorRegistrationMessage(input []byte) ([32]byte, bool, error) { + return _ValidatorMessages.Contract.UnpackL1ValidatorRegistrationMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackL1ValidatorWeightMessage is a free data retrieval call binding the contract method 0x50782b0f. +// +// Solidity: function unpackL1ValidatorWeightMessage(bytes input) pure returns(bytes32, uint64, uint64) +func (_ValidatorMessages *ValidatorMessagesCaller) UnpackL1ValidatorWeightMessage(opts *bind.CallOpts, input []byte) ([32]byte, uint64, uint64, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "unpackL1ValidatorWeightMessage", input) + + if err != nil { + return *new([32]byte), *new(uint64), *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out1 := *abi.ConvertType(out[1], new(uint64)).(*uint64) + out2 := *abi.ConvertType(out[2], new(uint64)).(*uint64) + + return out0, out1, out2, err + +} + +// UnpackL1ValidatorWeightMessage is a free data retrieval call binding the contract method 0x50782b0f. +// +// Solidity: function unpackL1ValidatorWeightMessage(bytes input) pure returns(bytes32, uint64, uint64) +func (_ValidatorMessages *ValidatorMessagesSession) UnpackL1ValidatorWeightMessage(input []byte) ([32]byte, uint64, uint64, error) { + return _ValidatorMessages.Contract.UnpackL1ValidatorWeightMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackL1ValidatorWeightMessage is a free data retrieval call binding the contract method 0x50782b0f. +// +// Solidity: function unpackL1ValidatorWeightMessage(bytes input) pure returns(bytes32, uint64, uint64) +func (_ValidatorMessages *ValidatorMessagesCallerSession) UnpackL1ValidatorWeightMessage(input []byte) ([32]byte, uint64, uint64, error) { + return _ValidatorMessages.Contract.UnpackL1ValidatorWeightMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackRegisterL1ValidatorMessage is a free data retrieval call binding the contract method 0x9b835465. +// +// Solidity: function unpackRegisterL1ValidatorMessage(bytes input) pure returns((bytes32,bytes,bytes,uint64,(uint32,address[]),(uint32,address[]),uint64)) +func (_ValidatorMessages *ValidatorMessagesCaller) UnpackRegisterL1ValidatorMessage(opts *bind.CallOpts, input []byte) (ValidatorMessagesValidationPeriod, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "unpackRegisterL1ValidatorMessage", input) + + if err != nil { + return *new(ValidatorMessagesValidationPeriod), err + } + + out0 := *abi.ConvertType(out[0], new(ValidatorMessagesValidationPeriod)).(*ValidatorMessagesValidationPeriod) + + return out0, err + +} + +// UnpackRegisterL1ValidatorMessage is a free data retrieval call binding the contract method 0x9b835465. +// +// Solidity: function unpackRegisterL1ValidatorMessage(bytes input) pure returns((bytes32,bytes,bytes,uint64,(uint32,address[]),(uint32,address[]),uint64)) +func (_ValidatorMessages *ValidatorMessagesSession) UnpackRegisterL1ValidatorMessage(input []byte) (ValidatorMessagesValidationPeriod, error) { + return _ValidatorMessages.Contract.UnpackRegisterL1ValidatorMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackRegisterL1ValidatorMessage is a free data retrieval call binding the contract method 0x9b835465. +// +// Solidity: function unpackRegisterL1ValidatorMessage(bytes input) pure returns((bytes32,bytes,bytes,uint64,(uint32,address[]),(uint32,address[]),uint64)) +func (_ValidatorMessages *ValidatorMessagesCallerSession) UnpackRegisterL1ValidatorMessage(input []byte) (ValidatorMessagesValidationPeriod, error) { + return _ValidatorMessages.Contract.UnpackRegisterL1ValidatorMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackSubnetToL1ConversionMessage is a free data retrieval call binding the contract method 0x4d847884. +// +// Solidity: function unpackSubnetToL1ConversionMessage(bytes input) pure returns(bytes32) +func (_ValidatorMessages *ValidatorMessagesCaller) UnpackSubnetToL1ConversionMessage(opts *bind.CallOpts, input []byte) ([32]byte, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "unpackSubnetToL1ConversionMessage", input) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// UnpackSubnetToL1ConversionMessage is a free data retrieval call binding the contract method 0x4d847884. +// +// Solidity: function unpackSubnetToL1ConversionMessage(bytes input) pure returns(bytes32) +func (_ValidatorMessages *ValidatorMessagesSession) UnpackSubnetToL1ConversionMessage(input []byte) ([32]byte, error) { + return _ValidatorMessages.Contract.UnpackSubnetToL1ConversionMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackSubnetToL1ConversionMessage is a free data retrieval call binding the contract method 0x4d847884. +// +// Solidity: function unpackSubnetToL1ConversionMessage(bytes input) pure returns(bytes32) +func (_ValidatorMessages *ValidatorMessagesCallerSession) UnpackSubnetToL1ConversionMessage(input []byte) ([32]byte, error) { + return _ValidatorMessages.Contract.UnpackSubnetToL1ConversionMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackValidationUptimeMessage is a free data retrieval call binding the contract method 0x088c2463. +// +// Solidity: function unpackValidationUptimeMessage(bytes input) pure returns(bytes32, uint64) +func (_ValidatorMessages *ValidatorMessagesCaller) UnpackValidationUptimeMessage(opts *bind.CallOpts, input []byte) ([32]byte, uint64, error) { + var out []interface{} + err := _ValidatorMessages.contract.Call(opts, &out, "unpackValidationUptimeMessage", input) + + if err != nil { + return *new([32]byte), *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out1 := *abi.ConvertType(out[1], new(uint64)).(*uint64) + + return out0, out1, err + +} + +// UnpackValidationUptimeMessage is a free data retrieval call binding the contract method 0x088c2463. +// +// Solidity: function unpackValidationUptimeMessage(bytes input) pure returns(bytes32, uint64) +func (_ValidatorMessages *ValidatorMessagesSession) UnpackValidationUptimeMessage(input []byte) ([32]byte, uint64, error) { + return _ValidatorMessages.Contract.UnpackValidationUptimeMessage(&_ValidatorMessages.CallOpts, input) +} + +// UnpackValidationUptimeMessage is a free data retrieval call binding the contract method 0x088c2463. +// +// Solidity: function unpackValidationUptimeMessage(bytes input) pure returns(bytes32, uint64) +func (_ValidatorMessages *ValidatorMessagesCallerSession) UnpackValidationUptimeMessage(input []byte) ([32]byte, uint64, error) { + return _ValidatorMessages.Contract.UnpackValidationUptimeMessage(&_ValidatorMessages.CallOpts, input) +} diff --git a/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go b/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go deleted file mode 100644 index b09593664..000000000 --- a/abi-bindings/go/validator-manager/interfaces/IValidatorManager/IValidatorManager.go +++ /dev/null @@ -1,223 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package ivalidatormanager - -import ( - "errors" - "math/big" - "strings" - - "github.com/ava-labs/subnet-evm/accounts/abi" - "github.com/ava-labs/subnet-evm/accounts/abi/bind" - "github.com/ava-labs/subnet-evm/core/types" - "github.com/ava-labs/subnet-evm/interfaces" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = interfaces.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription - _ = abi.ConvertType -) - -// IValidatorManagerMetaData contains all meta data concerning the IValidatorManager contract. -var IValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", -} - -// IValidatorManagerABI is the input ABI used to generate the binding from. -// Deprecated: Use IValidatorManagerMetaData.ABI instead. -var IValidatorManagerABI = IValidatorManagerMetaData.ABI - -// IValidatorManager is an auto generated Go binding around an Ethereum contract. -type IValidatorManager struct { - IValidatorManagerCaller // Read-only binding to the contract - IValidatorManagerTransactor // Write-only binding to the contract - IValidatorManagerFilterer // Log filterer for contract events -} - -// IValidatorManagerCaller is an auto generated read-only Go binding around an Ethereum contract. -type IValidatorManagerCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// IValidatorManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. -type IValidatorManagerTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// IValidatorManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type IValidatorManagerFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// IValidatorManagerSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type IValidatorManagerSession struct { - Contract *IValidatorManager // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// IValidatorManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type IValidatorManagerCallerSession struct { - Contract *IValidatorManagerCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// IValidatorManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type IValidatorManagerTransactorSession struct { - Contract *IValidatorManagerTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// IValidatorManagerRaw is an auto generated low-level Go binding around an Ethereum contract. -type IValidatorManagerRaw struct { - Contract *IValidatorManager // Generic contract binding to access the raw methods on -} - -// IValidatorManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type IValidatorManagerCallerRaw struct { - Contract *IValidatorManagerCaller // Generic read-only contract binding to access the raw methods on -} - -// IValidatorManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type IValidatorManagerTransactorRaw struct { - Contract *IValidatorManagerTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewIValidatorManager creates a new instance of IValidatorManager, bound to a specific deployed contract. -func NewIValidatorManager(address common.Address, backend bind.ContractBackend) (*IValidatorManager, error) { - contract, err := bindIValidatorManager(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &IValidatorManager{IValidatorManagerCaller: IValidatorManagerCaller{contract: contract}, IValidatorManagerTransactor: IValidatorManagerTransactor{contract: contract}, IValidatorManagerFilterer: IValidatorManagerFilterer{contract: contract}}, nil -} - -// NewIValidatorManagerCaller creates a new read-only instance of IValidatorManager, bound to a specific deployed contract. -func NewIValidatorManagerCaller(address common.Address, caller bind.ContractCaller) (*IValidatorManagerCaller, error) { - contract, err := bindIValidatorManager(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &IValidatorManagerCaller{contract: contract}, nil -} - -// NewIValidatorManagerTransactor creates a new write-only instance of IValidatorManager, bound to a specific deployed contract. -func NewIValidatorManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*IValidatorManagerTransactor, error) { - contract, err := bindIValidatorManager(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &IValidatorManagerTransactor{contract: contract}, nil -} - -// NewIValidatorManagerFilterer creates a new log filterer instance of IValidatorManager, bound to a specific deployed contract. -func NewIValidatorManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*IValidatorManagerFilterer, error) { - contract, err := bindIValidatorManager(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &IValidatorManagerFilterer{contract: contract}, nil -} - -// bindIValidatorManager binds a generic wrapper to an already deployed contract. -func bindIValidatorManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := IValidatorManagerMetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_IValidatorManager *IValidatorManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _IValidatorManager.Contract.IValidatorManagerCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_IValidatorManager *IValidatorManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IValidatorManager.Contract.IValidatorManagerTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_IValidatorManager *IValidatorManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _IValidatorManager.Contract.IValidatorManagerTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_IValidatorManager *IValidatorManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _IValidatorManager.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_IValidatorManager *IValidatorManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IValidatorManager.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_IValidatorManager *IValidatorManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _IValidatorManager.Contract.contract.Transact(opts, method, params...) -} - -// ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. -// -// Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() -func (_IValidatorManager *IValidatorManagerTransactor) ResendEndValidatorMessage(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _IValidatorManager.contract.Transact(opts, "resendEndValidatorMessage", validationID) -} - -// ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. -// -// Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() -func (_IValidatorManager *IValidatorManagerSession) ResendEndValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IValidatorManager.Contract.ResendEndValidatorMessage(&_IValidatorManager.TransactOpts, validationID) -} - -// ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. -// -// Solidity: function resendEndValidatorMessage(bytes32 validationID) returns() -func (_IValidatorManager *IValidatorManagerTransactorSession) ResendEndValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IValidatorManager.Contract.ResendEndValidatorMessage(&_IValidatorManager.TransactOpts, validationID) -} - -// ResendRegisterValidatorMessage is a paid mutator transaction binding the contract method 0xbee0a03f. -// -// Solidity: function resendRegisterValidatorMessage(bytes32 validationID) returns() -func (_IValidatorManager *IValidatorManagerTransactor) ResendRegisterValidatorMessage(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _IValidatorManager.contract.Transact(opts, "resendRegisterValidatorMessage", validationID) -} - -// ResendRegisterValidatorMessage is a paid mutator transaction binding the contract method 0xbee0a03f. -// -// Solidity: function resendRegisterValidatorMessage(bytes32 validationID) returns() -func (_IValidatorManager *IValidatorManagerSession) ResendRegisterValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IValidatorManager.Contract.ResendRegisterValidatorMessage(&_IValidatorManager.TransactOpts, validationID) -} - -// ResendRegisterValidatorMessage is a paid mutator transaction binding the contract method 0xbee0a03f. -// -// Solidity: function resendRegisterValidatorMessage(bytes32 validationID) returns() -func (_IValidatorManager *IValidatorManagerTransactorSession) ResendRegisterValidatorMessage(validationID [32]byte) (*types.Transaction, error) { - return _IValidatorManager.Contract.ResendRegisterValidatorMessage(&_IValidatorManager.TransactOpts, validationID) -} diff --git a/contracts/validator-manager/ERC20TokenStakingManager.sol b/contracts/validator-manager/ERC20TokenStakingManager.sol index e0cea5923..3afcde9fa 100644 --- a/contracts/validator-manager/ERC20TokenStakingManager.sol +++ b/contracts/validator-manager/ERC20TokenStakingManager.sol @@ -7,7 +7,7 @@ pragma solidity 0.8.25; import {PoSValidatorManager} from "./PoSValidatorManager.sol"; import {PoSValidatorManagerSettings} from "./interfaces/IPoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "./interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "./ValidatorManager.sol"; import {IERC20TokenStakingManager} from "./interfaces/IERC20TokenStakingManager.sol"; import {IERC20Mintable} from "./interfaces/IERC20Mintable.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; diff --git a/contracts/validator-manager/NativeTokenStakingManager.sol b/contracts/validator-manager/NativeTokenStakingManager.sol index facf37a56..55319f185 100644 --- a/contracts/validator-manager/NativeTokenStakingManager.sol +++ b/contracts/validator-manager/NativeTokenStakingManager.sol @@ -7,7 +7,7 @@ pragma solidity 0.8.25; import {PoSValidatorManager} from "./PoSValidatorManager.sol"; import {PoSValidatorManagerSettings} from "./interfaces/IPoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "./interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "./ValidatorManager.sol"; import {INativeTokenStakingManager} from "./interfaces/INativeTokenStakingManager.sol"; import {INativeMinter} from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/INativeMinter.sol"; diff --git a/contracts/validator-manager/PoAValidatorManager.sol b/contracts/validator-manager/PoAValidatorManager.sol index 2f6ffa823..369291615 100644 --- a/contracts/validator-manager/PoAValidatorManager.sol +++ b/contracts/validator-manager/PoAValidatorManager.sol @@ -6,10 +6,7 @@ pragma solidity 0.8.25; import {ValidatorManager} from "./ValidatorManager.sol"; -import { - ValidatorManagerSettings, - ValidatorRegistrationInput -} from "./interfaces/IValidatorManager.sol"; +import {ValidatorManagerSettings, ValidatorRegistrationInput} from "./ValidatorManager.sol"; import {IPoAValidatorManager} from "./interfaces/IPoAValidatorManager.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; import {OwnableUpgradeable} from diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index fe32865ab..069ca3886 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -14,7 +14,7 @@ import { PoSValidatorInfo, PoSValidatorManagerSettings } from "./interfaces/IPoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "./interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "./ValidatorManager.sol"; import {Validator, ValidatorStatus} from "./ACP99Manager.sol"; import {IRewardCalculator} from "./interfaces/IRewardCalculator.sol"; import {WarpMessage} from diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 40fbe58d2..3d5a51812 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -6,11 +6,7 @@ pragma solidity 0.8.25; import {ValidatorMessages} from "./ValidatorMessages.sol"; -import { - IValidatorManager, - ValidatorChurnPeriod, - ValidatorManagerSettings -} from "./interfaces/IValidatorManager.sol"; +import {ValidatorChurnPeriod, ValidatorManagerSettings} from "./ValidatorManager.sol"; import { ACP99Manager, InitialValidator, @@ -28,17 +24,45 @@ import {ContextUpgradeable} from import {Initializable} from "@openzeppelin/contracts-upgradeable@5.0.2/proxy/utils/Initializable.sol"; +/** + * @dev Describes the current churn period + */ +struct ValidatorChurnPeriod { + uint256 startTime; + uint64 initialWeight; + uint64 totalWeight; + uint64 churnAmount; +} + +/** + * @notice Validator Manager settings, used to initialize the Validator Manager + * @notice The subnetID is the ID of the L1 that the Validator Manager is managing + * @notice The churnPeriodSeconds is the duration of the churn period in seconds + * @notice The maximumChurnPercentage is the maximum percentage of the total weight that can be added or removed in a single churn period + */ +struct ValidatorManagerSettings { + bytes32 subnetID; + uint64 churnPeriodSeconds; + uint8 maximumChurnPercentage; +} + +/** + * @dev Specifies a validator to register. + */ +struct ValidatorRegistrationInput { + bytes nodeID; + bytes blsPublicKey; + uint64 registrationExpiry; + PChainOwner remainingBalanceOwner; + PChainOwner disableOwner; +} + /** * @dev Implementation of the {ACP99Manager} abstract contract. * * @custom:security-contact https://github.com/ava-labs/icm-contracts/blob/main/SECURITY.md */ -abstract contract ValidatorManager is - Initializable, - ContextUpgradeable, - IValidatorManager, - ACP99Manager -{ +abstract contract ValidatorManager is Initializable, ContextUpgradeable, ACP99Manager { // solhint-disable private-vars-leading-underscore /// @custom:storage-location erc7201:avalanche-icm.storage.ValidatorManager @@ -316,7 +340,9 @@ abstract contract ValidatorManager is } /** - * @notice See {IValidatorManager-resendRegisterValidatorMessage}. + * @notice Resubmits a validator registration message to be sent to the P-Chain. + * Only necessary if the original message can't be delivered due to validator churn. + * @param validationID The ID of the validation period being registered. */ function resendRegisterValidatorMessage(bytes32 validationID) external { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); @@ -467,7 +493,9 @@ abstract contract ValidatorManager is } /** - * @notice See {IValidatorManager-resendEndValidatorMessage}. + * @notice Resubmits a validator end message to be sent to the P-Chain. + * Only necessary if the original message can't be delivered due to validator churn. + * @param validationID The ID of the validation period being ended. */ function resendEndValidatorMessage(bytes32 validationID) external { ValidatorManagerStorage storage $ = _getValidatorManagerStorage(); diff --git a/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol b/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol index eb1b56a32..cf6d7bb95 100644 --- a/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol +++ b/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.25; -import {ValidatorRegistrationInput} from "./IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {IPoSValidatorManager} from "./IPoSValidatorManager.sol"; /** diff --git a/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol b/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol index c1cc4a2c9..205ff85ec 100644 --- a/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol +++ b/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.25; -import {ValidatorRegistrationInput} from "./IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {IPoSValidatorManager} from "./IPoSValidatorManager.sol"; /** diff --git a/contracts/validator-manager/interfaces/IPoAValidatorManager.sol b/contracts/validator-manager/interfaces/IPoAValidatorManager.sol index 94c1663d3..163d77531 100644 --- a/contracts/validator-manager/interfaces/IPoAValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoAValidatorManager.sol @@ -5,12 +5,12 @@ pragma solidity 0.8.25; -import {IValidatorManager, ValidatorRegistrationInput} from "./IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; /** * @notice Interface for Proof of Authority Validator Manager contracts */ -interface IPoAValidatorManager is IValidatorManager { +interface IPoAValidatorManager { /** * @notice Begins the validator registration process, and sets the {weight} of the validator. * @param registrationInput The inputs for a validator registration. diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index 59cd0b311..beaea61f0 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.25; -import {IValidatorManager, ValidatorManagerSettings} from "./IValidatorManager.sol"; +import {ValidatorManagerSettings} from "../ValidatorManager.sol"; import {IRewardCalculator} from "./IRewardCalculator.sol"; /** @@ -20,7 +20,7 @@ enum DelegatorStatus { /** * @notice PoS Validator Manager settings, used to initialize the PoS Validator Manager - * @notice baseSettings specified the base settings for the Validator Manager. See {IValidatorManager-ValidatorManagerSettings} + * @notice baseSettings specified the base settings for the Validator Manager. See {ValidatorManager-ValidatorManagerSettings} * @notice minimumStakeAmount is the minimum amount of stake required to stake to a validator * @notice maximumStakeAmount is the maximum amount of stake that can be staked to a validator * @notice minimumStakeDuration is the minimum duration that validators must stake for @@ -58,7 +58,7 @@ struct Delegator { } /** - * @dev Describes the active state of a PoS Validator in addition the information in {IValidatorManager-Validator} + * @dev Describes the active state of a PoS Validator in addition the information in {ValidatorManager-Validator} */ struct PoSValidatorInfo { address owner; @@ -70,7 +70,7 @@ struct PoSValidatorInfo { /** * @notice Interface for Proof of Stake Validator Managers */ -interface IPoSValidatorManager is IValidatorManager { +interface IPoSValidatorManager { /** * @notice Event emitted when a delegator registration is initiated * @param delegationID The ID of the delegation diff --git a/contracts/validator-manager/interfaces/IValidatorManager.sol b/contracts/validator-manager/interfaces/IValidatorManager.sol deleted file mode 100644 index b5b023b74..000000000 --- a/contracts/validator-manager/interfaces/IValidatorManager.sol +++ /dev/null @@ -1,60 +0,0 @@ -// (c) 2024, Ava Labs, Inc. All rights reserved. -// See the file LICENSE for licensing terms. - -// SPDX-License-Identifier: Ecosystem - -pragma solidity 0.8.25; - -import {PChainOwner} from "../ACP99Manager.sol"; - -/** - * @dev Describes the current churn period - */ -struct ValidatorChurnPeriod { - uint256 startTime; - uint64 initialWeight; - uint64 totalWeight; - uint64 churnAmount; -} - -/** - * @notice Validator Manager settings, used to initialize the Validator Manager - * @notice The subnetID is the ID of the L1 that the Validator Manager is managing - * @notice The churnPeriodSeconds is the duration of the churn period in seconds - * @notice The maximumChurnPercentage is the maximum percentage of the total weight that can be added or removed in a single churn period - */ -struct ValidatorManagerSettings { - bytes32 subnetID; - uint64 churnPeriodSeconds; - uint8 maximumChurnPercentage; -} - -/** - * @dev Specifies a validator to register. - */ -struct ValidatorRegistrationInput { - bytes nodeID; - bytes blsPublicKey; - uint64 registrationExpiry; - PChainOwner remainingBalanceOwner; - PChainOwner disableOwner; -} - -/** - * @notice Interface for Validator Manager contracts that implement Subnet-only Validator management. - */ -interface IValidatorManager { - /** - * @notice Resubmits a validator registration message to be sent to the P-Chain. - * Only necessary if the original message can't be delivered due to validator churn. - * @param validationID The ID of the validation period being registered. - */ - function resendRegisterValidatorMessage(bytes32 validationID) external; - - /** - * @notice Resubmits a validator end message to be sent to the P-Chain. - * Only necessary if the original message can't be delivered due to validator churn. - * @param validationID The ID of the validation period being ended. - */ - function resendEndValidatorMessage(bytes32 validationID) external; -} diff --git a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol index e75987602..7cdd34912 100644 --- a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol @@ -9,7 +9,7 @@ import {PoSValidatorManagerTest} from "./PoSValidatorManagerTests.t.sol"; import {ERC20TokenStakingManager} from "../ERC20TokenStakingManager.sol"; import {PoSValidatorManager, PoSValidatorManagerSettings} from "../PoSValidatorManager.sol"; import {ExampleRewardCalculator} from "../ExampleRewardCalculator.sol"; -import {ValidatorRegistrationInput} from "../interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {ICMInitializable} from "../../utilities/ICMInitializable.sol"; import {ExampleERC20} from "@mocks/ExampleERC20.sol"; import {IERC20} from "@openzeppelin/contracts@5.0.2/token/ERC20/IERC20.sol"; diff --git a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol index 674a342d8..f3082b232 100644 --- a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol @@ -9,7 +9,7 @@ import {Test} from "@forge-std/Test.sol"; import {PoSValidatorManagerTest} from "./PoSValidatorManagerTests.t.sol"; import {NativeTokenStakingManager} from "../NativeTokenStakingManager.sol"; import {PoSValidatorManager, PoSValidatorManagerSettings} from "../PoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "../interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {ExampleRewardCalculator} from "../ExampleRewardCalculator.sol"; import {ICMInitializable} from "../../utilities/ICMInitializable.sol"; import {INativeMinter} from diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index e6dc77bb7..514dad7f7 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -6,10 +6,7 @@ pragma solidity 0.8.25; import {PoAValidatorManager} from "../PoAValidatorManager.sol"; -import { - ValidatorManagerSettings, - ValidatorRegistrationInput -} from "../interfaces/IValidatorManager.sol"; +import {ValidatorManagerSettings, ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; import {ValidatorManager} from "../ValidatorManager.sol"; diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index f8bc4c50d..97dcf0733 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -12,10 +12,7 @@ import { DelegatorStatus, PoSValidatorManagerSettings } from "../interfaces/IPoSValidatorManager.sol"; import {ValidatorManager, ValidatorStatus} from "../ValidatorManager.sol"; -import { - ValidatorManagerSettings, - ValidatorRegistrationInput -} from "../interfaces/IValidatorManager.sol"; +import {ValidatorManagerSettings, ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {ValidatorMessages} from "../ValidatorMessages.sol"; import { WarpMessage, diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 50fa88c30..4f1ac7a2a 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -8,7 +8,7 @@ pragma solidity 0.8.25; import {Test} from "@forge-std/Test.sol"; import {ValidatorManager} from "../ValidatorManager.sol"; import {ValidatorMessages} from "../ValidatorMessages.sol"; -import {ValidatorRegistrationInput} from "../interfaces/IValidatorManager.sol"; +import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import { WarpMessage, IWarpMessenger diff --git a/scripts/abi_bindings.sh b/scripts/abi_bindings.sh index 0f8604905..a5491d18e 100755 --- a/scripts/abi_bindings.sh +++ b/scripts/abi_bindings.sh @@ -18,7 +18,7 @@ echo "ARCH set to $ARCH" DEFAULT_CONTRACT_LIST="TeleporterMessenger TeleporterRegistry ExampleERC20 ExampleRewardCalculator TestMessenger ValidatorSetSig NativeTokenStakingManager ERC20TokenStakingManager PoAValidatorManager TokenHome TokenRemote ERC20TokenHome ERC20TokenHomeUpgradeable ERC20TokenRemote ERC20TokenRemoteUpgradeable NativeTokenHome NativeTokenHomeUpgradeable NativeTokenRemote NativeTokenRemoteUpgradeable -WrappedNativeToken MockERC20SendAndCallReceiver MockNativeSendAndCallReceiver ExampleERC20Decimals IValidatorManager IPoSValidatorManager ACP99Manager" +WrappedNativeToken MockERC20SendAndCallReceiver MockNativeSendAndCallReceiver ExampleERC20Decimals IPoSValidatorManager ACP99Manager" PROXY_LIST="TransparentUpgradeableProxy ProxyAdmin" SUBNET_EVM_LIST="INativeMinter" From eafdd8a5c2fe4f8a1f061963da1309357374d605 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 15:59:54 -0600 Subject: [PATCH 20/29] rename initialize methods to initiate --- .../ERC20TokenStakingManager.sol | 12 +- .../NativeTokenStakingManager.sol | 12 +- .../validator-manager/PoAValidatorManager.sol | 10 +- .../validator-manager/PoSValidatorManager.sol | 84 ++++---- contracts/validator-manager/README.md | 30 +-- .../validator-manager/StateTransition.md | 2 +- .../validator-manager/ValidatorManager.sol | 6 +- .../interfaces/IERC20TokenStakingManager.sol | 4 +- .../interfaces/INativeTokenStakingManager.sol | 4 +- .../interfaces/IPoAValidatorManager.sol | 4 +- .../interfaces/IPoSValidatorManager.sol | 28 +-- .../tests/ERC20TokenStakingManagerTests.t.sol | 14 +- .../NativeTokenStakingManagerTests.t.sol | 12 +- .../tests/PoAValidatorManagerTests.t.sol | 16 +- .../tests/PoSValidatorManagerTests.t.sol | 186 +++++++++--------- .../tests/ValidatorManagerTests.t.sol | 38 ++-- 16 files changed, 230 insertions(+), 232 deletions(-) diff --git a/contracts/validator-manager/ERC20TokenStakingManager.sol b/contracts/validator-manager/ERC20TokenStakingManager.sol index 3afcde9fa..096fc4443 100644 --- a/contracts/validator-manager/ERC20TokenStakingManager.sol +++ b/contracts/validator-manager/ERC20TokenStakingManager.sol @@ -96,27 +96,27 @@ contract ERC20TokenStakingManager is } /** - * @notice See {IERC20TokenStakingManager-initializeValidatorRegistration} + * @notice See {IERC20TokenStakingManager-initiateValidatorRegistration} */ - function initializeValidatorRegistration( + function initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) external nonReentrant returns (bytes32 validationID) { - return _initializeValidatorRegistration( + return _initiateValidatorRegistration( registrationInput, delegationFeeBips, minStakeDuration, stakeAmount ); } /** - * @notice See {IERC20TokenStakingManager-initializeDelegatorRegistration} + * @notice See {IERC20TokenStakingManager-initiateDelegatorRegistration} */ - function initializeDelegatorRegistration( + function initiateDelegatorRegistration( bytes32 validationID, uint256 delegationAmount ) external nonReentrant returns (bytes32) { - return _initializeDelegatorRegistration(validationID, _msgSender(), delegationAmount); + return _initiateDelegatorRegistration(validationID, _msgSender(), delegationAmount); } /** diff --git a/contracts/validator-manager/NativeTokenStakingManager.sol b/contracts/validator-manager/NativeTokenStakingManager.sol index 55319f185..fc875cb33 100644 --- a/contracts/validator-manager/NativeTokenStakingManager.sol +++ b/contracts/validator-manager/NativeTokenStakingManager.sol @@ -59,28 +59,28 @@ contract NativeTokenStakingManager is function __NativeTokenStakingManager_init_unchained() internal onlyInitializing {} /** - * @notice See {INativeTokenStakingManager-initializeValidatorRegistration}. + * @notice See {INativeTokenStakingManager-initiateValidatorRegistration}. */ - function initializeValidatorRegistration( + function initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration ) external payable nonReentrant returns (bytes32) { - return _initializeValidatorRegistration( + return _initiateValidatorRegistration( registrationInput, delegationFeeBips, minStakeDuration, msg.value ); } /** - * @notice See {INativeTokenStakingManager-initializeDelegatorRegistration}. + * @notice See {INativeTokenStakingManager-initiateDelegatorRegistration}. */ - function initializeDelegatorRegistration(bytes32 validationID) + function initiateDelegatorRegistration(bytes32 validationID) external payable nonReentrant returns (bytes32) { - return _initializeDelegatorRegistration(validationID, _msgSender(), msg.value); + return _initiateDelegatorRegistration(validationID, _msgSender(), msg.value); } /** diff --git a/contracts/validator-manager/PoAValidatorManager.sol b/contracts/validator-manager/PoAValidatorManager.sol index 369291615..9604bf074 100644 --- a/contracts/validator-manager/PoAValidatorManager.sol +++ b/contracts/validator-manager/PoAValidatorManager.sol @@ -46,9 +46,9 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU // solhint-enable func-name-mixedcase /** - * @notice See {IPoAValidatorManager-initializeValidatorRegistration}. + * @notice See {IPoAValidatorManager-initiateValidatorRegistration}. */ - function initializeValidatorRegistration( + function initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint64 weight ) external onlyOwner returns (bytes32 validationID) { @@ -64,9 +64,9 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU // solhint-enable ordering /** - * @notice See {IPoAValidatorManager-initializeEndValidation}. + * @notice See {IPoAValidatorManager-initiateValidatorRemoval}. */ - function initializeEndValidation(bytes32 validationID) external override onlyOwner { + function initiateValidatorRemoval(bytes32 validationID) external override onlyOwner { _initiateValidatorRemoval(validationID); } @@ -79,7 +79,7 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU override returns (bytes32) { - (bytes32 validationID,) = _completeEndValidation(messageIndex); + (bytes32 validationID,) = _completeValidatorRemoval(messageIndex); return validationID; } } diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 069ca3886..31663b0f6 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -210,40 +210,40 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-initializeEndValidation}. + * @notice See {IPoSValidatorManager-initiateValidatorRemoval}. */ - function initializeEndValidation( + function initiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex ) external { - _initializeEndValidationWithCheck( + _initiateValidatorRemovalWithCheck( validationID, includeUptimeProof, messageIndex, address(0) ); } /** - * @notice See {IPoSValidatorManager-initializeEndValidation}. + * @notice See {IPoSValidatorManager-initiateValidatorRemoval}. */ - function initializeEndValidation( + function initiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) external { - _initializeEndValidationWithCheck( + _initiateValidatorRemovalWithCheck( validationID, includeUptimeProof, messageIndex, rewardRecipient ); } - function _initializeEndValidationWithCheck( + function _initiateValidatorRemovalWithCheck( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) internal { if ( - !_initializeEndPoSValidation( + !_initiatePoSValidatorRemoval( validationID, includeUptimeProof, messageIndex, rewardRecipient ) ) { @@ -252,28 +252,30 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-forceInitializeEndValidation}. + * @notice See {IPoSValidatorManager-forceinitiateValidatorRemoval}. */ - function forceInitializeEndValidation( + function forceinitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex ) external { // Ignore the return value here to force end validation, regardless of possible missed rewards - _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex, address(0)); + _initiatePoSValidatorRemoval(validationID, includeUptimeProof, messageIndex, address(0)); } /** - * @notice See {IPoSValidatorManager-forceInitializeEndValidation}. + * @notice See {IPoSValidatorManager-forceinitiateValidatorRemoval}. */ - function forceInitializeEndValidation( + function forceinitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) external { // Ignore the return value here to force end validation, regardless of possible missed rewards - _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex, rewardRecipient); + _initiatePoSValidatorRemoval( + validationID, includeUptimeProof, messageIndex, rewardRecipient + ); } function changeValidatorRewardRecipient( @@ -311,11 +313,11 @@ abstract contract PoSValidatorManager is } /** - * @dev Helper function that initializes the end of a PoS validation period. + * @dev Helper function that initiates the end of a PoS validation period. * Returns false if it is possible for the validator to claim rewards, but it is not eligible. * Returns true otherwise. */ - function _initializeEndPoSValidation( + function _initiatePoSValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, @@ -382,7 +384,7 @@ abstract contract PoSValidatorManager is { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); - (bytes32 validationID, Validator memory validator) = _completeEndValidation(messageIndex); + (bytes32 validationID, Validator memory validator) = _completeValidatorRemoval(messageIndex); // Return now if this was originally a PoA validator that was later migrated to this PoS manager, // or the validator was part of the initial validator set. @@ -452,7 +454,7 @@ abstract contract PoSValidatorManager is return uptime; } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, @@ -533,7 +535,7 @@ abstract contract PoSValidatorManager is */ function _unlock(address to, uint256 value) internal virtual; - function _initializeDelegatorRegistration( + function _initiateDelegatorRegistration( bytes32 validationID, address delegatorAddress, uint256 delegationAmount @@ -564,7 +566,7 @@ abstract contract PoSValidatorManager is // Store the delegation information. Set the delegator status to pending added, // so that it can be properly started in the complete step, even if the delivered - // nonce is greater than the nonce used to initialize registration. + // nonce is greater than the nonce used to initiate registration. $._delegatorStakes[delegationID].status = DelegatorStatus.PendingAdded; $._delegatorStakes[delegationID].owner = delegatorAddress; $._delegatorStakes[delegationID].validationID = validationID; @@ -596,7 +598,7 @@ abstract contract PoSValidatorManager is Validator memory validator = getValidator(validationID); // Ensure the delegator is pending added. Since anybody can call this function once - // delegator registration has been initialized, we need to make sure that this function is only + // delegator registration has been initiated, we need to make sure that this function is only // callable after that has been done. if (delegator.status != DelegatorStatus.PendingAdded) { revert InvalidDelegatorStatus(delegator.status); @@ -633,78 +635,74 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-initializeEndDelegation}. + * @notice See {IPoSValidatorManager-initiateEndDelegation}. */ - function initializeEndDelegation( + function initiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external { - _initializeEndDelegationWithCheck( - delegationID, includeUptimeProof, messageIndex, address(0) - ); + _initiateEndDelegationWithCheck(delegationID, includeUptimeProof, messageIndex, address(0)); } /** - * @notice See {IPoSValidatorManager-initializeEndDelegation}. + * @notice See {IPoSValidatorManager-initiateEndDelegation}. */ - function initializeEndDelegation( + function initiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) external { - _initializeEndDelegationWithCheck( + _initiateEndDelegationWithCheck( delegationID, includeUptimeProof, messageIndex, rewardRecipient ); } - function _initializeEndDelegationWithCheck( + function _initiateEndDelegationWithCheck( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) internal { if ( - !_initializeEndDelegation( - delegationID, includeUptimeProof, messageIndex, rewardRecipient - ) + !_initiateEndDelegation(delegationID, includeUptimeProof, messageIndex, rewardRecipient) ) { revert DelegatorIneligibleForRewards(delegationID); } } /** - * @notice See {IPoSValidatorManager-forceInitializeEndDelegation}. + * @notice See {IPoSValidatorManager-forceInitiateEndDelegation}. */ - function forceInitializeEndDelegation( + function forceInitiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external { // Ignore the return value here to force end delegation, regardless of possible missed rewards - _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex, address(0)); + _initiateEndDelegation(delegationID, includeUptimeProof, messageIndex, address(0)); } /** - * @notice See {IPoSValidatorManager-forceInitializeEndDelegation}. + * @notice See {IPoSValidatorManager-forceInitiateEndDelegation}. */ - function forceInitializeEndDelegation( + function forceInitiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) external { // Ignore the return value here to force end delegation, regardless of possible missed rewards - _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex, rewardRecipient); + _initiateEndDelegation(delegationID, includeUptimeProof, messageIndex, rewardRecipient); } /** - * @dev Helper function that initializes the end of a PoS delegation period. + * @dev Helper function that initiates the end of a PoS delegation period. * Returns false if it is possible for the delegator to claim rewards, but it is not eligible. * Returns true otherwise. */ - function _initializeEndDelegation( + function _initiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, @@ -749,7 +747,7 @@ abstract contract PoSValidatorManager is // 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. + // initiate the removal. $._delegatorStakes[delegationID].status = DelegatorStatus.PendingRemoved; ($._delegatorStakes[delegationID].endingNonce,) = @@ -861,7 +859,7 @@ abstract contract PoSValidatorManager is Delegator memory delegator = $._delegatorStakes[delegationID]; // Ensure the delegator is pending removed. Since anybody can call this function once - // end delegation has been initialized, we need to make sure that this function is only + // end delegation has been initiated, we need to make sure that this function is only // callable after that has been done. if (delegator.status != DelegatorStatus.PendingRemoved) { revert InvalidDelegatorStatus(delegator.status); diff --git a/contracts/validator-manager/README.md b/contracts/validator-manager/README.md index ebd794a20..68c94a37b 100644 --- a/contracts/validator-manager/README.md +++ b/contracts/validator-manager/README.md @@ -20,23 +20,23 @@ class ValidatorManager note for ValidatorManager "Implements most of ACP99Manager" class PoSValidatorManager { - +initializeEndValidation() + +initiateValidatorRemoval() +completeDelegatorRegistration() - +initializeEndDelegation() + +initiateEndDelegation() +completeEndDelegation() } <> PoSValidatorManager class ERC20TokenStakingManager { - +initializeValidatorRegistration() - +initializeDelegatorRegistration() + +initiateValidatorRegistration() + +initiateDelegatorRegistration() } class NativeTokenStakingManager { - +initializeValidatorRegistration() payable - +initializeDelegatorRegistration() payable + +initiateValidatorRegistration() payable + +initiateDelegatorRegistration() payable } class PoAValidatorManager { - +initializeValidatorRegistration() - +initializeEndValidation() + +initiateValidatorRegistration() + +initiateValidatorRemoval() } ACP99Manager <|-- ValidatorManager @@ -118,7 +118,7 @@ A `PoAValidatorManager` can later be converted to a `PoSValidatorManager` by upg ### Register a Validator -Validator registration is initiated with a call to `initializeValidatorRegistration`. The sender of this transaction is registered as the validator owner. Churn limitations are checked - only a certain (configurable) percentage of the total weight is allowed to be added or removed in a (configurable) period of time. The `ValidatorManager` then constructs a [`RegisterL1ValidatorMessage`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#registerl1validatormessage) Warp message to be sent to the P-Chain. Each validator registration request includes all of the information needed to identify the validator and its stake weight, as well as an `expiry` timestamp before which the `RegisterL1ValidatorMessage` must be delivered to the P-Chain. If the validator is not registered on the P-Chain before the `expiry`, then the validator may be removed from the contract state by calling `completeEndValidation`. +Validator registration is initiated with a call to `initiateValidatorRegistration`. The sender of this transaction is registered as the validator owner. Churn limitations are checked - only a certain (configurable) percentage of the total weight is allowed to be added or removed in a (configurable) period of time. The `ValidatorManager` then constructs a [`RegisterL1ValidatorMessage`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#registerl1validatormessage) Warp message to be sent to the P-Chain. Each validator registration request includes all of the information needed to identify the validator and its stake weight, as well as an `expiry` timestamp before which the `RegisterL1ValidatorMessage` must be delivered to the P-Chain. If the validator is not registered on the P-Chain before the `expiry`, then the validator may be removed from the contract state by calling `completeEndValidation`. The `RegisterL1ValidatorMessage` is delivered to the P-Chain as the Warp message payload of a `RegisterL1ValidatorTx`. Please see the transaction [specification](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#registerl1validatortx) for validity requirements. The P-Chain then signs a [`L1ValidatorRegistrationMessage`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#l1validatorregistrationmessage) Warp message indicating that the specified validator was successfully registered on the P-Chain. @@ -126,7 +126,7 @@ The `L1ValidatorRegistrationMessage` is delivered to the `ValidatorManager` via ### Remove a Validator -Validator exit is initiated with a call to `initializeEndValidation` on the `ValidatorManager`. Only the validator owner may initiate exit. For `PoSValidatorManagers` a [`ValidationUptimeMessage`](./UptimeMessageSpec.md) Warp message may optionally be provided in order to calculate the staking rewards; otherwise the latest received uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). This proof may be requested directly from the L1 validators, which will provide it in a `ValidationUptimeMessage` Warp message. If the uptime is not sufficient to earn validation rewards, the call to `initializeEndValidation` will fail. `forceInitializeEndValidation` acts the same as `initializeEndValidation`, but bypasses the uptime-based rewards check. Once `initializeEndValidation` or `forceInitializeEndValidation` is called, staking rewards cease accruing for `PoSValidatorManagers`. +Validator exit is initiated with a call to `initiateValidatorRemoval` on the `ValidatorManager`. Only the validator owner may initiate exit. For `PoSValidatorManagers` a [`ValidationUptimeMessage`](./UptimeMessageSpec.md) Warp message may optionally be provided in order to calculate the staking rewards; otherwise the latest received uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). This proof may be requested directly from the L1 validators, which will provide it in a `ValidationUptimeMessage` Warp message. If the uptime is not sufficient to earn validation rewards, the call to `initiateValidatorRemoval` will fail. `forceInitiateValidatorRemoval` acts the same as `initiateValidatorRemoval`, but bypasses the uptime-based rewards check. Once `initiateValidatorRemoval` or `forceInitiateValidatorRemoval` is called, staking rewards cease accruing for `PoSValidatorManagers`. The `ValidatorManager` contructs an [`L1ValidatorWeightMessage`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#l1validatorweightmessage) Warp message with the weight set to `0`. This is delivered to the P-Chain as the payload of a [`SetL1ValidatorWeightTx`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#setl1validatorweighttx). The P-Chain acknowledges the validator exit by signing an `L1ValidatorRegistrationMessage` with `valid=0`, which is delivered to the `ValidatorManager` by calling `completeEndValidation`. The validation is removed from the contract's state, and for `PoSValidatorManagers`, staking rewards are disbursed and stake is returned. @@ -134,24 +134,24 @@ The `ValidatorManager` contructs an [`L1ValidatorWeightMessage`](https://github. ACP-77 also provides a method to disable a validator without interacting with the L1 directly. The P-Chain transaction [`DisableL1ValidatorTx`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#disablel1validatortx) disables the validator on the P-Chain. The disabled validator's weight will still count towards the L1's total weight. -Disabled L1 validators can re-activate at any time by increasing their balance with an `IncreaseBalanceTx`. Anyone can call `IncreaseBalanceTx` for any validator on the P-Chain. A disabled validator can only be completely and permanently removed from the validator set by a call to `initializeEndValidation`. +Disabled L1 validators can re-activate at any time by increasing their balance with an `IncreaseBalanceTx`. Anyone can call `IncreaseBalanceTx` for any validator on the P-Chain. A disabled validator can only be completely and permanently removed from the validator set by a call to `initiateValidatorRemoval`. ### (PoS only) Register a Delegator -`PoSValidatorManager` supports delegation to an actively staked validator as a way for users to earn staking rewards without having to validate the chain. Delegators pay a configurable percentage fee on any earned staking rewards to the host validator. A delegator may be registered by calling `initializeDelegatorRegistration` and providing an amount to stake. The delegator will be registered as long as churn restrictions are not violated. The delegator is reflected on the P-Chain by adjusting the validator's registered weight via a [`SetL1ValidatorWeightTx`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#setl1validatorweighttx). The weight change acknowledgement is delivered to the `PoSValidatorManager` via an [`L1ValidatorWeightMessage`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#l1validatorweightmessage), which is provided by calling `completeDelegatorRegistration`. +`PoSValidatorManager` supports delegation to an actively staked validator as a way for users to earn staking rewards without having to validate the chain. Delegators pay a configurable percentage fee on any earned staking rewards to the host validator. A delegator may be registered by calling `initiateDelegatorRegistration` and providing an amount to stake. The delegator will be registered as long as churn restrictions are not violated. The delegator is reflected on the P-Chain by adjusting the validator's registered weight via a [`SetL1ValidatorWeightTx`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#setl1validatorweighttx). The weight change acknowledgement is delivered to the `PoSValidatorManager` via an [`L1ValidatorWeightMessage`](https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/77-reinventing-subnets#l1validatorweightmessage), which is provided by calling `completeDelegatorRegistration`. > [!NOTE] -> The P-Chain is only willing to sign an `L1ValidatorWeightMessage` for an active validator. Once a validator exit has been initiated (via a call to `initializeEndValidation`), the `PoSValidatorManager` must assume that the validator has been deactivated on the P-Chain, and will therefore not sign any further weight updates. Therefore, it is invalid to _initiate_ adding or removing a delegator when the validator is in this state, though it _may be_ valid to _complete_ an already initiated delegator action, depending on the order of delivery to the P-Chain. If the delegator weight change was submitted (and a Warp signature on the acknowledgement retrieved) before the validator was removed, then the delegator action may be completed. Otherwise, the acknowledgement of the validation end must first be delivered before completing the delegator action. +> The P-Chain is only willing to sign an `L1ValidatorWeightMessage` for an active validator. Once a validator exit has been initiated (via a call to `initiateValidatorRemoval`), the `PoSValidatorManager` must assume that the validator has been deactivated on the P-Chain, and will therefore not sign any further weight updates. Therefore, it is invalid to _initiate_ adding or removing a delegator when the validator is in this state, though it _may be_ valid to _complete_ an already initiated delegator action, depending on the order of delivery to the P-Chain. If the delegator weight change was submitted (and a Warp signature on the acknowledgement retrieved) before the validator was removed, then the delegator action may be completed. Otherwise, the acknowledgement of the validation end must first be delivered before completing the delegator action. ### (PoS only) Remove a Delegator -Delegators removal may be initiated by calling `initializeEndDelegation`, as long as churn restrictions are not violated. Similar to `initializeEndValidation`, an uptime proof may be provided to be used to determine delegator rewards eligibility. If no proof is provided, the latest known uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). The validator's weight is updated on the P-Chain by the same mechanism used to register a delegator. The `L1ValidatorWeightMessage` from the P-Chain is delivered to the `PoSValidatorManager` in the call to `completeEndDelegation`. +Delegators removal may be initiated by calling `initiateEndDelegation`, as long as churn restrictions are not violated. Similar to `initiateValidatorRemoval`, an uptime proof may be provided to be used to determine delegator rewards eligibility. If no proof is provided, the latest known uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). The validator's weight is updated on the P-Chain by the same mechanism used to register a delegator. The `L1ValidatorWeightMessage` from the P-Chain is delivered to the `PoSValidatorManager` in the call to `completeEndDelegation`. Either the delegator owner or the validator owner may initiate removing a delegator. This is to prevent the validator from being unable to remove itself due to churn limitations if it is has too high a proportion of the Subnet's total weight due to delegator additions. The validator owner may only remove Delegators after the minimum stake duration has elapsed. ### (PoS only) Submit an Uptime Proof -The [rewards calculator](./interfaces/IRewardCalculator.sol) is a function of uptime seconds since the validator's start time. In addition to doing so in the calls to `initializeEndValidation` and `initializeEndDelegation` as described above, uptime proofs may also be supplied by calling `submitUptimeProof`. Unlike `initializeEndValidation` and `initializeEndDelegation`, `submitUptimeProof` may be called by anyone, decreasing the likelihood of a validation or delegation not being able to claim rewards that it deserved based on its actual uptime. +The [rewards calculator](./interfaces/IRewardCalculator.sol) is a function of uptime seconds since the validator's start time. In addition to doing so in the calls to `initiateValidatorRemoval` and `initiateEndDelegation` as described above, uptime proofs may also be supplied by calling `submitUptimeProof`. Unlike `initiateValidatorRemoval` and `initiateEndDelegation`, `submitUptimeProof` may be called by anyone, decreasing the likelihood of a validation or delegation not being able to claim rewards that it deserved based on its actual uptime. ### (PoS only) Collect Staking Rewards diff --git a/contracts/validator-manager/StateTransition.md b/contracts/validator-manager/StateTransition.md index cf62adaa7..719ad9f1a 100644 --- a/contracts/validator-manager/StateTransition.md +++ b/contracts/validator-manager/StateTransition.md @@ -21,7 +21,7 @@ stateDiagram-v2 V.Active,D.Active --> V.PendingRemoved,D.Active: initEndVdr % When the Validator is in PendingRemoved or Completed, in general Delegator actions - % may be completed, but not initialized. + % may be completed, but not initiated. V.PendingRemoved,D.PendingAdded --> V.Completed,D.PendingAdded : completeEndVdr V.PendingRemoved,D.PendingRemoved --> V.Completed,D.PendingRemoved : completeEndVdr V.PendingRemoved,D.PendingRemoved --> V.PendingRemoved : completeEndDel diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 3d5a51812..3d9e61328 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -515,11 +515,11 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, ACP99Ma * @notice Completes the process of ending a validation period by receiving an acknowledgement from the P-Chain * that the validation ID is not active and will never be active in the future. * Note: that this function can be used for successful validation periods that have been explicitly - * ended by calling {initializeEndValidation} or for validation periods that never began on the P-Chain due to the + * ended by calling {_initiateValidatorRemoval} or for validation periods that never began on the P-Chain due to the * {registrationExpiry} being reached. * @return (Validation ID, Validator instance) representing the completed validation period. */ - function _completeEndValidation(uint32 messageIndex) + function _completeValidatorRemoval(uint32 messageIndex) internal returns (bytes32, Validator memory) { @@ -534,7 +534,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, ACP99Ma Validator memory validator = $._validationPeriods[validationID]; - // The validation status is PendingRemoved if validator removal was initiated with a call to {initiateEndValidation}. + // The validation status is PendingRemoved if validator removal was initiated with a call to {initiateValidatorRemoval}. // The validation status is PendingAdded if the validator was never registered on the P-Chain. // The initial validator set must have been set already to have pending validation messages. if ( diff --git a/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol b/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol index cf6d7bb95..b3b1a4095 100644 --- a/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol +++ b/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol @@ -19,7 +19,7 @@ interface IERC20TokenStakingManager is IPoSValidatorManager { * @param minStakeDuration The minimum amount of time this validator must be staked for in seconds. * @param stakeAmount The amount of tokens to stake. */ - function initializeValidatorRegistration( + function initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, @@ -31,7 +31,7 @@ interface IERC20TokenStakingManager is IPoSValidatorManager { * @param validationID The ID of the validator to stake to. * @param stakeAmount The amount of tokens to stake. */ - function initializeDelegatorRegistration( + function initiateDelegatorRegistration( bytes32 validationID, uint256 stakeAmount ) external returns (bytes32); diff --git a/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol b/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol index 205ff85ec..2f6f6d380 100644 --- a/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol +++ b/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol @@ -18,7 +18,7 @@ interface INativeTokenStakingManager is IPoSValidatorManager { * @param delegationFeeBips The fee that delegators must pay to delegate to this validator. * @param minStakeDuration The minimum amount of time this validator must be staked for in seconds. */ - function initializeValidatorRegistration( + function initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration @@ -28,7 +28,7 @@ interface INativeTokenStakingManager is IPoSValidatorManager { * @notice Begins the delegator registration process. Locks the provided native asset in the contract as the stake. * @param validationID The ID of the validator to stake to. */ - function initializeDelegatorRegistration(bytes32 validationID) + function initiateDelegatorRegistration(bytes32 validationID) external payable returns (bytes32); diff --git a/contracts/validator-manager/interfaces/IPoAValidatorManager.sol b/contracts/validator-manager/interfaces/IPoAValidatorManager.sol index 163d77531..818edf346 100644 --- a/contracts/validator-manager/interfaces/IPoAValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoAValidatorManager.sol @@ -16,7 +16,7 @@ interface IPoAValidatorManager { * @param registrationInput The inputs for a validator registration. * @param weight The weight of the validator being registered. */ - function initializeValidatorRegistration( + function initiateValidatorRegistration( ValidatorRegistrationInput calldata registrationInput, uint64 weight ) external returns (bytes32 validationID); @@ -26,5 +26,5 @@ interface IPoAValidatorManager { * started by a successful call to {completeValidatorRegistration} with the given validationID. * @param validationID The ID of the validation period being ended. */ - function initializeEndValidation(bytes32 validationID) external; + function initiateValidatorRemoval(bytes32 validationID) external; } diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index beaea61f0..a70de5cb8 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -145,17 +145,17 @@ interface IPoSValidatorManager { * the latest known uptime will be used. * @param messageIndex The index of the ICM message to be received providing the uptime proof. */ - function initializeEndValidation( + function initiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-initializeEndValidation} for details of the first three parameters + * @notice See {IPoSValidatorManager-initiateValidatorRemoval} for details of the first three parameters * @param recipientAddress The address to receive the rewards. If the 0-address is provided, the rewards will be sent to the validator. */ - function initializeEndValidation( + function initiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, @@ -173,17 +173,17 @@ interface IPoSValidatorManager { * the latest known uptime will be used. * @param messageIndex The index of the ICM message to be received providing the uptime proof. */ - function forceInitializeEndValidation( + function forceinitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-forceInitializeEndValidation} for details of the first three parameters + * @notice See {IPoSValidatorManager-forceinitiateValidatorRemoval} for details of the first three parameters * @param recipientAddress Address to receive the rewards. */ - function forceInitializeEndValidation( + function forceinitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, @@ -193,7 +193,7 @@ interface IPoSValidatorManager { /** * @notice Completes the delegator registration process by submitting an acknowledgement of the registration of a * validationID from the P-Chain. After this function is called, the validator's weight is updated in the contract state. - * Any P-Chain acknowledgement with a nonce greater than or equal to the nonce used to initialize registration of the + * Any P-Chain acknowledgement with a nonce greater than or equal to the nonce used to initiate registration of the * delegator is valid, as long as that nonce has been sent by the contract. For the purposes of computing delegation rewards, * the delegation is considered active after this function is completed. * Note: Only the specified delegation will be marked as registered, even if the validator weight update @@ -218,17 +218,17 @@ interface IPoSValidatorManager { * @param messageIndex If {includeUptimeProof} is true, the index of the ICM message to be received providing the * uptime proof. */ - function initializeEndDelegation( + function initiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-initializeEndDelegation} for details of the first three parameters + * @notice See {IPoSValidatorManager-initiateEndDelegation} for details of the first three parameters * @param recipientAddress The address to receive the rewards. If the 0-address is provided, the rewards will be sent to the delegator. */ - function initializeEndDelegation( + function initiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, @@ -249,17 +249,17 @@ interface IPoSValidatorManager { * @param messageIndex If {includeUptimeProof} is true, the index of the ICM message to be received providing the * uptime proof. */ - function forceInitializeEndDelegation( + function forceInitiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-forceInitializeEndDelegation} for details of the first three parameters + * @notice See {IPoSValidatorManager-forceInitiateEndDelegation} for details of the first three parameters * @param recipientAddress The address to receive the rewards. */ - function forceInitializeEndDelegation( + function forceInitiateEndDelegation( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, @@ -276,7 +276,7 @@ interface IPoSValidatorManager { /** * @notice Completes the process of ending a delegation by receiving an acknowledgement from the P-Chain. * After this function is called, the validator's weight is updated in the contract state. - * Any P-Chain acknowledgement with a nonce greater than or equal to the nonce used to initialize the end of the + * Any P-Chain acknowledgement with a nonce greater than or equal to the nonce used to initiate the end of the * delegator's delegation is valid, as long as that nonce has been sent by the contract. This is because the validator * weight change pertaining to the delegation ending is included in any subsequent validator weight update messages. * Note: Only the specified delegation will be marked as completed, even if the validator weight update diff --git a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol index 7cdd34912..12977c56e 100644 --- a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol @@ -154,7 +154,7 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { DEFAULT_MINIMUM_STAKE_DURATION - 1 ) ); - app.initializeValidatorRegistration( + app.initiateValidatorRegistration( input, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION - 1, stakeAmount ); } @@ -166,22 +166,22 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { ); } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) internal virtual override returns (bytes32) { - return app.initializeValidatorRegistration( + return app.initiateValidatorRegistration( registrationInput, delegationFeeBips, minStakeDuration, stakeAmount ); } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory input, uint64 weight ) internal virtual override returns (bytes32) { - return app.initializeValidatorRegistration( + return app.initiateValidatorRegistration( input, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION, @@ -189,14 +189,14 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { ); } - function _initializeDelegatorRegistration( + function _initiateDelegatorRegistration( bytes32 validationID, address delegatorAddress, uint64 weight ) internal virtual override returns (bytes32) { uint256 value = _weightToValue(weight); vm.startPrank(delegatorAddress); - bytes32 delegationID = app.initializeDelegatorRegistration(validationID, value); + bytes32 delegationID = app.initiateDelegatorRegistration(validationID, value); vm.stopPrank(); return delegationID; } diff --git a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol index f3082b232..69ba0db9c 100644 --- a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol @@ -127,27 +127,27 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { } // Helpers - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) internal virtual override returns (bytes32) { - return app.initializeValidatorRegistration{value: stakeAmount}( + return app.initiateValidatorRegistration{value: stakeAmount}( registrationInput, delegationFeeBips, minStakeDuration ); } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory input, uint64 weight ) internal virtual override returns (bytes32) { - return app.initializeValidatorRegistration{value: _weightToValue(weight)}( + return app.initiateValidatorRegistration{value: _weightToValue(weight)}( input, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION ); } - function _initializeDelegatorRegistration( + function _initiateDelegatorRegistration( bytes32 validationID, address delegatorAddress, uint64 weight @@ -155,7 +155,7 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { uint256 value = _weightToValue(weight); vm.prank(delegatorAddress); vm.deal(delegatorAddress, value); - return app.initializeDelegatorRegistration{value: value}(validationID); + return app.initiateDelegatorRegistration{value: value}(validationID); } // solhint-disable no-empty-blocks diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index 514dad7f7..e26cd1e41 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -49,7 +49,7 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { OwnableUpgradeable.OwnableUnauthorizedAccount.selector, vm.addr(1) ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: DEFAULT_NODE_ID, blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, @@ -71,7 +71,7 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, weight) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: nodeID, blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, @@ -83,27 +83,27 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { ); } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory input, uint64 weight ) internal virtual override returns (bytes32) { - return app.initializeValidatorRegistration(input, weight); + return app.initiateValidatorRegistration(input, weight); } - function _initializeEndValidation( + function _initiateValidatorRemoval( bytes32 validationID, bool, address ) internal virtual override { - return app.initializeEndValidation(validationID); + return app.initiateValidatorRemoval(validationID); } - function _forceInitializeEndValidation( + function _forceinitiateValidatorRemoval( bytes32 validationID, bool, address ) internal virtual override { - return app.initializeEndValidation(validationID); + return app.initiateValidatorRemoval(validationID); } function _setUp() internal override returns (ACP99Manager) { diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index 97dcf0733..f445d93be 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -80,7 +80,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { DEFAULT_MINIMUM_DELEGATION_FEE_BIPS - 1 ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( defaultRegistrationInput, DEFAULT_MINIMUM_DELEGATION_FEE_BIPS - 1, DEFAULT_MINIMUM_STAKE_DURATION, @@ -96,7 +96,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( defaultRegistrationInput, delegationFeeBips, DEFAULT_MINIMUM_STAKE_DURATION, @@ -111,7 +111,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { DEFAULT_MINIMUM_STAKE_DURATION - 1 ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( defaultRegistrationInput, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION - 1, @@ -125,7 +125,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.InvalidStakeAmount.selector, DEFAULT_MINIMUM_STAKE_AMOUNT - 1 ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( defaultRegistrationInput, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION, @@ -139,7 +139,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.InvalidStakeAmount.selector, DEFAULT_MAXIMUM_STAKE_AMOUNT + 1 ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( defaultRegistrationInput, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION, @@ -155,7 +155,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.MinStakeDurationNotPassed.selector, block.timestamp ) ); - posValidatorManager.initializeEndValidation(validationID, false, 0); + posValidatorManager.initiateValidatorRemoval(validationID, false, 0); } function testInvalidUptimeWarpMessage() public { @@ -164,7 +164,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetUptimeWarpMessage(new bytes(0), false); vm.warp(DEFAULT_COMPLETION_TIMESTAMP); vm.expectRevert(ValidatorManager.InvalidWarpMessage.selector); - posValidatorManager.initializeEndValidation(validationID, true, 0); + posValidatorManager.initiateValidatorRemoval(validationID, true, 0); } function testInvalidUptimeSenderAddress() public { @@ -192,7 +192,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorManager.InvalidWarpOriginSenderAddress.selector, address(this) ) ); - posValidatorManager.initializeEndValidation(validationID, true, 0); + posValidatorManager.initiateValidatorRemoval(validationID, true, 0); } function testInvalidUptimeValidationID() public { @@ -218,7 +218,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.InvalidValidationID.selector, validationID) ); - posValidatorManager.initializeEndValidation(validationID, true, 0); + posValidatorManager.initiateValidatorRemoval(validationID, true, 0); } function testInitializeDelegatorRegistration() public { @@ -337,14 +337,14 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.expectRevert( abi.encodeWithSelector(PoSValidatorManager.UnauthorizedOwner.selector, address(1)) ); - posValidatorManager.initializeEndValidation(validationID, false, 0); + posValidatorManager.initiateValidatorRemoval(validationID, false, 0); } function testInitializeEndDelegation() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -362,7 +362,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: address(this), delegationID: delegationID, @@ -386,7 +386,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.MinStakeDurationNotPassed.selector, invalidEndTime ) ); - _initializeEndDelegation({ + _initiateEndDelegation({ sender: address(this), delegationID: delegationID, endDelegationTimestamp: invalidEndTime, @@ -407,7 +407,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.MinStakeDurationNotPassed.selector, invalidEndTime ) ); - _initializeEndDelegation({ + _initiateEndDelegation({ sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, endDelegationTimestamp: invalidEndTime, @@ -452,7 +452,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); // Initialize end delegation will also call _completeEndDelegation because the validator is copmleted. - _initializeEndDelegation({ + _initiateEndDelegation({ sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, endDelegationTimestamp: invalidEndTime, @@ -473,14 +473,14 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); vm.warp(DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP); vm.prank(DEFAULT_DELEGATOR_ADDRESS); - posValidatorManager.initializeEndDelegation(delegationID, false, 0); + posValidatorManager.initiateEndDelegation(delegationID, false, 0); } - function testForceInitializeEndDelegation() public { + function testforceInitiateEndDelegation() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -494,11 +494,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testForceInitializeEndDelegationInsufficientUptime() public { + function testforceInitiateEndDelegationInsufficientUptime() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -516,7 +516,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -541,7 +541,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -600,7 +600,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _endDefaultValidatorWithChecks(validationID, 2); // Validator is Completed, so this will also complete the delegation. - _initializeEndDelegation({ + _initiateEndDelegation({ sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, @@ -628,7 +628,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID = _registerDefaultDelegator(validationID); address rewardRecipient = address(42); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -673,7 +673,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRewardRecipient = address(0); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -703,7 +703,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address badActor = address(43); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -730,7 +730,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID = _registerDefaultDelegator(validationID); address rewardRecipient = address(42); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -779,7 +779,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRewardRecipient = address(43); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -830,7 +830,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -846,7 +846,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorManager.InvalidValidatorStatus.selector, ValidatorStatus.PendingRemoved ) ); - _initializeDelegatorRegistration( + _initiateDelegatorRegistration( validationID, DEFAULT_DELEGATOR_ADDRESS, DEFAULT_DELEGATOR_WEIGHT ); } @@ -869,7 +869,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -887,7 +887,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); } - // Delegator cannot initialize end delegation when validator is pending removed. + // Delegator cannot initiate end delegation when validator is pending removed. function testInitializeEndDelegationValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); @@ -896,7 +896,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -912,7 +912,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorManager.InvalidValidatorStatus.selector, ValidatorStatus.PendingRemoved ) ); - _initializeDelegatorRegistration( + _initiateDelegatorRegistration( validationID, DEFAULT_DELEGATOR_ADDRESS, DEFAULT_DELEGATOR_WEIGHT ); } @@ -922,7 +922,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -941,7 +941,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, validationEndTime - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: validationEndTime, setWeightMessage: setWeightMessage, @@ -990,14 +990,14 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ValidatorManager.InvalidValidatorStatus.selector, ValidatorStatus.Completed ) ); - _initializeDelegatorRegistration( + _initiateDelegatorRegistration( validationID, DEFAULT_DELEGATOR_ADDRESS, DEFAULT_DELEGATOR_WEIGHT ); } function testCompleteDelegatorRegistrationValidatorCompleted() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _initializeDefaultDelegatorRegistration(validationID); + bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); _endDefaultValidatorWithChecks(validationID, 2); @@ -1052,7 +1052,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { // warp to right after validator ended vm.warp(delegationEndTime); vm.prank(DEFAULT_DELEGATOR_ADDRESS); - posValidatorManager.initializeEndDelegation(delegationID, false, 0); + posValidatorManager.initiateEndDelegation(delegationID, false, 0); assertEq( _getStakeAssetBalance(DEFAULT_DELEGATOR_ADDRESS), @@ -1064,7 +1064,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -1127,7 +1127,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); // Initialize end delegation for both delegators - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: delegator1, delegationID: delegationID1, @@ -1139,7 +1139,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { force: false, rewardRecipient: address(0) }); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: delegator2, delegationID: delegationID2, @@ -1191,7 +1191,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); // Initialize end delegation for both delegators - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: delegator1, delegationID: delegationID1, @@ -1203,7 +1203,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { force: false, rewardRecipient: address(0) }); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: delegator2, delegationID: delegationID2, @@ -1246,7 +1246,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1283,7 +1283,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); address rewardRecipient = address(42); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1322,7 +1322,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRecipient = address(43); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1361,7 +1361,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRecipient = address(this); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1402,7 +1402,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRecipient = address(0); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1431,7 +1431,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address badActor = address(43); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1457,7 +1457,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1488,7 +1488,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { emit UptimeUpdated(validationID, uptime1); posValidatorManager.submitUptimeProof(validationID, 0); - // Submit a second uptime proof via initializeEndValidation. This one is not sufficient for rewards + // Submit a second uptime proof via initiateValidatorRemoval. This one is not sufficient for rewards // Submit an uptime proof via submitUptime uint64 uptimePercentage2 = 79; uint64 uptime2 = ( @@ -1503,7 +1503,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _initializeEndValidation(validationID, true, address(0)); + _initiateValidatorRemoval(validationID, true, address(0)); } function testInitializeEndValidationWithoutNewUptime() public { @@ -1532,7 +1532,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _initializeEndValidation(validationID, false, address(0)); + _initiateValidatorRemoval(validationID, false, address(0)); } function testInitializeEndValidationInsufficientUptime() public { @@ -1557,7 +1557,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - _initializeEndValidation(validationID, true, address(0)); + _initiateValidatorRemoval(validationID, true, address(0)); } function testSubmitUptimeProofPoaValidator() public { @@ -1580,7 +1580,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1612,7 +1612,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _initializeEndValidation(validationID, false, address(0)); + _initiateValidatorRemoval(validationID, false, address(0)); uint256 balanceBefore = _getStakeAssetBalance(address(this)); @@ -1636,7 +1636,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - _initializeDelegatorRegistration( + _initiateDelegatorRegistration( defaultInitialValidationID, DEFAULT_DELEGATOR_ADDRESS, DEFAULT_DELEGATOR_WEIGHT ); } @@ -1654,7 +1654,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - _initializeDelegatorRegistration(validationID, DEFAULT_DELEGATOR_ADDRESS, delegatorWeight); + _initiateDelegatorRegistration(validationID, DEFAULT_DELEGATOR_ADDRESS, delegatorWeight); } function testCompleteDelegatorRegistrationAlreadyRegistered() public { @@ -1672,7 +1672,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function testCompleteDelegatorRegistrationWrongValidationID() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _initializeDefaultDelegatorRegistration(validationID); + bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); bytes memory setValidatorWeightPayload = ValidatorMessages.packL1ValidatorWeightMessage( delegationID, 1, DEFAULT_DELEGATOR_WEIGHT + DEFAULT_WEIGHT @@ -1690,7 +1690,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -1714,7 +1714,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function testInitializeEndDelegationNotRegistered() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _initializeDefaultDelegatorRegistration(validationID); + bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); vm.expectRevert( abi.encodeWithSelector( @@ -1722,7 +1722,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - posValidatorManager.initializeEndDelegation(delegationID, true, 0); + posValidatorManager.initiateEndDelegation(delegationID, true, 0); } function testInitializeEndDelegationWrongSender() public { @@ -1734,14 +1734,14 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); vm.prank(address(123)); - posValidatorManager.initializeEndDelegation(delegationID, true, 0); + posValidatorManager.initiateEndDelegation(delegationID, true, 0); } function testCompleteDelegatorRegistrationForDelegatorRegisteredWhileValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _initializeDefaultDelegatorRegistration(validationID); + bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 2, 0); @@ -1749,7 +1749,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1780,7 +1780,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.warp(DEFAULT_COMPLETION_TIMESTAMP + 1 + DEFAULT_MINIMUM_STAKE_DURATION); _expectStakeUnlock(DEFAULT_DELEGATOR_ADDRESS, _weightToValue(DEFAULT_DELEGATOR_WEIGHT)); - posValidatorManager.initializeEndDelegation(delegationID, true, 0); + posValidatorManager.initiateEndDelegation(delegationID, true, 0); } function testCompleteEndDelegationWhileActive() public { @@ -1798,7 +1798,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function testCompleteDelegatorRegistrationValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _initializeDefaultDelegatorRegistration(validationID); + bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 2, 0); @@ -1806,7 +1806,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1825,7 +1825,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - posValidatorManager.initializeEndDelegation(delegationID, false, 0); + posValidatorManager.initiateEndDelegation(delegationID, false, 0); } function testResendEndDelegationWhileActive() public { @@ -1841,14 +1841,14 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.resendUpdateDelegation(delegationID); } - function testForceInitializeEndValidation() public { + function testforceinitiateValidatorRemoval() public { bytes32 validationID = _registerDefaultValidator(); bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -1858,7 +1858,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testForceInitializeEndValidationInsufficientUptime() public { + function testforceinitiateValidatorRemovalInsufficientUptime() public { bytes32 validationID = _registerDefaultValidator(); uint64 uptimePercentage = 79; @@ -1879,7 +1879,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _forceInitializeEndValidation(validationID, true, address(0)); + _forceinitiateValidatorRemoval(validationID, true, address(0)); } function testValueToWeightTruncated() public { @@ -1925,34 +1925,34 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) internal virtual returns (bytes32); - function _initializeEndValidation( + function _initiateValidatorRemoval( bytes32 validationID, bool includeUptime, address recipientAddress ) internal virtual override { - posValidatorManager.initializeEndValidation( + posValidatorManager.initiateValidatorRemoval( validationID, includeUptime, 0, recipientAddress ); } - function _forceInitializeEndValidation( + function _forceinitiateValidatorRemoval( bytes32 validationID, bool includeUptime, address recipientAddress ) internal virtual override { - posValidatorManager.forceInitializeEndValidation( + posValidatorManager.forceinitiateValidatorRemoval( validationID, includeUptime, 0, recipientAddress ); } - function _initializeDelegatorRegistration( + function _initiateDelegatorRegistration( bytes32 validationID, address delegatorAddress, uint64 weight @@ -1993,7 +1993,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { setWeightMessageID: bytes32(0) }); - return _initializeDelegatorRegistration(validationID, delegatorAddress, weight); + return _initiateDelegatorRegistration(validationID, delegatorAddress, weight); } function _setUpCompleteDelegatorRegistration( @@ -2045,7 +2045,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function _initializeDefaultDelegatorRegistration(bytes32 validationID) + function _initiateDefaultDelegatorRegistration(bytes32 validationID) internal returns (bytes32) { @@ -2074,7 +2074,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { } function _completeDefaultDelegator(bytes32 validationID, bytes32 delegationID) internal { - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -2133,7 +2133,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { return delegationID; } - function _initializeEndDelegationValidatorActiveWithChecks( + function _initiateEndDelegationValidatorActiveWithChecks( bytes32 validationID, address sender, bytes32 delegationID, @@ -2162,7 +2162,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit DelegatorRemovalInitialized({delegationID: delegationID, validationID: validationID}); - _initializeEndDelegationValidatorActive({ + _initiateEndDelegationValidatorActive({ sender: sender, delegationID: delegationID, endDelegationTimestamp: endDelegationTimestamp, @@ -2174,7 +2174,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function _initializeEndDelegationValidatorActive( + function _initiateEndDelegationValidatorActive( address sender, bytes32 delegationID, uint64 endDelegationTimestamp, @@ -2189,7 +2189,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { if (includeUptime) { _mockGetUptimeWarpMessage(uptimePayload, true); } - _initializeEndDelegation({ + _initiateEndDelegation({ sender: sender, delegationID: delegationID, endDelegationTimestamp: endDelegationTimestamp, @@ -2199,7 +2199,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function _initializeEndDelegation( + function _initiateEndDelegation( address sender, bytes32 delegationID, uint64 endDelegationTimestamp, @@ -2210,11 +2210,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.warp(endDelegationTimestamp); vm.prank(sender); if (force) { - posValidatorManager.forceInitializeEndDelegation( + posValidatorManager.forceInitiateEndDelegation( delegationID, includeUptime, 0, rewardRecipient ); } else { - posValidatorManager.initializeEndDelegation( + posValidatorManager.initiateEndDelegation( delegationID, includeUptime, 0, rewardRecipient ); } @@ -2259,7 +2259,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( validationID, completionTimestamp - completeRegistrationTimestamp ); - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: completionTimestamp, setWeightMessage: setWeightMessage, @@ -2385,11 +2385,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.completeEndDelegation(delegationID, 0); } - function _initializeAndCompleteEndDelegationWithChecks( + function _initiateAndCompleteEndDelegationWithChecks( bytes32 validationID, bytes32 delegationID ) internal { - _initializeEndDelegationValidatorActiveWithChecks({ + _initiateEndDelegationValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 4f1ac7a2a..5b5a9ea30 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -136,7 +136,7 @@ abstract contract ValidatorManagerTest is Test { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.InvalidPChainOwnerThreshold.selector, 2, 1) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: DEFAULT_NODE_ID, blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, @@ -157,7 +157,7 @@ abstract contract ValidatorManagerTest is Test { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.InvalidPChainOwnerThreshold.selector, 0, 1) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: DEFAULT_NODE_ID, blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, @@ -180,7 +180,7 @@ abstract contract ValidatorManagerTest is Test { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.PChainOwnerAddressesNotSorted.selector) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: DEFAULT_NODE_ID, blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, @@ -228,7 +228,7 @@ abstract contract ValidatorManagerTest is Test { bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); bytes memory uptimeMessage; - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -243,7 +243,7 @@ abstract contract ValidatorManagerTest is Test { bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); bytes memory uptimeMessage; - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -263,7 +263,7 @@ abstract contract ValidatorManagerTest is Test { bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); bytes memory uptimeMessage; - _initializeEndValidation({ + _initiateValidatorRemoval({ validationID: validationID, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, setWeightMessage: setWeightMessage, @@ -327,7 +327,7 @@ abstract contract ValidatorManagerTest is Test { bytes32 validationID = sha256(abi.encodePacked(DEFAULT_SUBNET_ID, uint32(0))); vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, 4)); - _forceInitializeEndValidation(validationID, false, address(0)); + _forceinitiateValidatorRemoval(validationID, false, address(0)); } function testCumulativeChurnRegistration() public { @@ -354,7 +354,7 @@ abstract contract ValidatorManagerTest is Test { churnThreshold + _valueToWeight(DEFAULT_MINIMUM_STAKE_AMOUNT) ) ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: DEFAULT_NODE_ID, blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, @@ -401,7 +401,7 @@ abstract contract ValidatorManagerTest is Test { ) ); - _initializeEndValidation(validationID, false, address(0)); + _initiateValidatorRemoval(validationID, false, address(0)); } function testValidatorManagerStorageSlot() public view { @@ -455,7 +455,7 @@ abstract contract ValidatorManagerTest is Test { validationID, nodeID, bytes32(0), registrationExpiry, weight ); - _initializeValidatorRegistration( + _initiateValidatorRegistration( ValidatorRegistrationInput({ nodeID: nodeID, blsPublicKey: blsPublicKey, @@ -490,7 +490,7 @@ abstract contract ValidatorManagerTest is Test { validatorManager.completeValidatorRegistration(0); } - function _initializeEndValidation( + function _initiateValidatorRemoval( bytes32 validationID, uint64 completionTimestamp, bytes memory setWeightMessage, @@ -505,13 +505,13 @@ abstract contract ValidatorManagerTest is Test { vm.warp(completionTimestamp); if (force) { - _forceInitializeEndValidation(validationID, includeUptime, address(0)); + _forceinitiateValidatorRemoval(validationID, includeUptime, address(0)); } else { - _initializeEndValidation(validationID, includeUptime, address(0)); + _initiateValidatorRemoval(validationID, includeUptime, address(0)); } } - function _initializeEndValidation( + function _initiateValidatorRemoval( bytes32 validationID, uint64 completionTimestamp, bytes memory setWeightMessage, @@ -527,9 +527,9 @@ abstract contract ValidatorManagerTest is Test { vm.warp(completionTimestamp); if (force) { - _forceInitializeEndValidation(validationID, includeUptime, recipientAddress); + _forceinitiateValidatorRemoval(validationID, includeUptime, recipientAddress); } else { - _initializeEndValidation(validationID, includeUptime, recipientAddress); + _initiateValidatorRemoval(validationID, includeUptime, recipientAddress); } } @@ -612,18 +612,18 @@ abstract contract ValidatorManagerTest is Test { ); } - function _initializeValidatorRegistration( + function _initiateValidatorRegistration( ValidatorRegistrationInput memory input, uint64 weight ) internal virtual returns (bytes32); - function _initializeEndValidation( + function _initiateValidatorRemoval( bytes32 validationID, bool includeUptime, address rewardRecipient ) internal virtual; - function _forceInitializeEndValidation( + function _forceinitiateValidatorRemoval( bytes32 validationID, bool includeUptime, address rewardRecipient From 433cca22d252d43570ce733905b1ac0c694561ee Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 16:10:46 -0600 Subject: [PATCH 21/29] rename delegator methods to be consistent with ACP-99 --- .../validator-manager/PoSValidatorManager.sol | 69 +++--- contracts/validator-manager/README.md | 10 +- .../interfaces/IPoSValidatorManager.sol | 32 +-- .../tests/PoAValidatorManagerTests.t.sol | 2 +- .../tests/PoSValidatorManagerTests.t.sol | 199 +++++++++--------- .../tests/ValidatorManagerTests.t.sol | 8 +- 6 files changed, 160 insertions(+), 160 deletions(-) diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 31663b0f6..7c8b93057 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -252,9 +252,9 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-forceinitiateValidatorRemoval}. + * @notice See {IPoSValidatorManager-forceInitiateValidatorRemoval}. */ - function forceinitiateValidatorRemoval( + function forceInitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex @@ -264,9 +264,9 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-forceinitiateValidatorRemoval}. + * @notice See {IPoSValidatorManager-forceInitiateValidatorRemoval}. */ - function forceinitiateValidatorRemoval( + function forceInitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, @@ -575,7 +575,7 @@ abstract contract PoSValidatorManager is $._delegatorStakes[delegationID].startingNonce = nonce; $._delegatorStakes[delegationID].endingNonce = 0; - emit DelegatorAdded({ + emit InitiatedDelegatorRegistration({ delegationID: delegationID, validationID: validationID, delegatorAddress: delegatorAddress, @@ -607,7 +607,7 @@ abstract contract PoSValidatorManager is // In the case where the validator has completed its validation period, we can no // longer stake and should move our status directly to completed and return the stake. if (validator.status == ValidatorStatus.Completed) { - return _completeEndDelegation(delegationID); + return _completeDelegatorRemoval(delegationID); } // If we've already received a weight update with a nonce greater than the delegation's starting nonce, @@ -627,7 +627,7 @@ abstract contract PoSValidatorManager is $._delegatorStakes[delegationID].status = DelegatorStatus.Active; $._delegatorStakes[delegationID].startTime = uint64(block.timestamp); - emit DelegatorRegistered({ + emit CompletedDelegatorRegistration({ delegationID: delegationID, validationID: validationID, startTime: uint64(block.timestamp) @@ -635,66 +635,70 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-initiateEndDelegation}. + * @notice See {IPoSValidatorManager-initiateDelegatorRemoval}. */ - function initiateEndDelegation( + function initiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external { - _initiateEndDelegationWithCheck(delegationID, includeUptimeProof, messageIndex, address(0)); + _initiateDelegatorRemovalWithCheck( + delegationID, includeUptimeProof, messageIndex, address(0) + ); } /** - * @notice See {IPoSValidatorManager-initiateEndDelegation}. + * @notice See {IPoSValidatorManager-initiateDelegatorRemoval}. */ - function initiateEndDelegation( + function initiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) external { - _initiateEndDelegationWithCheck( + _initiateDelegatorRemovalWithCheck( delegationID, includeUptimeProof, messageIndex, rewardRecipient ); } - function _initiateEndDelegationWithCheck( + function _initiateDelegatorRemovalWithCheck( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) internal { if ( - !_initiateEndDelegation(delegationID, includeUptimeProof, messageIndex, rewardRecipient) + !_initiateDelegatorRemoval( + delegationID, includeUptimeProof, messageIndex, rewardRecipient + ) ) { revert DelegatorIneligibleForRewards(delegationID); } } /** - * @notice See {IPoSValidatorManager-forceInitiateEndDelegation}. + * @notice See {IPoSValidatorManager-forceInitiateDelegatorRemoval}. */ - function forceInitiateEndDelegation( + function forceInitiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external { // Ignore the return value here to force end delegation, regardless of possible missed rewards - _initiateEndDelegation(delegationID, includeUptimeProof, messageIndex, address(0)); + _initiateDelegatorRemoval(delegationID, includeUptimeProof, messageIndex, address(0)); } /** - * @notice See {IPoSValidatorManager-forceInitiateEndDelegation}. + * @notice See {IPoSValidatorManager-forceInitiateDelegatorRemoval}. */ - function forceInitiateEndDelegation( + function forceInitiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient ) external { // Ignore the return value here to force end delegation, regardless of possible missed rewards - _initiateEndDelegation(delegationID, includeUptimeProof, messageIndex, rewardRecipient); + _initiateDelegatorRemoval(delegationID, includeUptimeProof, messageIndex, rewardRecipient); } /** @@ -702,7 +706,7 @@ abstract contract PoSValidatorManager is * Returns false if it is possible for the delegator to claim rewards, but it is not eligible. * Returns true otherwise. */ - function _initiateEndDelegation( + function _initiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, @@ -756,14 +760,11 @@ abstract contract PoSValidatorManager is uint256 reward = _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); - emit DelegatorRemovalInitialized({ - delegationID: delegationID, - validationID: validationID - }); + emit InitiatedDelegatorRemoval({delegationID: delegationID, validationID: validationID}); return (reward > 0); } else if (validator.status == ValidatorStatus.Completed) { _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); - _completeEndDelegation(delegationID); + _completeDelegatorRemoval(delegationID); // If the validator has completed, then no further uptimes may be submitted, so we always // end the delegation. return true; @@ -820,11 +821,11 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-resendUpdateDelegation}. + * @notice See {IPoSValidatorManager-resendUpdateDelegator}. * @dev Resending the latest validator weight with the latest nonce is safe because all weight changes are * cumulative, so the latest weight change will always include the weight change for any added delegators. */ - function resendUpdateDelegation(bytes32 delegationID) external { + function resendUpdateDelegator(bytes32 delegationID) external { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); Delegator memory delegator = $._delegatorStakes[delegationID]; if ( @@ -849,9 +850,9 @@ abstract contract PoSValidatorManager is } /** - * @notice See {IPoSValidatorManager-completeEndDelegation}. + * @notice See {IPoSValidatorManager-completeDelegatorRemoval}. */ - function completeEndDelegation( + function completeDelegatorRemoval( bytes32 delegationID, uint32 messageIndex ) external nonReentrant { @@ -885,10 +886,10 @@ abstract contract PoSValidatorManager is } } - _completeEndDelegation(delegationID); + _completeDelegatorRemoval(delegationID); } - function _completeEndDelegation(bytes32 delegationID) internal { + function _completeDelegatorRemoval(bytes32 delegationID) internal { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); Delegator memory delegator = $._delegatorStakes[delegationID]; @@ -916,7 +917,7 @@ abstract contract PoSValidatorManager is // Unlock the delegator's stake. _unlock(delegator.owner, weightToValue(delegator.weight)); - emit DelegationEnded(delegationID, validationID, delegationRewards, validatorFees); + emit CompletedDelegatorRemoval(delegationID, validationID, delegationRewards, validatorFees); } /** diff --git a/contracts/validator-manager/README.md b/contracts/validator-manager/README.md index 68c94a37b..98460dbae 100644 --- a/contracts/validator-manager/README.md +++ b/contracts/validator-manager/README.md @@ -22,8 +22,8 @@ note for ValidatorManager "Implements most of ACP99Manager" class PoSValidatorManager { +initiateValidatorRemoval() +completeDelegatorRegistration() - +initiateEndDelegation() - +completeEndDelegation() + +initiateDelegatorRemoval() + +completeDelegatorRemoval() } <> PoSValidatorManager class ERC20TokenStakingManager { @@ -145,13 +145,13 @@ Disabled L1 validators can re-activate at any time by increasing their balance w ### (PoS only) Remove a Delegator -Delegators removal may be initiated by calling `initiateEndDelegation`, as long as churn restrictions are not violated. Similar to `initiateValidatorRemoval`, an uptime proof may be provided to be used to determine delegator rewards eligibility. If no proof is provided, the latest known uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). The validator's weight is updated on the P-Chain by the same mechanism used to register a delegator. The `L1ValidatorWeightMessage` from the P-Chain is delivered to the `PoSValidatorManager` in the call to `completeEndDelegation`. +Delegators removal may be initiated by calling `initiateDelegatorRemoval`, as long as churn restrictions are not violated. Similar to `initiateValidatorRemoval`, an uptime proof may be provided to be used to determine delegator rewards eligibility. If no proof is provided, the latest known uptime will be used (see [(PoS only) Submit and Uptime Proof](#pos-only-submit-an-uptime-proof)). The validator's weight is updated on the P-Chain by the same mechanism used to register a delegator. The `L1ValidatorWeightMessage` from the P-Chain is delivered to the `PoSValidatorManager` in the call to `completeDelegatorRemoval`. Either the delegator owner or the validator owner may initiate removing a delegator. This is to prevent the validator from being unable to remove itself due to churn limitations if it is has too high a proportion of the Subnet's total weight due to delegator additions. The validator owner may only remove Delegators after the minimum stake duration has elapsed. ### (PoS only) Submit an Uptime Proof -The [rewards calculator](./interfaces/IRewardCalculator.sol) is a function of uptime seconds since the validator's start time. In addition to doing so in the calls to `initiateValidatorRemoval` and `initiateEndDelegation` as described above, uptime proofs may also be supplied by calling `submitUptimeProof`. Unlike `initiateValidatorRemoval` and `initiateEndDelegation`, `submitUptimeProof` may be called by anyone, decreasing the likelihood of a validation or delegation not being able to claim rewards that it deserved based on its actual uptime. +The [rewards calculator](./interfaces/IRewardCalculator.sol) is a function of uptime seconds since the validator's start time. In addition to doing so in the calls to `initiateValidatorRemoval` and `initiateDelegatorRemoval` as described above, uptime proofs may also be supplied by calling `submitUptimeProof`. Unlike `initiateValidatorRemoval` and `initiateDelegatorRemoval`, `submitUptimeProof` may be called by anyone, decreasing the likelihood of a validation or delegation not being able to claim rewards that it deserved based on its actual uptime. ### (PoS only) Collect Staking Rewards @@ -161,7 +161,7 @@ Validation rewards are distributed in the call to `completeEndValidation`. #### Delegation Rewards -Delegation rewards are distributed in the call to `completeEndDelegation`. +Delegation rewards are distributed in the call to `completeDelegatorRemoval`. #### Delegation Fees diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index a70de5cb8..2fb59ad2a 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -81,7 +81,7 @@ interface IPoSValidatorManager { * @param delegatorWeight The weight of the delegator * @param setWeightMessageID The ID of the ICM message that updates the validator's weight on the P-Chain */ - event DelegatorAdded( + event InitiatedDelegatorRegistration( bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, @@ -97,7 +97,7 @@ interface IPoSValidatorManager { * @param validationID The ID of the validation period * @param startTime The time at which the registration was completed */ - event DelegatorRegistered( + event CompletedDelegatorRegistration( bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime ); @@ -106,7 +106,7 @@ interface IPoSValidatorManager { * @param delegationID The ID of the delegation * @param validationID The ID of the validation period the delegator was staked to */ - event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID); + event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID); /** * @notice Event emitted when delegator removal is completed @@ -115,7 +115,7 @@ interface IPoSValidatorManager { * @param rewards The rewards given to the delegator * @param fees The portion of the delegator's rewards paid to the validator */ - event DelegationEnded( + event CompletedDelegatorRemoval( bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees ); @@ -173,17 +173,17 @@ interface IPoSValidatorManager { * the latest known uptime will be used. * @param messageIndex The index of the ICM message to be received providing the uptime proof. */ - function forceinitiateValidatorRemoval( + function forceInitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-forceinitiateValidatorRemoval} for details of the first three parameters + * @notice See {IPoSValidatorManager-forceInitiateValidatorRemoval} for details of the first three parameters * @param recipientAddress Address to receive the rewards. */ - function forceinitiateValidatorRemoval( + function forceInitiateValidatorRemoval( bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, @@ -218,17 +218,17 @@ interface IPoSValidatorManager { * @param messageIndex If {includeUptimeProof} is true, the index of the ICM message to be received providing the * uptime proof. */ - function initiateEndDelegation( + function initiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-initiateEndDelegation} for details of the first three parameters + * @notice See {IPoSValidatorManager-initiateDelegatorRemoval} for details of the first three parameters * @param recipientAddress The address to receive the rewards. If the 0-address is provided, the rewards will be sent to the delegator. */ - function initiateEndDelegation( + function initiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, @@ -249,17 +249,17 @@ interface IPoSValidatorManager { * @param messageIndex If {includeUptimeProof} is true, the index of the ICM message to be received providing the * uptime proof. */ - function forceInitiateEndDelegation( + function forceInitiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex ) external; /** - * @notice See {IPoSValidatorManager-forceInitiateEndDelegation} for details of the first three parameters + * @notice See {IPoSValidatorManager-forceInitiateDelegatorRemoval} for details of the first three parameters * @param recipientAddress The address to receive the rewards. */ - function forceInitiateEndDelegation( + function forceInitiateDelegatorRemoval( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, @@ -271,7 +271,7 @@ interface IPoSValidatorManager { * Only necessary if the original message can't be delivered due to validator churn. * @param delegationID The ID of the delegation. */ - function resendUpdateDelegation(bytes32 delegationID) external; + function resendUpdateDelegator(bytes32 delegationID) external; /** * @notice Completes the process of ending a delegation by receiving an acknowledgement from the P-Chain. @@ -284,7 +284,7 @@ interface IPoSValidatorManager { * @param delegationID The ID of the delegation being removed. * @param messageIndex The index of the ICM message to be received providing the acknowledgement. */ - function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) external; + function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) external; /** * @notice Withdraws the delegation fees from completed delegations to the owner of the validator. @@ -300,7 +300,7 @@ interface IPoSValidatorManager { function changeValidatorRewardRecipient(bytes32 validationID, address recipient) external; /** - * @notice Changes the address of the recipient of the delegator's rewards for a delegation period. This method can be called any time before {completeEndDelegation}. + * @notice Changes the address of the recipient of the delegator's rewards for a delegation period. This method can be called any time before {completeDelegatorRemoval}. * @param delegationID The ID of the validation period being ended. * @param recipient The address to receive the rewards. */ diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index e26cd1e41..742ae5d90 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -98,7 +98,7 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { return app.initiateValidatorRemoval(validationID); } - function _forceinitiateValidatorRemoval( + function _forceInitiateValidatorRemoval( bytes32 validationID, bool, address diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index f445d93be..e84f33da9 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -51,7 +51,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { disableOwner: DEFAULT_P_CHAIN_OWNER }); - event DelegatorAdded( + event InitiatedDelegatorRegistration( bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, @@ -61,13 +61,13 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 setWeightMessageID ); - event DelegatorRegistered( + event CompletedDelegatorRegistration( bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime ); - event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID); + event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID); - event DelegationEnded( + event CompletedDelegatorRemoval( bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees ); @@ -221,10 +221,10 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.initiateValidatorRemoval(validationID, true, 0); } - function testInitializeDelegatorRegistration() public { + function testInitiateDelegatorRegistration() public { bytes32 validationID = _registerDefaultValidator(); - _setUpInitializeDelegatorRegistration({ + _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: DEFAULT_DELEGATOR_ADDRESS, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -237,7 +237,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function testResendDelegatorRegistration() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _setUpInitializeDelegatorRegistration({ + bytes32 delegationID = _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: DEFAULT_DELEGATOR_ADDRESS, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -249,7 +249,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, 1, DEFAULT_WEIGHT + DEFAULT_DELEGATOR_WEIGHT ); _mockSendWarpMessage(setValidatorWeightPayload, bytes32(0)); - posValidatorManager.resendUpdateDelegation(delegationID); + posValidatorManager.resendUpdateDelegator(delegationID); } function testCompleteDelegatorRegistration() public { @@ -263,7 +263,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { // Initialize two delegations address delegator1 = DEFAULT_DELEGATOR_ADDRESS; - _setUpInitializeDelegatorRegistration({ + _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: delegator1, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -272,7 +272,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedNonce: 1 }); address delegator2 = address(0x5678567856785678567856785678567856785678); - bytes32 delegationID2 = _setUpInitializeDelegatorRegistration({ + bytes32 delegationID2 = _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: delegator2, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -300,7 +300,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { // Initialize two delegations address delegator1 = DEFAULT_DELEGATOR_ADDRESS; - bytes32 delegationID1 = _setUpInitializeDelegatorRegistration({ + bytes32 delegationID1 = _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: delegator1, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -309,7 +309,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedNonce: 1 }); address delegator2 = address(0x5678567856785678567856785678567856785678); - _setUpInitializeDelegatorRegistration({ + _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: delegator2, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -340,11 +340,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.initiateValidatorRemoval(validationID, false, 0); } - function testInitializeEndDelegation() public { + function testInitiateDelegatorRemoval() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -358,11 +358,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testInitializeEndDelegationByValidator() public { + function testInitiateDelegatorRemovalByValidator() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: address(this), delegationID: delegationID, @@ -376,7 +376,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testInitializeEndDelegationByValidatorMinStakeDurationNotPassed() public { + function testInitiateDelegatorRemovalByValidatorMinStakeDurationNotPassed() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); @@ -386,7 +386,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.MinStakeDurationNotPassed.selector, invalidEndTime ) ); - _initiateEndDelegation({ + _initiateDelegatorRemoval({ sender: address(this), delegationID: delegationID, endDelegationTimestamp: invalidEndTime, @@ -396,7 +396,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testInitializeEndDelegationMinStakeDurationNotPassed() public { + function testInitiateDelegatorRemovalMinStakeDurationNotPassed() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); @@ -407,7 +407,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.MinStakeDurationNotPassed.selector, invalidEndTime ) ); - _initiateEndDelegation({ + _initiateDelegatorRemoval({ sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, endDelegationTimestamp: invalidEndTime, @@ -451,8 +451,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - // Initialize end delegation will also call _completeEndDelegation because the validator is copmleted. - _initiateEndDelegation({ + // Initialize end delegation will also call _completeDelegatorRemoval because the validator is copmleted. + _initiateDelegatorRemoval({ sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, endDelegationTimestamp: invalidEndTime, @@ -462,7 +462,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testInitializeEndDelegationInsufficientUptime() public { + function testInitiateDelegatorRemovalInsufficientUptime() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); @@ -473,14 +473,14 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); vm.warp(DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP); vm.prank(DEFAULT_DELEGATOR_ADDRESS); - posValidatorManager.initiateEndDelegation(delegationID, false, 0); + posValidatorManager.initiateDelegatorRemoval(delegationID, false, 0); } - function testforceInitiateEndDelegation() public { + function testforceInitiateDelegatorRemoval() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -494,11 +494,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testforceInitiateEndDelegationInsufficientUptime() public { + function testforceInitiateDelegatorRemovalInsufficientUptime() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -516,7 +516,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -531,7 +531,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory setValidatorWeightPayload = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 2, DEFAULT_WEIGHT); _mockSendWarpMessage(setValidatorWeightPayload, bytes32(0)); - posValidatorManager.resendUpdateDelegation(delegationID); + posValidatorManager.resendUpdateDelegator(delegationID); } function testResendEndValidation() public override { @@ -600,7 +600,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _endDefaultValidatorWithChecks(validationID, 2); // Validator is Completed, so this will also complete the delegation. - _initiateEndDelegation({ + _initiateDelegatorRemoval({ sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, @@ -628,7 +628,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID = _registerDefaultDelegator(validationID); address rewardRecipient = address(42); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -653,7 +653,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID, delegator: DEFAULT_DELEGATOR_ADDRESS, @@ -673,7 +673,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRewardRecipient = address(0); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -703,7 +703,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address badActor = address(43); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -730,7 +730,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID = _registerDefaultDelegator(validationID); address rewardRecipient = address(42); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -759,7 +759,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID, delegator: DEFAULT_DELEGATOR_ADDRESS, @@ -779,7 +779,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address rewardRecipient = address(42); address newRewardRecipient = address(43); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -807,7 +807,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID, delegator: DEFAULT_DELEGATOR_ADDRESS, @@ -822,7 +822,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { } // Delegator registration is not allowed when Validator is pending removed. - function testInitializeDelegatorRegistrationValidatorPendingRemoved() public { + function testInitiateDelegatorRegistrationValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); bytes memory setWeightMessage = @@ -855,7 +855,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function testCompleteRegisterDelegatorValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); - bytes32 delegationID = _setUpInitializeDelegatorRegistration({ + bytes32 delegationID = _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: DEFAULT_DELEGATOR_ADDRESS, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -888,7 +888,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { } // Delegator cannot initiate end delegation when validator is pending removed. - function testInitializeEndDelegationValidatorPendingRemoved() public { + function testInitiateDelegatorRemovalValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); bytes memory setWeightMessage = @@ -922,7 +922,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -964,7 +964,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address delegator = DEFAULT_DELEGATOR_ADDRESS; - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID, delegator: delegator, @@ -978,7 +978,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testInitializeDelegatorRegistrationValidatorCompleted() public { + function testInitiateDelegatorRegistrationValidatorCompleted() public { bytes32 validationID = _registerDefaultValidator(); _endDefaultValidatorWithChecks(validationID, 1); @@ -1001,9 +1001,9 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _endDefaultValidatorWithChecks(validationID, 2); - // completeDelegatorRegistration should fall through to _completeEndDelegation and refund the stake + // completeDelegatorRegistration should fall through to _completeDelegatorRemoval and refund the stake vm.expectEmit(true, true, true, true, address(validatorManager)); - emit DelegationEnded(delegationID, validationID, 0, 0); + emit CompletedDelegatorRemoval(delegationID, validationID, 0, 0); uint256 balanceBefore = _getStakeAssetBalance(DEFAULT_DELEGATOR_ADDRESS); @@ -1019,7 +1019,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); } - function testInitializeEndDelegationValidatorCompleted() public { + function testInitiateDelegatorRemovalValidatorCompleted() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); @@ -1038,9 +1038,9 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedValidatorFees = expectedTotalReward * DEFAULT_DELEGATION_FEE_BIPS / 10000; uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; - // completeDelegatorRegistration should fall through to _completeEndDelegation and refund the stake + // completeDelegatorRegistration should fall through to _completeDelegatorRemoval and refund the stake vm.expectEmit(true, true, true, true, address(validatorManager)); - emit DelegationEnded( + emit CompletedDelegatorRemoval( delegationID, validationID, expectedDelegatorReward, expectedValidatorFees ); @@ -1052,7 +1052,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { // warp to right after validator ended vm.warp(delegationEndTime); vm.prank(DEFAULT_DELEGATOR_ADDRESS); - posValidatorManager.initiateEndDelegation(delegationID, false, 0); + posValidatorManager.initiateDelegatorRemoval(delegationID, false, 0); assertEq( _getStakeAssetBalance(DEFAULT_DELEGATOR_ADDRESS), @@ -1064,7 +1064,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -1085,7 +1085,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit DelegationEnded( + emit CompletedDelegatorRemoval( delegationID, validationID, expectedDelegatorReward, expectedValidatorFees ); uint256 balanceBefore = _getStakeAssetBalance(DEFAULT_DELEGATOR_ADDRESS); @@ -1093,7 +1093,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _expectStakeUnlock(DEFAULT_DELEGATOR_ADDRESS, _weightToValue(DEFAULT_DELEGATOR_WEIGHT)); _expectRewardIssuance(DEFAULT_DELEGATOR_ADDRESS, expectedDelegatorReward); - posValidatorManager.completeEndDelegation(delegationID, 0); + posValidatorManager.completeDelegatorRemoval(delegationID, 0); assertEq( _getStakeAssetBalance(DEFAULT_DELEGATOR_ADDRESS), @@ -1127,7 +1127,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); // Initialize end delegation for both delegators - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: delegator1, delegationID: delegationID1, @@ -1139,7 +1139,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { force: false, rewardRecipient: address(0) }); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: delegator2, delegationID: delegationID2, @@ -1161,7 +1161,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetPChainWarpMessage(setValidatorWeightPayload, true); vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, nonce)); - posValidatorManager.completeEndDelegation(delegationID2, 0); + posValidatorManager.completeDelegatorRemoval(delegationID2, 0); } function testCompleteEndDelegationImplicitNonce() public { @@ -1191,7 +1191,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); // Initialize end delegation for both delegators - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: delegator1, delegationID: delegationID1, @@ -1203,7 +1203,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { force: false, rewardRecipient: address(0) }); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: delegator2, delegationID: delegationID2, @@ -1225,7 +1225,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { address delegator = DEFAULT_DELEGATOR_ADDRESS; // Complete delegation1 by delivering the weight update from nonce 4 (delegator2's nonce) - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID1, delegator: delegator, @@ -1690,7 +1690,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -1709,10 +1709,10 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidNonce.selector, 2)); - posValidatorManager.completeEndDelegation(delegationID, 0); + posValidatorManager.completeDelegatorRemoval(delegationID, 0); } - function testInitializeEndDelegationNotRegistered() public { + function testInitiateDelegatorRemovalNotRegistered() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); @@ -1722,10 +1722,10 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - posValidatorManager.initiateEndDelegation(delegationID, true, 0); + posValidatorManager.initiateDelegatorRemoval(delegationID, true, 0); } - function testInitializeEndDelegationWrongSender() public { + function testInitiateDelegatorRemovalWrongSender() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); @@ -1734,12 +1734,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); vm.prank(address(123)); - posValidatorManager.initiateEndDelegation(delegationID, true, 0); + posValidatorManager.initiateDelegatorRemoval(delegationID, true, 0); } - function testCompleteDelegatorRegistrationForDelegatorRegisteredWhileValidatorPendingRemoved() - public - { + function testCompleteDelegatorRegistrationForCompletedDelegatorRegistrationWhileValidatorPendingRemoved( + ) public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _initiateDefaultDelegatorRegistration(validationID); @@ -1780,7 +1779,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.warp(DEFAULT_COMPLETION_TIMESTAMP + 1 + DEFAULT_MINIMUM_STAKE_DURATION); _expectStakeUnlock(DEFAULT_DELEGATOR_ADDRESS, _weightToValue(DEFAULT_DELEGATOR_WEIGHT)); - posValidatorManager.initiateEndDelegation(delegationID, true, 0); + posValidatorManager.initiateDelegatorRemoval(delegationID, true, 0); } function testCompleteEndDelegationWhileActive() public { @@ -1793,7 +1792,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - posValidatorManager.completeEndDelegation(delegationID, 0); + posValidatorManager.completeDelegatorRemoval(delegationID, 0); } function testCompleteDelegatorRegistrationValidatorPendingRemoved() public { @@ -1825,7 +1824,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - posValidatorManager.initiateEndDelegation(delegationID, false, 0); + posValidatorManager.initiateDelegatorRemoval(delegationID, false, 0); } function testResendEndDelegationWhileActive() public { @@ -1838,10 +1837,10 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - posValidatorManager.resendUpdateDelegation(delegationID); + posValidatorManager.resendUpdateDelegator(delegationID); } - function testforceinitiateValidatorRemoval() public { + function testforceInitiateValidatorRemoval() public { bytes32 validationID = _registerDefaultValidator(); bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); @@ -1858,7 +1857,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function testforceinitiateValidatorRemovalInsufficientUptime() public { + function testforceInitiateValidatorRemovalInsufficientUptime() public { bytes32 validationID = _registerDefaultValidator(); uint64 uptimePercentage = 79; @@ -1879,7 +1878,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _forceinitiateValidatorRemoval(validationID, true, address(0)); + _forceInitiateValidatorRemoval(validationID, true, address(0)); } function testValueToWeightTruncated() public { @@ -1942,12 +1941,12 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); } - function _forceinitiateValidatorRemoval( + function _forceInitiateValidatorRemoval( bytes32 validationID, bool includeUptime, address recipientAddress ) internal virtual override { - posValidatorManager.forceinitiateValidatorRemoval( + posValidatorManager.forceInitiateValidatorRemoval( validationID, includeUptime, 0, recipientAddress ); } @@ -1961,7 +1960,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { // // Delegation setup utilities // - function _setUpInitializeDelegatorRegistration( + function _setUpInitiateDelegatorRegistration( bytes32 validationID, address delegatorAddress, uint64 weight, @@ -1983,7 +1982,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit DelegatorAdded({ + emit InitiatedDelegatorRegistration({ delegationID: keccak256(abi.encodePacked(validationID, expectedNonce)), validationID: validationID, delegatorAddress: delegatorAddress, @@ -2020,7 +2019,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit CompletedValidatorWeightUpdate(validationID, expectedNonce, expectedValidatorWeight); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit DelegatorRegistered({ + emit CompletedDelegatorRegistration({ delegationID: delegationID, validationID: validationID, startTime: completeRegistrationTimestamp @@ -2049,7 +2048,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { internal returns (bytes32) { - return _setUpInitializeDelegatorRegistration({ + return _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: DEFAULT_DELEGATOR_ADDRESS, weight: DEFAULT_DELEGATOR_WEIGHT, @@ -2074,7 +2073,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { } function _completeDefaultDelegator(bytes32 validationID, bytes32 delegationID) internal { - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -2092,7 +2091,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID, delegator: DEFAULT_DELEGATOR_ADDRESS, @@ -2115,7 +2114,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint64 expectedValidatorWeight, uint64 expectedNonce ) internal returns (bytes32) { - bytes32 delegationID = _setUpInitializeDelegatorRegistration({ + bytes32 delegationID = _setUpInitiateDelegatorRegistration({ validationID: validationID, delegatorAddress: delegatorAddress, weight: weight, @@ -2133,7 +2132,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { return delegationID; } - function _initiateEndDelegationValidatorActiveWithChecks( + function _initiateDelegatorRemovalValidatorActiveWithChecks( bytes32 validationID, address sender, bytes32 delegationID, @@ -2160,9 +2159,9 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit DelegatorRemovalInitialized({delegationID: delegationID, validationID: validationID}); + emit InitiatedDelegatorRemoval({delegationID: delegationID, validationID: validationID}); - _initiateEndDelegationValidatorActive({ + _initiateDelegatorRemovalValidatorActive({ sender: sender, delegationID: delegationID, endDelegationTimestamp: endDelegationTimestamp, @@ -2174,7 +2173,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function _initiateEndDelegationValidatorActive( + function _initiateDelegatorRemovalValidatorActive( address sender, bytes32 delegationID, uint64 endDelegationTimestamp, @@ -2189,7 +2188,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { if (includeUptime) { _mockGetUptimeWarpMessage(uptimePayload, true); } - _initiateEndDelegation({ + _initiateDelegatorRemoval({ sender: sender, delegationID: delegationID, endDelegationTimestamp: endDelegationTimestamp, @@ -2199,7 +2198,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } - function _initiateEndDelegation( + function _initiateDelegatorRemoval( address sender, bytes32 delegationID, uint64 endDelegationTimestamp, @@ -2210,11 +2209,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.warp(endDelegationTimestamp); vm.prank(sender); if (force) { - posValidatorManager.forceInitiateEndDelegation( + posValidatorManager.forceInitiateDelegatorRemoval( delegationID, includeUptime, 0, rewardRecipient ); } else { - posValidatorManager.initiateEndDelegation( + posValidatorManager.initiateDelegatorRemoval( delegationID, includeUptime, 0, rewardRecipient ); } @@ -2328,7 +2327,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.completeValidatorRemoval(0); } - function _completeEndDelegationWithChecks( + function _completeDelegatorRemovalWithChecks( bytes32 validationID, bytes32 delegationID, address delegator, @@ -2347,7 +2346,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { emit CompletedValidatorWeightUpdate(validationID, expectedNonce, validatorWeight); vm.expectEmit(true, true, true, true, address(posValidatorManager)); - emit DelegationEnded( + emit CompletedDelegatorRemoval( delegationID, validationID, expectedDelegatorReward, expectedValidatorFees ); uint256 balanceBefore = _getStakeAssetBalance(delegator); @@ -2356,7 +2355,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _expectStakeUnlock(delegator, _weightToValue(delegatorWeight)); _expectRewardIssuance(rewardRecipient, expectedDelegatorReward); - _completeEndDelegation(delegationID, weightUpdateMessage); + _completeDelegatorRemoval(delegationID, weightUpdateMessage); assertEq(posValidatorManager.getValidator(validationID).weight, expectedValidatorWeight); @@ -2377,19 +2376,19 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { } } - function _completeEndDelegation( + function _completeDelegatorRemoval( bytes32 delegationID, bytes memory weightUpdateMessage ) internal { _mockGetPChainWarpMessage(weightUpdateMessage, true); - posValidatorManager.completeEndDelegation(delegationID, 0); + posValidatorManager.completeDelegatorRemoval(delegationID, 0); } function _initiateAndCompleteEndDelegationWithChecks( bytes32 validationID, bytes32 delegationID ) internal { - _initiateEndDelegationValidatorActiveWithChecks({ + _initiateDelegatorRemovalValidatorActiveWithChecks({ validationID: validationID, sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, @@ -2415,7 +2414,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; address delegator = DEFAULT_DELEGATOR_ADDRESS; - _completeEndDelegationWithChecks({ + _completeDelegatorRemovalWithChecks({ validationID: validationID, delegationID: delegationID, delegator: delegator, diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 5b5a9ea30..e2c69978e 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -327,7 +327,7 @@ abstract contract ValidatorManagerTest is Test { bytes32 validationID = sha256(abi.encodePacked(DEFAULT_SUBNET_ID, uint32(0))); vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, 4)); - _forceinitiateValidatorRemoval(validationID, false, address(0)); + _forceInitiateValidatorRemoval(validationID, false, address(0)); } function testCumulativeChurnRegistration() public { @@ -505,7 +505,7 @@ abstract contract ValidatorManagerTest is Test { vm.warp(completionTimestamp); if (force) { - _forceinitiateValidatorRemoval(validationID, includeUptime, address(0)); + _forceInitiateValidatorRemoval(validationID, includeUptime, address(0)); } else { _initiateValidatorRemoval(validationID, includeUptime, address(0)); } @@ -527,7 +527,7 @@ abstract contract ValidatorManagerTest is Test { vm.warp(completionTimestamp); if (force) { - _forceinitiateValidatorRemoval(validationID, includeUptime, recipientAddress); + _forceInitiateValidatorRemoval(validationID, includeUptime, recipientAddress); } else { _initiateValidatorRemoval(validationID, includeUptime, recipientAddress); } @@ -623,7 +623,7 @@ abstract contract ValidatorManagerTest is Test { address rewardRecipient ) internal virtual; - function _forceinitiateValidatorRemoval( + function _forceInitiateValidatorRemoval( bytes32 validationID, bool includeUptime, address rewardRecipient From 23dc08d1685bed9b5b602e7e043406236016370e Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 17:20:41 -0600 Subject: [PATCH 22/29] remove ValidatorRegistrationInput struct --- .../ERC20TokenStakingManager.sol | 22 ++-- .../NativeTokenStakingManager.sol | 24 +++-- .../validator-manager/PoAValidatorManager.sol | 21 ++-- .../validator-manager/PoSValidatorManager.sol | 19 ++-- .../validator-manager/ValidatorManager.sol | 11 -- .../interfaces/IERC20TokenStakingManager.sol | 14 ++- .../interfaces/INativeTokenStakingManager.sol | 14 ++- .../interfaces/IPoAValidatorManager.sol | 14 ++- .../tests/ERC20TokenStakingManagerTests.t.sol | 64 +++++++---- .../NativeTokenStakingManagerTests.t.sol | 39 +++++-- .../tests/PoAValidatorManagerTests.t.sol | 56 +++++----- .../tests/PoSValidatorManagerTests.t.sol | 100 +++++++++++------- .../tests/ValidatorManagerTests.t.sol | 97 ++++++++--------- 13 files changed, 295 insertions(+), 200 deletions(-) diff --git a/contracts/validator-manager/ERC20TokenStakingManager.sol b/contracts/validator-manager/ERC20TokenStakingManager.sol index 096fc4443..46e416d07 100644 --- a/contracts/validator-manager/ERC20TokenStakingManager.sol +++ b/contracts/validator-manager/ERC20TokenStakingManager.sol @@ -7,8 +7,7 @@ pragma solidity 0.8.25; import {PoSValidatorManager} from "./PoSValidatorManager.sol"; import {PoSValidatorManagerSettings} from "./interfaces/IPoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "./ValidatorManager.sol"; -import {IERC20TokenStakingManager} from "./interfaces/IERC20TokenStakingManager.sol"; +import {IERC20TokenStakingManager, PChainOwner} from "./interfaces/IERC20TokenStakingManager.sol"; import {IERC20Mintable} from "./interfaces/IERC20Mintable.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; import {SafeERC20TransferFrom} from "@utilities/SafeERC20TransferFrom.sol"; @@ -99,14 +98,25 @@ contract ERC20TokenStakingManager is * @notice See {IERC20TokenStakingManager-initiateValidatorRegistration} */ function initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) external nonReentrant returns (bytes32 validationID) { - return _initiateValidatorRegistration( - registrationInput, delegationFeeBips, minStakeDuration, stakeAmount - ); + return _initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + delegationFeeBips: delegationFeeBips, + minStakeDuration: minStakeDuration, + stakeAmount: stakeAmount + }); } /** diff --git a/contracts/validator-manager/NativeTokenStakingManager.sol b/contracts/validator-manager/NativeTokenStakingManager.sol index fc875cb33..b0b188955 100644 --- a/contracts/validator-manager/NativeTokenStakingManager.sol +++ b/contracts/validator-manager/NativeTokenStakingManager.sol @@ -7,8 +7,9 @@ pragma solidity 0.8.25; import {PoSValidatorManager} from "./PoSValidatorManager.sol"; import {PoSValidatorManagerSettings} from "./interfaces/IPoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "./ValidatorManager.sol"; -import {INativeTokenStakingManager} from "./interfaces/INativeTokenStakingManager.sol"; +import { + INativeTokenStakingManager, PChainOwner +} from "./interfaces/INativeTokenStakingManager.sol"; import {INativeMinter} from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/INativeMinter.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; @@ -62,13 +63,24 @@ contract NativeTokenStakingManager is * @notice See {INativeTokenStakingManager-initiateValidatorRegistration}. */ function initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration ) external payable nonReentrant returns (bytes32) { - return _initiateValidatorRegistration( - registrationInput, delegationFeeBips, minStakeDuration, msg.value - ); + return _initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + delegationFeeBips: delegationFeeBips, + minStakeDuration: minStakeDuration, + stakeAmount: msg.value + }); } /** diff --git a/contracts/validator-manager/PoAValidatorManager.sol b/contracts/validator-manager/PoAValidatorManager.sol index 9604bf074..b6f716bfa 100644 --- a/contracts/validator-manager/PoAValidatorManager.sol +++ b/contracts/validator-manager/PoAValidatorManager.sol @@ -5,9 +5,8 @@ pragma solidity 0.8.25; -import {ValidatorManager} from "./ValidatorManager.sol"; -import {ValidatorManagerSettings, ValidatorRegistrationInput} from "./ValidatorManager.sol"; -import {IPoAValidatorManager} from "./interfaces/IPoAValidatorManager.sol"; +import {ValidatorManager, ValidatorManagerSettings} from "./ValidatorManager.sol"; +import {IPoAValidatorManager, PChainOwner} from "./interfaces/IPoAValidatorManager.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable@5.0.2/access/OwnableUpgradeable.sol"; @@ -49,15 +48,19 @@ contract PoAValidatorManager is IPoAValidatorManager, ValidatorManager, OwnableU * @notice See {IPoAValidatorManager-initiateValidatorRegistration}. */ function initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight ) external onlyOwner returns (bytes32 validationID) { return _initiateValidatorRegistration({ - nodeID: registrationInput.nodeID, - blsPublicKey: registrationInput.blsPublicKey, - registrationExpiry: registrationInput.registrationExpiry, - remainingBalanceOwner: registrationInput.remainingBalanceOwner, - disableOwner: registrationInput.disableOwner, + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, weight: weight }); } diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 7c8b93057..398127438 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -14,8 +14,7 @@ import { PoSValidatorInfo, PoSValidatorManagerSettings } from "./interfaces/IPoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "./ValidatorManager.sol"; -import {Validator, ValidatorStatus} from "./ACP99Manager.sol"; +import {Validator, ValidatorStatus, PChainOwner} from "./ACP99Manager.sol"; import {IRewardCalculator} from "./interfaces/IRewardCalculator.sol"; import {WarpMessage} from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/IWarpMessenger.sol"; @@ -455,7 +454,11 @@ abstract contract PoSValidatorManager is } function _initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount @@ -483,11 +486,11 @@ abstract contract PoSValidatorManager is uint64 weight = valueToWeight(lockedValue); bytes32 validationID = _initiateValidatorRegistration({ - nodeID: registrationInput.nodeID, - blsPublicKey: registrationInput.blsPublicKey, - registrationExpiry: registrationInput.registrationExpiry, - remainingBalanceOwner: registrationInput.remainingBalanceOwner, - disableOwner: registrationInput.disableOwner, + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, weight: weight }); diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 3d9e61328..9cead8ddf 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -46,17 +46,6 @@ struct ValidatorManagerSettings { uint8 maximumChurnPercentage; } -/** - * @dev Specifies a validator to register. - */ -struct ValidatorRegistrationInput { - bytes nodeID; - bytes blsPublicKey; - uint64 registrationExpiry; - PChainOwner remainingBalanceOwner; - PChainOwner disableOwner; -} - /** * @dev Implementation of the {ACP99Manager} abstract contract. * diff --git a/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol b/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol index b3b1a4095..df6d27982 100644 --- a/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol +++ b/contracts/validator-manager/interfaces/IERC20TokenStakingManager.sol @@ -5,8 +5,8 @@ pragma solidity 0.8.25; -import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {IPoSValidatorManager} from "./IPoSValidatorManager.sol"; +import {PChainOwner} from "../ACP99Manager.sol"; /** * Proof of Stake Validator Manager that stakes ERC20 tokens. @@ -14,13 +14,21 @@ import {IPoSValidatorManager} from "./IPoSValidatorManager.sol"; interface IERC20TokenStakingManager is IPoSValidatorManager { /** * @notice Begins the validator registration process. Locks the specified ERC20 tokens in the contract as the stake. - * @param registrationInput The inputs for a validator registration. + * @param nodeID The ID of the node to add to the L1. + * @param blsPublicKey The BLS public key of the validator. + * @param registrationExpiry The time after which this message is invalid. + * @param remainingBalanceOwner The remaining balance owner of the validator. + * @param disableOwner The disable owner of the validator. * @param delegationFeeBips The fee that delegators must pay to delegate to this validator. * @param minStakeDuration The minimum amount of time this validator must be staked for in seconds. * @param stakeAmount The amount of tokens to stake. */ function initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount diff --git a/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol b/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol index 2f6f6d380..24f38a718 100644 --- a/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol +++ b/contracts/validator-manager/interfaces/INativeTokenStakingManager.sol @@ -5,8 +5,8 @@ pragma solidity 0.8.25; -import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {IPoSValidatorManager} from "./IPoSValidatorManager.sol"; +import {PChainOwner} from "../ACP99Manager.sol"; /** * Proof of Stake Validator Manager that stakes the blockchain's native tokens. @@ -14,12 +14,20 @@ import {IPoSValidatorManager} from "./IPoSValidatorManager.sol"; interface INativeTokenStakingManager is IPoSValidatorManager { /** * @notice Begins the validator registration process. Locks the provided native asset in the contract as the stake. - * @param registrationInput The inputs for a validator registration. + * @param nodeID The ID of the node to add to the L1. + * @param blsPublicKey The BLS public key of the validator. + * @param registrationExpiry The time after which this message is invalid. + * @param remainingBalanceOwner The remaining balance owner of the validator. + * @param disableOwner The disable owner of the validator. * @param delegationFeeBips The fee that delegators must pay to delegate to this validator. * @param minStakeDuration The minimum amount of time this validator must be staked for in seconds. */ function initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration ) external payable returns (bytes32 validationID); diff --git a/contracts/validator-manager/interfaces/IPoAValidatorManager.sol b/contracts/validator-manager/interfaces/IPoAValidatorManager.sol index 818edf346..b98f906a0 100644 --- a/contracts/validator-manager/interfaces/IPoAValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoAValidatorManager.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.25; -import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; +import {PChainOwner} from "../ACP99Manager.sol"; /** * @notice Interface for Proof of Authority Validator Manager contracts @@ -13,11 +13,19 @@ import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; interface IPoAValidatorManager { /** * @notice Begins the validator registration process, and sets the {weight} of the validator. - * @param registrationInput The inputs for a validator registration. + * @param nodeID The ID of the node to add to the L1. + * @param blsPublicKey The BLS public key of the validator. + * @param registrationExpiry The time after which this message is invalid. + * @param remainingBalanceOwner The remaining balance owner of the validator. + * @param disableOwner The disable owner of the validator. * @param weight The weight of the validator being registered. */ function initiateValidatorRegistration( - ValidatorRegistrationInput calldata registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight ) external returns (bytes32 validationID); diff --git a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol index 12977c56e..97126a058 100644 --- a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol @@ -9,7 +9,6 @@ import {PoSValidatorManagerTest} from "./PoSValidatorManagerTests.t.sol"; import {ERC20TokenStakingManager} from "../ERC20TokenStakingManager.sol"; import {PoSValidatorManager, PoSValidatorManagerSettings} from "../PoSValidatorManager.sol"; import {ExampleRewardCalculator} from "../ExampleRewardCalculator.sol"; -import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {ICMInitializable} from "../../utilities/ICMInitializable.sol"; import {ExampleERC20} from "@mocks/ExampleERC20.sol"; import {IERC20} from "@openzeppelin/contracts@5.0.2/token/ERC20/IERC20.sol"; @@ -17,7 +16,7 @@ import {IERC20Mintable} from "../interfaces/IERC20Mintable.sol"; import {SafeERC20} from "@openzeppelin/contracts@5.0.2/token/ERC20/utils/SafeERC20.sol"; import {Initializable} from "@openzeppelin/contracts@5.0.2/proxy/utils/Initializable.sol"; import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; -import {ACP99Manager} from "../ACP99Manager.sol"; +import {ACP99Manager, PChainOwner} from "../ACP99Manager.sol"; contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { using SafeERC20 for IERC20Mintable; @@ -140,13 +139,6 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { } function testInvalidValidatorMinStakeDuration() public { - ValidatorRegistrationInput memory input = ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - registrationExpiry: DEFAULT_EXPIRY, - remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, - disableOwner: DEFAULT_P_CHAIN_OWNER - }); uint256 stakeAmount = _weightToValue(DEFAULT_WEIGHT); vm.expectRevert( abi.encodeWithSelector( @@ -154,9 +146,16 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { DEFAULT_MINIMUM_STAKE_DURATION - 1 ) ); - app.initiateValidatorRegistration( - input, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION - 1, stakeAmount - ); + app.initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION - 1, + stakeAmount: stakeAmount + }); } function testERC20TokenStakingManagerStorageSlot() public view { @@ -167,26 +166,45 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { } function _initiateValidatorRegistration( - ValidatorRegistrationInput memory registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) internal virtual override returns (bytes32) { - return app.initiateValidatorRegistration( - registrationInput, delegationFeeBips, minStakeDuration, stakeAmount - ); + return app.initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + delegationFeeBips: delegationFeeBips, + minStakeDuration: minStakeDuration, + stakeAmount: stakeAmount + }); } function _initiateValidatorRegistration( - ValidatorRegistrationInput memory input, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight ) internal virtual override returns (bytes32) { - return app.initiateValidatorRegistration( - input, - DEFAULT_DELEGATION_FEE_BIPS, - DEFAULT_MINIMUM_STAKE_DURATION, - _weightToValue(weight) - ); + return app.initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, + stakeAmount: _weightToValue(weight) + }); } function _initiateDelegatorRegistration( diff --git a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol index 69ba0db9c..b32dae9e8 100644 --- a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol @@ -9,14 +9,13 @@ import {Test} from "@forge-std/Test.sol"; import {PoSValidatorManagerTest} from "./PoSValidatorManagerTests.t.sol"; import {NativeTokenStakingManager} from "../NativeTokenStakingManager.sol"; import {PoSValidatorManager, PoSValidatorManagerSettings} from "../PoSValidatorManager.sol"; -import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import {ExampleRewardCalculator} from "../ExampleRewardCalculator.sol"; import {ICMInitializable} from "../../utilities/ICMInitializable.sol"; import {INativeMinter} from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/INativeMinter.sol"; import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; import {Initializable} from "@openzeppelin/contracts@5.0.2/proxy/utils/Initializable.sol"; -import {ACP99Manager} from "../ACP99Manager.sol"; +import {ACP99Manager, PChainOwner} from "../ACP99Manager.sol"; contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { NativeTokenStakingManager public app; @@ -128,23 +127,43 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { // Helpers function _initiateValidatorRegistration( - ValidatorRegistrationInput memory registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount ) internal virtual override returns (bytes32) { - return app.initiateValidatorRegistration{value: stakeAmount}( - registrationInput, delegationFeeBips, minStakeDuration - ); + return app.initiateValidatorRegistration{value: stakeAmount}({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + delegationFeeBips: delegationFeeBips, + minStakeDuration: minStakeDuration + }); } function _initiateValidatorRegistration( - ValidatorRegistrationInput memory input, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight ) internal virtual override returns (bytes32) { - return app.initiateValidatorRegistration{value: _weightToValue(weight)}( - input, DEFAULT_DELEGATION_FEE_BIPS, DEFAULT_MINIMUM_STAKE_DURATION - ); + return app.initiateValidatorRegistration{value: _weightToValue(weight)}({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + registrationExpiry: registrationExpiry, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION + }); } function _initiateDelegatorRegistration( diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index 742ae5d90..23e77fd09 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -6,14 +6,13 @@ pragma solidity 0.8.25; import {PoAValidatorManager} from "../PoAValidatorManager.sol"; -import {ValidatorManagerSettings, ValidatorRegistrationInput} from "../ValidatorManager.sol"; +import {ValidatorManager, ValidatorManagerSettings} from "../ValidatorManager.sol"; import {ValidatorManagerTest} from "./ValidatorManagerTests.t.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; -import {ValidatorManager} from "../ValidatorManager.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable@5.0.2/access/OwnableUpgradeable.sol"; import {Initializable} from "@openzeppelin/contracts@5.0.2/proxy/utils/Initializable.sol"; -import {ACP99Manager} from "../ACP99Manager.sol"; +import {ACP99Manager, PChainOwner} from "../ACP99Manager.sol"; contract PoAValidatorManagerTest is ValidatorManagerTest { PoAValidatorManager public app; @@ -49,16 +48,14 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { OwnableUpgradeable.OwnableUnauthorizedAccount.selector, vm.addr(1) ) ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - registrationExpiry: DEFAULT_EXPIRY, - remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, - disableOwner: DEFAULT_P_CHAIN_OWNER - }), - DEFAULT_WEIGHT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + weight: DEFAULT_WEIGHT + }); } // This test applies to all ValidatorManagers, but we test it here to avoid @@ -71,23 +68,32 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, weight) ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: nodeID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, - disableOwner: DEFAULT_P_CHAIN_OWNER, - registrationExpiry: DEFAULT_EXPIRY - }), - weight - ); + _initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + registrationExpiry: DEFAULT_EXPIRY, + weight: weight + }); } function _initiateValidatorRegistration( - ValidatorRegistrationInput memory input, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight ) internal virtual override returns (bytes32) { - return app.initiateValidatorRegistration(input, weight); + return app.initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + remainingBalanceOwner: remainingBalanceOwner, + disableOwner: disableOwner, + registrationExpiry: registrationExpiry, + weight: weight + }); } function _initiateValidatorRemoval( diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index e84f33da9..076c82460 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -11,13 +11,15 @@ import {PoSValidatorManager} from "../PoSValidatorManager.sol"; import { DelegatorStatus, PoSValidatorManagerSettings } from "../interfaces/IPoSValidatorManager.sol"; -import {ValidatorManager, ValidatorStatus} from "../ValidatorManager.sol"; -import {ValidatorManagerSettings, ValidatorRegistrationInput} from "../ValidatorManager.sol"; +import { + ValidatorManager, ValidatorStatus, ValidatorManagerSettings +} from "../ValidatorManager.sol"; import {ValidatorMessages} from "../ValidatorMessages.sol"; import { WarpMessage, IWarpMessenger } from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/IWarpMessenger.sol"; +import {PChainOwner} from "../ACP99Manager.sol"; abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint64 public constant DEFAULT_UPTIME = uint64(100); @@ -43,14 +45,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager public posValidatorManager; IRewardCalculator public rewardCalculator; - ValidatorRegistrationInput public defaultRegistrationInput = ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - registrationExpiry: DEFAULT_EXPIRY, - remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, - disableOwner: DEFAULT_P_CHAIN_OWNER - }); - event InitiatedDelegatorRegistration( bytes32 indexed delegationID, bytes32 indexed validationID, @@ -80,12 +74,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { DEFAULT_MINIMUM_DELEGATION_FEE_BIPS - 1 ) ); - _initiateValidatorRegistration( - defaultRegistrationInput, - DEFAULT_MINIMUM_DELEGATION_FEE_BIPS - 1, - DEFAULT_MINIMUM_STAKE_DURATION, - DEFAULT_MINIMUM_STAKE_AMOUNT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + delegationFeeBips: DEFAULT_MINIMUM_DELEGATION_FEE_BIPS - 1, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, + stakeAmount: DEFAULT_MINIMUM_STAKE_AMOUNT + }); } function testDelegationFeeBipsTooHigh() public { @@ -96,12 +94,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - _initiateValidatorRegistration( - defaultRegistrationInput, - delegationFeeBips, - DEFAULT_MINIMUM_STAKE_DURATION, - DEFAULT_MINIMUM_STAKE_AMOUNT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + delegationFeeBips: delegationFeeBips, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, + stakeAmount: DEFAULT_MINIMUM_STAKE_AMOUNT + }); } function testInvalidMinStakeDuration() public { @@ -111,12 +113,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { DEFAULT_MINIMUM_STAKE_DURATION - 1 ) ); - _initiateValidatorRegistration( - defaultRegistrationInput, - DEFAULT_DELEGATION_FEE_BIPS, - DEFAULT_MINIMUM_STAKE_DURATION - 1, - DEFAULT_MINIMUM_STAKE_AMOUNT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION - 1, + stakeAmount: DEFAULT_MINIMUM_STAKE_AMOUNT + }); } function testStakeAmountTooLow() public { @@ -125,12 +131,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.InvalidStakeAmount.selector, DEFAULT_MINIMUM_STAKE_AMOUNT - 1 ) ); - _initiateValidatorRegistration( - defaultRegistrationInput, - DEFAULT_DELEGATION_FEE_BIPS, - DEFAULT_MINIMUM_STAKE_DURATION, - DEFAULT_MINIMUM_STAKE_AMOUNT - 1 - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, + stakeAmount: DEFAULT_MINIMUM_STAKE_AMOUNT - 1 + }); } function testStakeAmountTooHigh() public { @@ -139,12 +149,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { PoSValidatorManager.InvalidStakeAmount.selector, DEFAULT_MAXIMUM_STAKE_AMOUNT + 1 ) ); - _initiateValidatorRegistration( - defaultRegistrationInput, - DEFAULT_DELEGATION_FEE_BIPS, - DEFAULT_MINIMUM_STAKE_DURATION, - DEFAULT_MAXIMUM_STAKE_AMOUNT + 1 - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationExpiry: DEFAULT_EXPIRY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + minStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, + stakeAmount: DEFAULT_MAXIMUM_STAKE_AMOUNT + 1 + }); } function testInvalidInitializeEndTime() public { @@ -1925,7 +1939,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { } function _initiateValidatorRegistration( - ValidatorRegistrationInput memory registrationInput, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index e2c69978e..d8aa5aaa3 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -8,7 +8,6 @@ pragma solidity 0.8.25; import {Test} from "@forge-std/Test.sol"; import {ValidatorManager} from "../ValidatorManager.sol"; import {ValidatorMessages} from "../ValidatorMessages.sol"; -import {ValidatorRegistrationInput} from "../ValidatorManager.sol"; import { WarpMessage, IWarpMessenger @@ -136,16 +135,14 @@ abstract contract ValidatorManagerTest is Test { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.InvalidPChainOwnerThreshold.selector, 2, 1) ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - remainingBalanceOwner: invalidPChainOwner1, - disableOwner: DEFAULT_P_CHAIN_OWNER, - registrationExpiry: DEFAULT_EXPIRY - }), - DEFAULT_WEIGHT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + remainingBalanceOwner: invalidPChainOwner1, + disableOwner: DEFAULT_P_CHAIN_OWNER, + registrationExpiry: DEFAULT_EXPIRY, + weight: DEFAULT_WEIGHT + }); } function testInitializeValidatorRegistrationZeroPChainOwnerThreshold() public { @@ -157,16 +154,14 @@ abstract contract ValidatorManagerTest is Test { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.InvalidPChainOwnerThreshold.selector, 0, 1) ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - remainingBalanceOwner: invalidPChainOwner1, - disableOwner: DEFAULT_P_CHAIN_OWNER, - registrationExpiry: DEFAULT_EXPIRY - }), - DEFAULT_WEIGHT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + remainingBalanceOwner: invalidPChainOwner1, + disableOwner: DEFAULT_P_CHAIN_OWNER, + registrationExpiry: DEFAULT_EXPIRY, + weight: DEFAULT_WEIGHT + }); } function testInitializeValidatorRegistrationPChainOwnerAddressesUnsorted() public { @@ -180,16 +175,14 @@ abstract contract ValidatorManagerTest is Test { vm.expectRevert( abi.encodeWithSelector(ValidatorManager.PChainOwnerAddressesNotSorted.selector) ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - remainingBalanceOwner: invalidPChainOwner1, - disableOwner: DEFAULT_P_CHAIN_OWNER, - registrationExpiry: DEFAULT_EXPIRY - }), - DEFAULT_WEIGHT - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + remainingBalanceOwner: invalidPChainOwner1, + disableOwner: DEFAULT_P_CHAIN_OWNER, + registrationExpiry: DEFAULT_EXPIRY, + weight: DEFAULT_WEIGHT + }); } // The following tests call functions that are implemented in ValidatorManager, but access state that's @@ -354,16 +347,14 @@ abstract contract ValidatorManagerTest is Test { churnThreshold + _valueToWeight(DEFAULT_MINIMUM_STAKE_AMOUNT) ) ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: DEFAULT_NODE_ID, - blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, - remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, - disableOwner: DEFAULT_P_CHAIN_OWNER, - registrationExpiry: DEFAULT_REGISTRATION_TIMESTAMP + 1 - }), - _valueToWeight(DEFAULT_MINIMUM_STAKE_AMOUNT) - ); + _initiateValidatorRegistration({ + nodeID: DEFAULT_NODE_ID, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + registrationExpiry: DEFAULT_REGISTRATION_TIMESTAMP + 1, + weight: _valueToWeight(DEFAULT_MINIMUM_STAKE_AMOUNT) + }); } function testCumulativeChurnRegistrationAndEndValidation() public { @@ -455,16 +446,14 @@ abstract contract ValidatorManagerTest is Test { validationID, nodeID, bytes32(0), registrationExpiry, weight ); - _initiateValidatorRegistration( - ValidatorRegistrationInput({ - nodeID: nodeID, - blsPublicKey: blsPublicKey, - remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, - disableOwner: DEFAULT_P_CHAIN_OWNER, - registrationExpiry: registrationExpiry - }), - weight - ); + _initiateValidatorRegistration({ + nodeID: nodeID, + blsPublicKey: blsPublicKey, + remainingBalanceOwner: DEFAULT_P_CHAIN_OWNER, + disableOwner: DEFAULT_P_CHAIN_OWNER, + registrationExpiry: registrationExpiry, + weight: weight + }); } function _registerValidator( @@ -613,7 +602,11 @@ abstract contract ValidatorManagerTest is Test { } function _initiateValidatorRegistration( - ValidatorRegistrationInput memory input, + bytes memory nodeID, + bytes memory blsPublicKey, + uint64 registrationExpiry, + PChainOwner memory remainingBalanceOwner, + PChainOwner memory disableOwner, uint64 weight ) internal virtual returns (bytes32); From 1c90d162cca0b2b80688e3cc3639040330d5ca49 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Wed, 15 Jan 2025 17:26:55 -0600 Subject: [PATCH 23/29] update & integrate bindings --- .../ERC20TokenStakingManager.go | 871 +++++++++--------- .../NativeTokenStakingManager.go | 871 +++++++++--------- .../PoAValidatorManager.go | 85 +- .../IPoSValidatorManager.go | 494 +++++----- .../validator-manager/erc20_token_staking.go | 8 +- .../validator-manager/native_token_staking.go | 8 +- tests/flows/validator-manager/poa_to_pos.go | 12 +- tests/utils/validator_manager.go | 57 +- 8 files changed, 1190 insertions(+), 1216 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index bf80ea3f3..271e88e5c 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -93,19 +93,10 @@ type ValidatorMessagesValidationPeriod struct { Weight uint64 } -// ValidatorRegistrationInput is an auto generated low-level Go binding around an user-defined struct. -type ValidatorRegistrationInput struct { - NodeID []byte - BlsPublicKey []byte - RegistrationExpiry uint64 - RemainingBalanceOwner PChainOwner - DisableOwner PChainOwner -} - // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220eb3ee0daa57d2aebbba17cb5368b3b61076fec41c0f031fbf4fa7f5c0eb64b4e64736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initiateDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initiateValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615dfb380380615dfb83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615cae8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638af5499e1161014b578063bb0b1938116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063bb0b193814610503578063bc5fbfec1461050b578063bee0a03f14610532578063c974d1b614610545578063cc71bbba1461054d575f80fd5b8063a3a65e4811610110578063a3a65e4814610495578063a9778a7a14610369578063aac80c39146104a8578063afb98096146104bb578063b2c1712e146104e2578063b771b3bc146104f5575f80fd5b80638af5499e146104365780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639e478eea14610482575f80fd5b80632e2194d8116101e257806360ad7784116101a757806360ad7784146103bd57806362065856146103d0578063732214f8146103e3578063739b4eff146103ea578063785e9e86146103fd5780638280a25a1461042e575f80fd5b80632e2194d81461033e57806335455ded146103695780634b396bcc146103855780635dc1f5351461039857806360305d62146103a0575f80fd5b806320d91b7a1161022857806320d91b7a146102df578063245dafcb146102f257806325e1c7761461030557806327bf60cd146103185780632aa566381461032b575f80fd5b80630322ed98146102645780631340964514610279578063151d30d11461028c57806316679564146102ab5780631af1872b146102be575b5f80fd5b610277610272366004614c04565b6105f4565b005b610277610287366004614c2e565b610887565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614c65565b610a7a565b6102d16102cc366004614eb3565b610a86565b6040519081526020016102a2565b6102776102ed366004614f92565b610ac3565b610277610300366004614c04565b611031565b610277610313366004614c2e565b611291565b610277610326366004614c65565b611305565b610277610339366004614c65565b611311565b61035161034c366004614c04565b611322565b6040516001600160401b0390911681526020016102a2565b61037261271081565b60405161ffff90911681526020016102a2565b610277610393366004614fd7565b611376565b6102d1611382565b6103a8601481565b60405163ffffffff90911681526020016102a2565b6102776103cb366004614c2e565b611391565b6102d16103de366004615025565b6115e2565b6102d15f81565b6102d16103f8366004615040565b611602565b5f80516020615c39833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610294603081565b610277610444366004614fd7565b61162e565b610277610457366004615060565b61163a565b61027761046a366004614c04565b6116eb565b6102d161047d36600461508e565b61177f565b6102776104903660046150a7565b611858565b6102d16104a336600461508e565b611937565b6102776104b6366004614fd7565b611b32565b6102d17f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6102776104f0366004614c65565b611b3e565b6104166005600160991b0181565b610351611b4a565b6102d17fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610540366004614c04565b611b6c565b610294601481565b61027761055b366004614fd7565b611c88565b61057361056e36600461508e565b611c94565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614c04565b611e17565b6040516102a2919061514f565b6103516202a30081565b6102d15f80516020615c3983398151915281565b6102776105dc366004615060565b611f66565b6102d16105ef366004615205565b611ffd565b5f6105fd612035565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115610637576106376150da565b6005811115610648576106486150da565b815260200160018201805461065c90615270565b80601f016020809104026020016040519081016040528092919081815260200182805461068890615270565b80156106d35780601f106106aa576101008083540402835291602001916106d3565b820191905f5260205f20905b8154815290600101906020018083116106b657829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561074b5761074b6150da565b14610787575f8381526005830160205260409081902054905163170cc93360e21b815261077e9160ff16906004016152a8565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156107fe573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261082591908101906152f8565b6040518263ffffffff1660e01b81526004016108419190615329565b6020604051808303815f875af115801561085d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610881919061533b565b50505050565b61088f612059565b5f610898612090565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156108d1576108d16150da565b60038111156108e2576108e26150da565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561095b5761095b6150da565b1461097c578051604051633b0d540d60e21b815261077e9190600401615352565b5f61098a8260400151611e17565b9050600461099b8360400151611e17565b5160058111156109ad576109ad6150da565b141580156109d457508160c001516001600160401b031681608001516001600160401b0316105b15610a54575f806109e486611c94565b9150915081846040015114610a0f5760405163089938b360e11b81526004810183905260240161077e565b806001600160401b03168460c001516001600160401b03161115610a5157604051632e19bc2d60e11b81526001600160401b038216600482015260240161077e565b50505b610a5d856120b4565b505050610a7660015f80516020615c5983398151915255565b5050565b6108818383835f612298565b5f610a8f612059565b610a9f89898989898989896124df565b9050610ab760015f80516020615c5983398151915255565b98975050505050505050565b5f610acc612035565b600781015490915060ff1615610af557604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5c919061533b565b836020013514610b85576040516372b0a7e760e11b81526020840135600482015260240161077e565b30610b96606085016040860161536c565b6001600160a01b031614610bd957610bb4606084016040850161536c565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161077e565b5f610be76060850185615387565b905090505f805b828163ffffffff161015610e27575f610c0a6060880188615387565b8363ffffffff16818110610c2057610c206153cc565b9050602002810190610c3291906153e0565b610c3b906153fe565b80516040519192505f916006880191610c5391615479565b90815260200160405180910390205414610c8357805160405163a41f772f60e01b815261077e9190600401615329565b5f6002885f013584604051602001610cb292919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610ccc91615479565b602060405180830381855afa158015610ce7573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d0a919061533b565b90508086600601835f0151604051610d229190615479565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610d6290826154ce565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610dd1908561559d565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e0c9291906155bd565b60405180910390a2505080610e20906155e7565b9050610bee565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610e6a910460ff1683615609565b6001600160401b03161015610e9d57604051633e1a785160e01b81526001600160401b038216600482015260240161077e565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec187612667565b604001516040518263ffffffff1660e01b8152600401610ee19190615329565b602060405180830381865af4158015610efc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f20919061533b565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5a919061575f565b5f60405180830381865af4158015610f74573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9b91908101906152f8565b90505f600282604051610fae9190615479565b602060405180830381855afa158015610fc9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fec919061533b565b90508281146110185760405163baaea89d60e01b8152600481018290526024810184905260440161077e565b5050506007909201805460ff1916600117905550505050565b5f61103a612090565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611073576110736150da565b6003811115611084576110846150da565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156110fd576110fd6150da565b1415801561111e575060038151600381111561111b5761111b6150da565b14155b1561113f578051604051633b0d540d60e21b815261077e9190600401615352565b5f61114d8260400151611e17565b905080606001516001600160401b03165f0361117f576040516339b894f960e21b81526004810185905260240161077e565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f936111ed93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611207573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261122e91908101906152f8565b6040518263ffffffff1660e01b815260040161124a9190615329565b6020604051808303815f875af1158015611266573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128a919061533b565b5050505050565b61129a8261277d565b6112ba576040516330efa98b60e01b81526004810183905260240161077e565b5f6112c483611e17565b51905060028160058111156112db576112db6150da565b146112fb578060405163170cc93360e21b815260040161077e91906152a8565b61088183836127a6565b6108818383835f612a45565b61131d8383835f612d72565b505050565b5f8061132c612090565b6003015461133a90846157f3565b905080158061134f57506001600160401b0381115b156113705760405163222d164360e21b81526004810184905260240161077e565b92915050565b61128a84848484612298565b5f61138b612035565b54919050565b5f61139a612090565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156113d3576113d36150da565b60038111156113e4576113e46150da565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61145a82611e17565b9050600183516003811115611471576114716150da565b14611492578251604051633b0d540d60e21b815261077e9190600401615352565b6004815160058111156114a7576114a76150da565b036114bd576114b5866120b4565b505050505050565b8260a001516001600160401b031681608001516001600160401b0316101561155b575f806114ea87611c94565b9150915081841461151657846040015160405163089938b360e11b815260040161077e91815260200190565b8460a001516001600160401b0316816001600160401b0316101561155857604051632e19bc2d60e11b81526001600160401b038216600482015260240161077e565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa910160405180910390a3505050505050565b5f6115eb612090565b60030154611370906001600160401b038416615812565b5f61160b612059565b611616833384612d9e565b905061137060015f80516020615c5983398151915255565b61088184848484612d72565b5f611643612090565b90506001600160a01b0382166116775760405163caa903f960e01b81526001600160a01b038316600482015260240161077e565b5f8381526006820160205260409020546001600160a01b031633146116bd57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161077e565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116f4612090565b90505f61170083611e17565b5190506004816005811115611717576117176150da565b14611737578060405163170cc93360e21b815260040161077e91906152a8565b5f8381526006830160205260409020546001600160a01b0316331461175c5733611698565b5f83815260068301602052604090205461131d906001600160a01b031684612fe3565b5f611788612059565b5f611791612090565b90505f8061179e8561300d565b915091506117ab8261277d565b6117b95750915061183d9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117fb5750805b600483516005811115611810576118106150da565b0361181f5761181f8185612fe3565b6118358261183085604001516115e2565b6133c2565b509193505050505b61185360015f80516020615c5983398151915255565b919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806118a1575080546001600160401b03808416911610155b156118bf5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556118ea84846133e5565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611941612035565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61196887612667565b604001516040518263ffffffff1660e01b81526004016119889190615329565b6040805180830381865af41580156119a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c69190615829565b91509150806119ec57604051632d07135360e01b8152811515600482015260240161077e565b5f82815260048401602052604090208054611a0690615270565b90505f03611a2a5760405163089938b360e11b81526004810183905260240161077e565b60015f838152600580860160205260409091205460ff1690811115611a5157611a516150da565b14611a84575f8281526005840160205260409081902054905163170cc93360e21b815261077e9160ff16906004016152a8565b5f8281526004840160205260408120611a9c91614b70565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611b2293600190910192600160c01b90920416906158c5565b60405180910390a2509392505050565b61128a84848484612a45565b61131d8383835f6133ff565b5f611b53612035565b60030154600160401b90046001600160401b0316919050565b5f611b75612035565b5f8381526004820160205260409020805491925090611b9390615270565b90505f03611bb75760405163089938b360e11b81526004810183905260240161077e565b60015f838152600580840160205260409091205460ff1690811115611bde57611bde6150da565b14611c11575f8281526005820160205260409081902054905163170cc93360e21b815261077e9160ff16906004016152a8565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4892016158d7565b6020604051808303815f875af1158015611c64573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131d919061533b565b610881848484846133ff565b5f805f611ca084612667565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611ce09190615329565b606060405180830381865af4158015611cfb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d1f91906158e9565b9250925092505f611d2e612035565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d8257604051632e19bc2d60e11b81526001600160401b038416600482015260240161077e565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611e0290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e1f614ba7565b5f611e28612035565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e6257611e626150da565b6005811115611e7357611e736150da565b8152602001600182018054611e8790615270565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb390615270565b8015611efe5780601f10611ed557610100808354040283529160200191611efe565b820191905f5260205f20905b815481529060010190602001808311611ee157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f985760405163caa903f960e01b81526001600160a01b038216600482015260240161077e565b5f611fa1612090565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fcf5733611698565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80612007612035565b905080600601848460405161201d929190615929565b90815260200160405180910390205491505092915050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80516020615c5983398151915280546001190161208a57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f6120bd612090565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120f6576120f66150da565b6003811115612107576121076150da565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061217b61342b565b826080015161218a919061559d565b6001600160401b03164210156121be5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161077e565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612219575060208201515b5f80612226838886613446565b9150915061223f856020015161183087606001516115e2565b6040805183815260208101839052859189917f5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e910160405180910390a350505050505050565b60015f80516020615c5983398151915255565b5f806122a2612090565b90506122ad866134f3565b5f6122b787611e17565b90506122c28761277d565b6122d1576001925050506124d7565b5f8781526006830160205260409020546001600160a01b031633146122f65733611698565b5f87815260068301602052604090205460c082015161232591600160b01b90046001600160401b03169061559d565b6001600160401b03168160e001516001600160401b0316101561236c5760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161077e565b5f86156123845761237d88876127a6565b90506123a2565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906123c7906115e2565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612431573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612455919061533b565b90506001600160a01b038616612481575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906124a0908490615938565b90915550505f898152600b94909401602052604090932080546001600160a01b0319166001600160a01b0387161790555050151590505b949350505050565b5f806124e9612090565b600281015490915061ffff600160401b90910481169086161080612512575061271061ffff8616115b1561253657604051635f12e6c360e11b815261ffff8616600482015260240161077e565b60028101546001600160401b039081169085161015612572576040516202a06d60e11b81526001600160401b038516600482015260240161077e565b80548310806125845750806001015483115b156125a55760405163222d164360e21b81526004810184905260240161077e565b5f6125af846137de565b90505f6125bb82611322565b90505f6125cc8d8d8d8d8d87613801565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b03191690961790955550939998505050505050505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156126cb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126f2919081019061594b565b915091508061271457604051636b2f19e960e01b815260040160405180910390fd5b81511561273a578151604051636ba589a560e01b8152600481019190915260240161077e565b60208201516001600160a01b031615612776576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161077e565b5092915050565b5f80612787612090565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156127f1573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612818919081019061594b565b915091508061283a57604051636b2f19e960e01b815260040160405180910390fd5b5f612843612090565b6005810154845191925014612871578251604051636ba589a560e01b8152600481019190915260240161077e565b60208301516001600160a01b0316156128ad576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161077e565b60208301516001600160a01b0316156128e9576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161077e565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016129269190615329565b6040805180830381865af4158015612940573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061296491906159db565b9150915081881461298b5760405163089938b360e11b81526004810189905260240161077e565b5f8881526006840160205260409020600101546001600160401b039081169082161115612a1c575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612a3a565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b5f80612a4f612090565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612a8857612a886150da565b6003811115612a9957612a996150da565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f612b0f82611e17565b9050600283516003811115612b2657612b266150da565b14612b47578251604051633b0d540d60e21b815261077e9190600401615352565b60208301516001600160a01b03163314612be3575f8281526006850160205260409020546001600160a01b03163314612b805733611698565b5f82815260068501602052604090205460c0820151612baf91600160b01b90046001600160401b03169061559d565b6001600160401b0316421015612be35760405163fb6ce63f60e01b81526001600160401b034216600482015260240161077e565b600281516005811115612bf857612bf86150da565b03612d1a5760028401546080840151612c1a916001600160401b03169061559d565b6001600160401b0316421015612c4e5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161077e565b8715612c6057612c5e82886127a6565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a0820151612c99918491612c9491906159fe565b613bba565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612cdc84888c613d84565b9050828a7f5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf60405160405180910390a3151594506124d79350505050565b600481516005811115612d2f57612d2f6150da565b03612d5657612d3f83878b613d84565b50612d49896120b4565b60019450505050506124d7565b805160405163170cc93360e21b815261077e91906004016152a8565b612d7e84848484612a45565b61088157604051631036cf9160e11b81526004810185905260240161077e565b5f80612da8612090565b90505f612db761034c856137de565b90505f612dc387611e17565b9050612dce8761277d565b612dee576040516330efa98b60e01b81526004810188905260240161077e565b600281516005811115612e0357612e036150da565b14612e2457805160405163170cc93360e21b815261077e91906004016152a8565b5f828260a00151612e35919061559d565b905083600201600a9054906101000a90046001600160401b03168260400151612e5e9190615609565b6001600160401b0316816001600160401b03161115612e9b57604051636d51fe0560e11b81526001600160401b038216600482015260240161077e565b5f80612ea78a84613bba565b915091505f8a83604051602001612ed592919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d19060800160405180910390a496505050505050505b9392505050565b5f612fec612090565b5f838152600a82016020526040812080549190559091506108818482613f72565b5f613016614ba7565b5f61301f612035565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61304688612667565b604001516040518263ffffffff1660e01b81526004016130669190615329565b6040805180830381865af4158015613080573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130a49190615829565b9150915080156130cb57604051632d07135360e01b8152811515600482015260240161077e565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115613103576131036150da565b6005811115613114576131146150da565b815260200160018201805461312890615270565b80601f016020809104026020016040519081016040528092919081815260200182805461315490615270565b801561319f5780601f106131765761010080835404028352916020019161319f565b820191905f5260205f20905b81548152906001019060200180831161318257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c09091015290915081516005811115613217576132176150da565b141580156132385750600181516005811115613235576132356150da565b14155b1561325957805160405163170cc93360e21b815261077e91906004016152a8565b60038151600581111561326e5761326e6150da565b0361327c5760048152613281565b600581525b8360060181602001516040516132979190615479565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156132da576132da6150da565b0217905550602082015160018201906132f390826154ce565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615c3983398151915254610a76906001600160a01b03168383613fe8565b6133ed614047565b6133f682614092565b610a768161410f565b61340b84848484612298565b61088157604051635bff683f60e11b81526004810185905260240161077e565b5f613434612035565b600101546001600160401b0316919050565b5f805f613451612090565b5f868152600882016020526040812080549082905591925090819080156134e5575f8781526006850160205260409020546127109061349b90600160a01b900461ffff1683615812565b6134a591906157f3565b91508184600a015f8981526020019081526020015f205f8282546134c99190615938565b909155506134d990508282615a1e565b92506134e58984613f72565b509097909650945050505050565b5f6134fc612035565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613536576135366150da565b6005811115613547576135476150da565b815260200160018201805461355b90615270565b80601f016020809104026020016040519081016040528092919081815260200182805461358790615270565b80156135d25780601f106135a9576101008083540402835291602001916135d2565b820191905f5260205f20905b8154815290600101906020018083116135b557829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c0909101529091508151600581111561364a5761364a6150da565b1461367d575f8381526005830160205260409081902054905163170cc93360e21b815261077e9160ff16906004016152a8565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff19169060019084908111156136c2576136c26150da565b0217905550602082015160018201906136db90826154ce565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f61377b8482613bba565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a00151426040516137d0939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f611370825f80516020615c39833981519152546001600160a01b031690614177565b5f61380a612035565b6007015460ff1661382e57604051637fab81e560e01b815260040160405180910390fd5b5f613837612035565b905042866001600160401b031611158061386657506138596202a30042615938565b866001600160401b031610155b1561388f57604051635879da1360e11b81526001600160401b038716600482015260240161077e565b60038101546001600160401b03906138b290600160401b90048216858316615938565b11156138dc57604051633e1a785160e01b81526001600160401b038416600482015260240161077e565b6138e585614183565b6138ee84614183565b86516030146139155786516040516326475b2f60e11b815260040161077e91815260200190565b87515f036139385787604051633e08a12560e11b815260040161077e9190615329565b5f801b816006018960405161394d9190615479565b9081526020016040518091039020541461397c578760405163a41f772f60e01b815260040161077e9190615329565b613986835f6142a2565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613a069190615a97565b5f60405180830381865af4158015613a20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613a479190810190615b4e565b5f82815260048601602052604090209193509150613a6582826154ce565b5081836006018b604051613a799190615479565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613ab5908590600401615329565b6020604051808303815f875af1158015613ad1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af5919061533b565b5f8481526005860160205260409020805460ff19166001908117825591925001613b1f8c826154ce565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613ba3908e9085908e908c90615b91565b60405180910390a250909998505050505050505050565b5f805f613bc5612035565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b0316613bf585826142a2565b5f613bff8761450f565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613ca3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613cca91908101906152f8565b6040518263ffffffff1660e01b8152600401613ce69190615329565b6020604051808303815f875af1158015613d02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d26919061533b565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f80613d8e612090565b90505f613d9e8660400151611e17565b90505f600382516005811115613db657613db66150da565b1480613dd45750600482516005811115613dd257613dd26150da565b145b15613de4575060e0810151613e21565b600282516005811115613df957613df96150da565b03613e05575042613e21565b815160405163170cc93360e21b815261077e91906004016152a8565b86608001516001600160401b0316816001600160401b031611613e49575f9350505050612fdc565b600483015460608801515f916001600160a01b031690634f22429f90613e6e906115e2565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613eef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f13919061533b565b90506001600160a01b038716613f2b57876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f5f80516020615c3983398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613fcd575f80fd5b505af1158015613fdf573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261131d91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614578565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661409057604051631afcd79f60e31b815260040160405180910390fd5b565b61409a614047565b6140a3816145d9565b6140ab6145f2565b61410c606082013560808301356140c860c0850160a08601615025565b6140d860e0860160c08701615bc9565b6140e9610100870160e08801615be2565b61010087013561410161014089016101208a0161536c565b886101400135614602565b50565b614117614047565b5f80516020615c398339815191526001600160a01b03821661415757604051637330680360e01b81526001600160a01b038316600482015260240161077e565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f612fdc8333846147c4565b805163ffffffff1615801561419c575060208101515115155b156141d057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161077e565b602081015151815163ffffffff16111561421357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161077e565b60015b816020015151811015610a76576020820151614233600183615a1e565b81518110614243576142436153cc565b60200260200101516001600160a01b03168260200151828151811061426a5761426a6153cc565b60200260200101516001600160a01b0316101561429a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614216565b5f6142ab612035565b90505f826001600160401b0316846001600160401b031611156142d9576142d283856159fe565b90506142e6565b6142e384846159fe565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061435357506001840154815161434f916001600160401b031690615938565b8210155b1561437b576001600160401b038084166060830152828252604082015116602082015261439a565b828160600181815161438d919061559d565b6001600160401b03169052505b60608101516143aa906064615609565b602082015160018601546001600160401b0392909216916143d59190600160401b900460ff16615609565b6001600160401b0316101561440e57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161077e565b8581604001818151614420919061559d565b6001600160401b03169052506040810180518691906144409083906159fe565b6001600160401b03169052506001840154604082015160649161446e91600160401b90910460ff1690615609565b6001600160401b031610156144a7576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161077e565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614519612035565b5f848152600582016020526040902060020180549192509060089061454d90600160401b90046001600160401b0316615c02565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61458c6001600160a01b03841683614927565b905080515f141580156145b05750808060200190518101906145ae9190615c1d565b155b1561131d57604051635274afe760e01b81526001600160a01b038416600482015260240161077e565b6145e1614047565b6145e9614934565b61410c8161493c565b6145fa614047565b614090614a20565b61460a614047565b5f614613612090565b905061ffff8616158061462b575061271061ffff8716115b1561464f57604051635f12e6c360e11b815261ffff8716600482015260240161077e565b878911156146735760405163222d164360e21b8152600481018a905260240161077e565b60ff851615806146865750600a60ff8616115b156146a95760405163170db35960e31b815260ff8616600482015260240161077e565b6146b161342b565b6001600160401b0316876001600160401b031610156146ed576040516202a06d60e11b81526001600160401b038816600482015260240161077e565b835f0361470d5760405163a733007160e01b815260040160405180910390fd5b8161472e57604051632f6bd1db60e01b81526004810183905260240161077e565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa15801561480a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061482e919061533b565b90506148456001600160a01b038616853086614a28565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614889573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148ad919061533b565b90508181116149135760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161077e565b61491d8282615a1e565b9695505050505050565b6060612fdc83835f614a61565b614090614047565b614944614047565b5f61494d612035565b82358155905060146149656060840160408501615be2565b60ff161180614984575061497f6060830160408401615be2565b60ff16155b156149b8576149996060830160408401615be2565b604051634a59bbff60e11b815260ff909116600482015260240161077e565b6149c86060830160408401615be2565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149f96040830160208401615025565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612285614047565b6040516001600160a01b0384811660248301528381166044830152606482018390526108819186918216906323b872dd90608401614015565b606081471015614a865760405163cd78605960e01b815230600482015260240161077e565b5f80856001600160a01b03168486604051614aa19190615479565b5f6040518083038185875af1925050503d805f8114614adb576040519150601f19603f3d011682016040523d82523d5f602084013e614ae0565b606091505b509150915061491d868383606082614b0057614afb82614b47565b612fdc565b8151158015614b1757506001600160a01b0384163b155b15614b4057604051639996b31560e01b81526001600160a01b038516600482015260240161077e565b5080612fdc565b805115614b575780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614b7c90615270565b5f825580601f10614b8b575050565b601f0160209004905f5260205f209081019061410c9190614bec565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614c00575f8155600101614bed565b5090565b5f60208284031215614c14575f80fd5b5035919050565b803563ffffffff81168114611853575f80fd5b5f8060408385031215614c3f575f80fd5b82359150614c4f60208401614c1b565b90509250929050565b801515811461410c575f80fd5b5f805f60608486031215614c77575f80fd5b833592506020840135614c8981614c58565b9150614c9760408501614c1b565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715614cd657614cd6614ca0565b60405290565b604051606081016001600160401b0381118282101715614cd657614cd6614ca0565b604051601f8201601f191681016001600160401b0381118282101715614d2657614d26614ca0565b604052919050565b5f6001600160401b03821115614d4657614d46614ca0565b50601f01601f191660200190565b5f82601f830112614d63575f80fd5b8135614d76614d7182614d2e565b614cfe565b818152846020838601011115614d8a575f80fd5b816020850160208301375f918101602001919091529392505050565b6001600160401b038116811461410c575f80fd5b803561185381614da6565b6001600160a01b038116811461410c575f80fd5b5f60408284031215614de9575f80fd5b614df1614cb4565b9050614dfc82614c1b565b81526020808301356001600160401b0380821115614e18575f80fd5b818501915085601f830112614e2b575f80fd5b813581811115614e3d57614e3d614ca0565b8060051b9150614e4e848301614cfe565b8181529183018401918481019088841115614e67575f80fd5b938501935b83851015614e915784359250614e8183614dc5565b8282529385019390850190614e6c565b808688015250505050505092915050565b803561ffff81168114611853575f80fd5b5f805f805f805f80610100898b031215614ecb575f80fd5b88356001600160401b0380821115614ee1575f80fd5b614eed8c838d01614d54565b995060208b0135915080821115614f02575f80fd5b614f0e8c838d01614d54565b9850614f1c60408c01614dba565b975060608b0135915080821115614f31575f80fd5b614f3d8c838d01614dd9565b965060808b0135915080821115614f52575f80fd5b50614f5f8b828c01614dd9565b945050614f6e60a08a01614ea2565b9250614f7c60c08a01614dba565b915060e089013590509295985092959890939650565b5f8060408385031215614fa3575f80fd5b82356001600160401b03811115614fb8575f80fd5b830160808186031215614fc9575f80fd5b9150614c4f60208401614c1b565b5f805f8060808587031215614fea575f80fd5b843593506020850135614ffc81614c58565b925061500a60408601614c1b565b9150606085013561501a81614dc5565b939692955090935050565b5f60208284031215615035575f80fd5b8135612fdc81614da6565b5f8060408385031215615051575f80fd5b50508035926020909101359150565b5f8060408385031215615071575f80fd5b82359150602083013561508381614dc5565b809150509250929050565b5f6020828403121561509e575f80fd5b612fdc82614c1b565b5f808284036101808112156150ba575f80fd5b610160808212156150c9575f80fd5b849350830135905061508381614dc5565b634e487b7160e01b5f52602160045260245ffd5b600681106150fe576150fe6150da565b9052565b5f5b8381101561511c578181015183820152602001615104565b50505f910152565b5f815180845261513b816020860160208601615102565b601f01601f19169290920160200192915050565b602081526151616020820183516150ee565b5f602083015161010080604085015261517e610120850183615124565b915060408501516001600160401b038082166060870152806060880151166080870152505060808501516151bd60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215615216575f80fd5b82356001600160401b038082111561522c575f80fd5b818501915085601f83011261523f575f80fd5b81358181111561524d575f80fd5b86602082850101111561525e575f80fd5b60209290920196919550909350505050565b600181811c9082168061528457607f821691505b6020821081036152a257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020810161137082846150ee565b5f82601f8301126152c5575f80fd5b81516152d3614d7182614d2e565b8181528460208386010111156152e7575f80fd5b6124d7826020830160208701615102565b5f60208284031215615308575f80fd5b81516001600160401b0381111561531d575f80fd5b6124d7848285016152b6565b602081525f612fdc6020830184615124565b5f6020828403121561534b575f80fd5b5051919050565b6020810160048310615366576153666150da565b91905290565b5f6020828403121561537c575f80fd5b8135612fdc81614dc5565b5f808335601e1984360301811261539c575f80fd5b8301803591506001600160401b038211156153b5575f80fd5b6020019150600581901b3603821315613d7d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126153f4575f80fd5b9190910192915050565b5f6060823603121561540e575f80fd5b615416614cdc565b82356001600160401b038082111561542c575f80fd5b61543836838701614d54565b8352602085013591508082111561544d575f80fd5b5061545a36828601614d54565b602083015250604083013561546e81614da6565b604082015292915050565b5f82516153f4818460208701615102565b601f82111561131d57805f5260205f20601f840160051c810160208510156154af5750805b601f840160051c820191505b8181101561128a575f81556001016154bb565b81516001600160401b038111156154e7576154e7614ca0565b6154fb816154f58454615270565b8461548a565b602080601f83116001811461552e575f84156155175750858301515b5f19600386901b1c1916600185901b1785556114b5565b5f85815260208120601f198616915b8281101561555c5788860151825594840194600190910190840161553d565b508582101561557957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561277657612776615589565b604081525f6155cf6040830185615124565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036155ff576155ff615589565b6001019392505050565b6001600160401b0381811683821602808216919082811461562c5761562c615589565b505092915050565b5f808335601e19843603018112615649575f80fd5b83016020810192503590506001600160401b03811115615667575f80fd5b803603821315613d7d575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561575257848303601f19018952813536889003605e190181126156d9575f80fd5b870160606156e78280615634565b8287526156f78388018284615675565b9250505061570786830183615634565b86830388880152615719838284615675565b92505050604080830135925061572e83614da6565b6001600160401b0392909216949091019390935297830197908301906001016156b4565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561578381614dc5565b6001600160a01b031660608381019190915283013536849003601e190181126157aa575f80fd5b83016020810190356001600160401b038111156157c5575f80fd5b8060051b36038213156157d6575f80fd5b6080808501526157ea60a08501828461569d565b95945050505050565b5f8261580d57634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761137057611370615589565b5f806040838503121561583a575f80fd5b82519150602083015161508381614c58565b5f815461585881615270565b808552602060018381168015615875576001811461588f576158ba565b60ff1985168884015283151560051b8801830195506158ba565b865f52825f205f5b858110156158b25781548a8201860152908301908401615897565b890184019650505b505050505092915050565b604081525f6155cf604083018561584c565b602081525f612fdc602083018461584c565b5f805f606084860312156158fb575f80fd5b83519250602084015161590d81614da6565b604085015190925061591e81614da6565b809150509250925092565b818382375f9101908152919050565b8082018082111561137057611370615589565b5f806040838503121561595c575f80fd5b82516001600160401b0380821115615972575f80fd5b9084019060608287031215615985575f80fd5b61598d614cdc565b82518152602083015161599f81614dc5565b60208201526040830151828111156159b5575f80fd5b6159c1888286016152b6565b604083015250809450505050602083015161508381614c58565b5f80604083850312156159ec575f80fd5b82519150602083015161508381614da6565b6001600160401b0382811682821603908082111561277657612776615589565b8181038181111561137057611370615589565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615a8c5784516001600160a01b03168252938301936001929092019190830190615a63565b509695505050505050565b60208152815160208201525f602083015160e06040840152615abd610100840182615124565b90506040840151601f1980858403016060860152615adb8383615124565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b0b8383615a31565b925060a08601519150808584030160c086015250615b298282615a31565b91505060c0840151615b4660e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b5f575f80fd5b8251915060208301516001600160401b03811115615b7b575f80fd5b615b87858286016152b6565b9150509250929050565b608081525f615ba36080830187615124565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f60208284031215615bd9575f80fd5b612fdc82614ea2565b5f60208284031215615bf2575f80fd5b813560ff81168114612fdc575f80fd5b5f6001600160401b038083168181036155ff576155ff615589565b5f60208284031215615c2d575f80fd5b8151612fdc81614c5856fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122095de6f7000b95d49c02d7260b5f614bf3c65570b0bf756eb18f568c7a03bd0b964736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -951,25 +942,25 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Comp return _ERC20TokenStakingManager.Contract.CompleteDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "completeEndDelegation", delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "completeDelegatorRemoval", delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.CompleteEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteDelegatorRemoval(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteDelegatorRemoval(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.CompleteEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteDelegatorRemoval(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteDelegatorRemoval(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. @@ -1035,88 +1026,88 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Comp return _ERC20TokenStakingManager.Contract.CompleteValidatorWeightUpdate(&_ERC20TokenStakingManager.TransactOpts, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation", delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitiateDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitiateDelegatorRemoval", delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateDelegatorRemoval(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateDelegatorRemoval(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitiateDelegatorRemoval0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitiateDelegatorRemoval0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateDelegatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateDelegatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation", validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitiateValidatorRemoval", validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateValidatorRemoval(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateValidatorRemoval(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation0", validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitiateValidatorRemoval0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitiateValidatorRemoval0", validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateValidatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitiateValidatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } // Initialize is a paid mutator transaction binding the contract method 0x9e478eea. @@ -1140,151 +1131,151 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Init return _ERC20TokenStakingManager.Contract.Initialize(&_ERC20TokenStakingManager.TransactOpts, settings, token) } -// InitializeDelegatorRegistration is a paid mutator transaction binding the contract method 0x9e1bc4ef. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeDelegatorRegistration(bytes32 validationID, uint256 delegationAmount) returns(bytes32) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeDelegatorRegistration(opts *bind.TransactOpts, validationID [32]byte, delegationAmount *big.Int) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeDelegatorRegistration", validationID, delegationAmount) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messageIndex) } -// InitializeDelegatorRegistration is a paid mutator transaction binding the contract method 0x9e1bc4ef. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeDelegatorRegistration(bytes32 validationID, uint256 delegationAmount) returns(bytes32) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeDelegatorRegistration(validationID [32]byte, delegationAmount *big.Int) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, validationID, delegationAmount) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeValidatorSet(&_ERC20TokenStakingManager.TransactOpts, conversionData, messageIndex) } -// InitializeDelegatorRegistration is a paid mutator transaction binding the contract method 0x9e1bc4ef. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeDelegatorRegistration(bytes32 validationID, uint256 delegationAmount) returns(bytes32) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeDelegatorRegistration(validationID [32]byte, delegationAmount *big.Int) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, validationID, delegationAmount) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeValidatorSet(&_ERC20TokenStakingManager.TransactOpts, conversionData, messageIndex) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRegistration is a paid mutator transaction binding the contract method 0x739b4eff. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndDelegation", delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRegistration(bytes32 validationID, uint256 delegationAmount) returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitiateDelegatorRegistration(opts *bind.TransactOpts, validationID [32]byte, delegationAmount *big.Int) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initiateDelegatorRegistration", validationID, delegationAmount) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRegistration is a paid mutator transaction binding the contract method 0x739b4eff. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRegistration(bytes32 validationID, uint256 delegationAmount) returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitiateDelegatorRegistration(validationID [32]byte, delegationAmount *big.Int) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, validationID, delegationAmount) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRegistration is a paid mutator transaction binding the contract method 0x739b4eff. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRegistration(bytes32 validationID, uint256 delegationAmount) returns(bytes32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitiateDelegatorRegistration(validationID [32]byte, delegationAmount *big.Int) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, validationID, delegationAmount) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitiateDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initiateDelegatorRemoval", delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateDelegatorRemoval(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateDelegatorRemoval(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitiateDelegatorRemoval0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initiateDelegatorRemoval0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateDelegatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateDelegatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0x1af1872b. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndValidation0", validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount) returns(bytes32 validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitiateValidatorRegistration(opts *bind.TransactOpts, nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, delegationFeeBips uint16, minStakeDuration uint64, stakeAmount *big.Int) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initiateValidatorRegistration", nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, delegationFeeBips, minStakeDuration, stakeAmount) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0x1af1872b. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount) returns(bytes32 validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitiateValidatorRegistration(nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, delegationFeeBips uint16, minStakeDuration uint64, stakeAmount *big.Int) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateValidatorRegistration(&_ERC20TokenStakingManager.TransactOpts, nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, delegationFeeBips, minStakeDuration, stakeAmount) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0x1af1872b. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount) returns(bytes32 validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitiateValidatorRegistration(nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, delegationFeeBips uint16, minStakeDuration uint64, stakeAmount *big.Int) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateValidatorRegistration(&_ERC20TokenStakingManager.TransactOpts, nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, delegationFeeBips, minStakeDuration, stakeAmount) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x4bee0040. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount) returns(bytes32 validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeValidatorRegistration(opts *bind.TransactOpts, registrationInput ValidatorRegistrationInput, delegationFeeBips uint16, minStakeDuration uint64, stakeAmount *big.Int) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeValidatorRegistration", registrationInput, delegationFeeBips, minStakeDuration, stakeAmount) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initiateValidatorRemoval", validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x4bee0040. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount) returns(bytes32 validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeValidatorRegistration(registrationInput ValidatorRegistrationInput, delegationFeeBips uint16, minStakeDuration uint64, stakeAmount *big.Int) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeValidatorRegistration(&_ERC20TokenStakingManager.TransactOpts, registrationInput, delegationFeeBips, minStakeDuration, stakeAmount) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateValidatorRemoval(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x4bee0040. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration, uint256 stakeAmount) returns(bytes32 validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeValidatorRegistration(registrationInput ValidatorRegistrationInput, delegationFeeBips uint16, minStakeDuration uint64, stakeAmount *big.Int) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeValidatorRegistration(&_ERC20TokenStakingManager.TransactOpts, registrationInput, delegationFeeBips, minStakeDuration, stakeAmount) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateValidatorRemoval(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitiateValidatorRemoval0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initiateValidatorRemoval0", validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeValidatorSet(&_ERC20TokenStakingManager.TransactOpts, conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateValidatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeValidatorSet(&_ERC20TokenStakingManager.TransactOpts, conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitiateValidatorRemoval0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } // ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. @@ -1329,25 +1320,25 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Rese return _ERC20TokenStakingManager.Contract.ResendRegisterValidatorMessage(&_ERC20TokenStakingManager.TransactOpts, validationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ResendUpdateDelegation(opts *bind.TransactOpts, delegationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "resendUpdateDelegation", delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ResendUpdateDelegator(opts *bind.TransactOpts, delegationID [32]byte) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "resendUpdateDelegator", delegationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ResendUpdateDelegation(delegationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ResendUpdateDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ResendUpdateDelegator(delegationID [32]byte) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ResendUpdateDelegator(&_ERC20TokenStakingManager.TransactOpts, delegationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ResendUpdateDelegation(delegationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.ResendUpdateDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ResendUpdateDelegator(delegationID [32]byte) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ResendUpdateDelegator(&_ERC20TokenStakingManager.TransactOpts, delegationID) } // SubmitUptimeProof is a paid mutator transaction binding the contract method 0x25e1c776. @@ -1371,9 +1362,9 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Subm return _ERC20TokenStakingManager.Contract.SubmitUptimeProof(&_ERC20TokenStakingManager.TransactOpts, validationID, messageIndex) } -// ERC20TokenStakingManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerCompletedValidatorRegistrationIterator struct { - Event *ERC20TokenStakingManagerCompletedValidatorRegistration // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator is returned from FilterCompletedDelegatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedDelegatorRegistration events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator struct { + Event *ERC20TokenStakingManagerCompletedDelegatorRegistration // 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 @@ -1387,7 +1378,7 @@ type ERC20TokenStakingManagerCompletedValidatorRegistrationIterator struct { // 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 *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Next() bool { +func (it *ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1396,7 +1387,7 @@ func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Next() if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerCompletedValidatorRegistration) + it.Event = new(ERC20TokenStakingManagerCompletedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1411,7 +1402,7 @@ func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Next() // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerCompletedValidatorRegistration) + it.Event = new(ERC20TokenStakingManagerCompletedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1427,53 +1418,61 @@ func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Next() } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerCompletedValidatorRegistration struct { +// ERC20TokenStakingManagerCompletedDelegatorRegistration represents a CompletedDelegatorRegistration event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedDelegatorRegistration struct { + DelegationID [32]byte ValidationID [32]byte - NodeID []byte - Weight uint64 + StartTime *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// FilterCompletedDelegatorRegistration is a free log retrieval operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorRegistrationIterator, error) { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedDelegatorRegistration(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedDelegatorRegistration", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerCompletedValidatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedDelegatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedDelegatorRegistration", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// WatchCompletedDelegatorRegistration is a free log subscription operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedDelegatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedDelegatorRegistration, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedDelegatorRegistration", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1483,8 +1482,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchComplete select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerCompletedValidatorRegistration) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { + event := new(ERC20TokenStakingManagerCompletedDelegatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRegistration", log); err != nil { return err } event.Raw = log @@ -1505,21 +1504,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchComplete }), nil } -// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// ParseCompletedDelegatorRegistration is a log parse operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorRegistration, error) { - event := new(ERC20TokenStakingManagerCompletedValidatorRegistration) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedDelegatorRegistration(log types.Log) (*ERC20TokenStakingManagerCompletedDelegatorRegistration, error) { + event := new(ERC20TokenStakingManagerCompletedDelegatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerCompletedValidatorRemovalIterator struct { - Event *ERC20TokenStakingManagerCompletedValidatorRemoval // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerCompletedDelegatorRemovalIterator is returned from FilterCompletedDelegatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedDelegatorRemoval events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedDelegatorRemovalIterator struct { + Event *ERC20TokenStakingManagerCompletedDelegatorRemoval // 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 @@ -1533,7 +1532,7 @@ type ERC20TokenStakingManagerCompletedValidatorRemovalIterator struct { // 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 *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Next() bool { +func (it *ERC20TokenStakingManagerCompletedDelegatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1542,7 +1541,7 @@ func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Next() bool if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerCompletedValidatorRemoval) + it.Event = new(ERC20TokenStakingManagerCompletedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1557,7 +1556,7 @@ func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Next() bool // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerCompletedValidatorRemoval) + it.Event = new(ERC20TokenStakingManagerCompletedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1573,51 +1572,62 @@ func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Next() bool } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedDelegatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedDelegatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerCompletedValidatorRemoval struct { +// ERC20TokenStakingManagerCompletedDelegatorRemoval represents a CompletedDelegatorRemoval event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedDelegatorRemoval struct { + DelegationID [32]byte ValidationID [32]byte + Rewards *big.Int + Fees *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// FilterCompletedDelegatorRemoval is a free log retrieval operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorRemovalIterator, error) { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedDelegatorRemoval(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedDelegatorRemovalIterator, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerCompletedValidatorRemovalIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedDelegatorRemovalIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedDelegatorRemoval", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// WatchCompletedDelegatorRemoval is a free log subscription operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedDelegatorRemoval(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedDelegatorRemoval, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1627,8 +1637,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchComplete select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerCompletedValidatorRemoval) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { + event := new(ERC20TokenStakingManagerCompletedDelegatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRemoval", log); err != nil { return err } event.Raw = log @@ -1649,21 +1659,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchComplete }), nil } -// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// ParseCompletedDelegatorRemoval is a log parse operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorRemoval, error) { - event := new(ERC20TokenStakingManagerCompletedValidatorRemoval) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedDelegatorRemoval(log types.Log) (*ERC20TokenStakingManagerCompletedDelegatorRemoval, error) { + event := new(ERC20TokenStakingManagerCompletedDelegatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator struct { - Event *ERC20TokenStakingManagerCompletedValidatorWeightUpdate // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRegistrationIterator struct { + Event *ERC20TokenStakingManagerCompletedValidatorRegistration // 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 @@ -1677,7 +1687,7 @@ type ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator struct { // 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 *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() bool { +func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1686,7 +1696,7 @@ func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1701,7 +1711,7 @@ func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1717,53 +1727,53 @@ func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerCompletedValidatorWeightUpdate struct { +// ERC20TokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRegistration struct { ValidationID [32]byte - Nonce uint64 + NodeID []byte Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedValidatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } @@ -1773,8 +1783,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchComplete select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { + event := new(ERC20TokenStakingManagerCompletedValidatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -1795,21 +1805,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchComplete }), nil } -// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorWeightUpdate, error) { - event := new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorRegistration, error) { + event := new(ERC20TokenStakingManagerCompletedValidatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerDelegationEndedIterator is returned from FilterDelegationEnded and is used to iterate over the raw logs and unpacked data for DelegationEnded events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegationEndedIterator struct { - Event *ERC20TokenStakingManagerDelegationEnded // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRemovalIterator struct { + Event *ERC20TokenStakingManagerCompletedValidatorRemoval // 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 @@ -1823,7 +1833,7 @@ type ERC20TokenStakingManagerDelegationEndedIterator struct { // 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 *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { +func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1832,7 +1842,7 @@ func (it *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegationEnded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1847,7 +1857,7 @@ func (it *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegationEnded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1863,62 +1873,51 @@ func (it *ERC20TokenStakingManagerDelegationEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegationEndedIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegationEndedIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegationEnded represents a DelegationEnded event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegationEnded struct { - DelegationID [32]byte +// ERC20TokenStakingManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorRemoval struct { ValidationID [32]byte - Rewards *big.Int - Fees *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegationEnded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegationEndedIterator, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorRemovalIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegationEndedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedValidatorRemovalIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegationEnded(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegationEnded, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -1928,8 +1927,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegati select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerDelegationEnded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { + event := new(ERC20TokenStakingManagerCompletedValidatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -1950,21 +1949,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegati }), nil } -// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegationEnded(log types.Log) (*ERC20TokenStakingManagerDelegationEnded, error) { - event := new(ERC20TokenStakingManagerDelegationEnded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorRemoval, error) { + event := new(ERC20TokenStakingManagerCompletedValidatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerDelegatorAddedIterator is returned from FilterDelegatorAdded and is used to iterate over the raw logs and unpacked data for DelegatorAdded events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorAddedIterator struct { - Event *ERC20TokenStakingManagerDelegatorAdded // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator struct { + Event *ERC20TokenStakingManagerCompletedValidatorWeightUpdate // 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 @@ -1978,7 +1977,7 @@ type ERC20TokenStakingManagerDelegatorAddedIterator struct { // 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 *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { +func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1987,7 +1986,7 @@ func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorAdded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2002,7 +2001,7 @@ func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorAdded) + it.Event = new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2018,73 +2017,53 @@ func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Error() error { +func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegatorAddedIterator) Close() error { +func (it *ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegatorAdded represents a DelegatorAdded event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorAdded struct { - DelegationID [32]byte - ValidationID [32]byte - DelegatorAddress common.Address - Nonce uint64 - ValidatorWeight uint64 - DelegatorWeight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerCompletedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorAdded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*ERC20TokenStakingManagerDelegatorAddedIterator, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegatorAddedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerCompletedValidatorWeightUpdateIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegatorAdded(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegatorAdded, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -2094,8 +2073,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerDelegatorAdded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { + event := new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -2116,21 +2095,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato }), nil } -// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegatorAdded(log types.Log) (*ERC20TokenStakingManagerDelegatorAdded, error) { - event := new(ERC20TokenStakingManagerDelegatorAdded) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorWeightUpdate, error) { + event := new(ERC20TokenStakingManagerCompletedValidatorWeightUpdate) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerDelegatorRegisteredIterator is returned from FilterDelegatorRegistered and is used to iterate over the raw logs and unpacked data for DelegatorRegistered events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRegisteredIterator struct { - Event *ERC20TokenStakingManagerDelegatorRegistered // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitializedIterator struct { + Event *ERC20TokenStakingManagerInitialized // 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 @@ -2144,7 +2123,7 @@ type ERC20TokenStakingManagerDelegatorRegisteredIterator struct { // 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 *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { +func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2153,7 +2132,7 @@ func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRegistered) + it.Event = new(ERC20TokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2168,7 +2147,7 @@ func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRegistered) + it.Event = new(ERC20TokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2184,61 +2163,41 @@ func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Error() error { +func (it *ERC20TokenStakingManagerInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegatorRegisteredIterator) Close() error { +func (it *ERC20TokenStakingManagerInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegatorRegistered represents a DelegatorRegistered event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRegistered struct { - DelegationID [32]byte - ValidationID [32]byte - StartTime *big.Int - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerInitialized represents a Initialized event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorRegistered(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegatorRegisteredIterator, error) { - - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } +// Solidity: event Initialized(uint64 version) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC20TokenStakingManagerInitializedIterator, error) { - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "Initialized") if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegatorRegisteredIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil } -// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegatorRegistered(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegatorRegistered, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { - - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } +// Solidity: event Initialized(uint64 version) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitialized) (event.Subscription, error) { - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "Initialized") if err != nil { return nil, err } @@ -2248,8 +2207,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerDelegatorRegistered) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { + event := new(ERC20TokenStakingManagerInitialized) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { return err } event.Raw = log @@ -2270,21 +2229,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato }), nil } -// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegatorRegistered(log types.Log) (*ERC20TokenStakingManagerDelegatorRegistered, error) { - event := new(ERC20TokenStakingManagerDelegatorRegistered) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { +// Solidity: event Initialized(uint64 version) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitialized(log types.Log) (*ERC20TokenStakingManagerInitialized, error) { + event := new(ERC20TokenStakingManagerInitialized) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerDelegatorRemovalInitializedIterator is returned from FilterDelegatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for DelegatorRemovalInitialized events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRemovalInitializedIterator struct { - Event *ERC20TokenStakingManagerDelegatorRemovalInitialized // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator is returned from FilterInitiatedDelegatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedDelegatorRegistration events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator struct { + Event *ERC20TokenStakingManagerInitiatedDelegatorRegistration // 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 @@ -2298,7 +2257,7 @@ type ERC20TokenStakingManagerDelegatorRemovalInitializedIterator struct { // 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 *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bool { +func (it *ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2307,7 +2266,7 @@ func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bo if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(ERC20TokenStakingManagerInitiatedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2322,7 +2281,7 @@ func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(ERC20TokenStakingManagerInitiatedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2338,28 +2297,33 @@ func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Next() bo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Error() error { +func (it *ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerDelegatorRemovalInitializedIterator) Close() error { +func (it *ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerDelegatorRemovalInitialized struct { - DelegationID [32]byte - ValidationID [32]byte - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerInitiatedDelegatorRegistration represents a InitiatedDelegatorRegistration event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedDelegatorRegistration struct { + DelegationID [32]byte + ValidationID [32]byte + DelegatorAddress common.Address + Nonce uint64 + ValidatorWeight uint64 + DelegatorWeight uint64 + SetWeightMessageID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// FilterInitiatedDelegatorRegistration is a free log retrieval operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerDelegatorRemovalInitializedIterator, error) { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitiatedDelegatorRegistration(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -2369,18 +2333,22 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterDelegat for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) + } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "InitiatedDelegatorRegistration", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerDelegatorRemovalInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerInitiatedDelegatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "InitiatedDelegatorRegistration", logs: logs, sub: sub}, nil } -// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// WatchInitiatedDelegatorRegistration is a free log subscription operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerDelegatorRemovalInitialized, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiatedDelegatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitiatedDelegatorRegistration, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -2390,8 +2358,12 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) + } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "InitiatedDelegatorRegistration", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } @@ -2401,8 +2373,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerDelegatorRemovalInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { + event := new(ERC20TokenStakingManagerInitiatedDelegatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRegistration", log); err != nil { return err } event.Raw = log @@ -2423,21 +2395,21 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchDelegato }), nil } -// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// ParseInitiatedDelegatorRegistration is a log parse operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseDelegatorRemovalInitialized(log types.Log) (*ERC20TokenStakingManagerDelegatorRemovalInitialized, error) { - event := new(ERC20TokenStakingManagerDelegatorRemovalInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitiatedDelegatorRegistration(log types.Log) (*ERC20TokenStakingManagerInitiatedDelegatorRegistration, error) { + event := new(ERC20TokenStakingManagerInitiatedDelegatorRegistration) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ERC20TokenStakingManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerInitializedIterator struct { - Event *ERC20TokenStakingManagerInitialized // Event containing the contract specifics and raw log +// ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator is returned from FilterInitiatedDelegatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedDelegatorRemoval events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator struct { + Event *ERC20TokenStakingManagerInitiatedDelegatorRemoval // 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 @@ -2451,7 +2423,7 @@ type ERC20TokenStakingManagerInitializedIterator struct { // 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 *ERC20TokenStakingManagerInitializedIterator) Next() bool { +func (it *ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2460,7 +2432,7 @@ func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerInitialized) + it.Event = new(ERC20TokenStakingManagerInitiatedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2475,7 +2447,7 @@ func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ERC20TokenStakingManagerInitialized) + it.Event = new(ERC20TokenStakingManagerInitiatedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2491,41 +2463,60 @@ func (it *ERC20TokenStakingManagerInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ERC20TokenStakingManagerInitializedIterator) Error() error { +func (it *ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ERC20TokenStakingManagerInitializedIterator) Close() error { +func (it *ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// ERC20TokenStakingManagerInitialized represents a Initialized event raised by the ERC20TokenStakingManager contract. -type ERC20TokenStakingManagerInitialized struct { - Version uint64 - Raw types.Log // Blockchain specific contextual infos +// ERC20TokenStakingManagerInitiatedDelegatorRemoval represents a InitiatedDelegatorRemoval event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerInitiatedDelegatorRemoval struct { + DelegationID [32]byte + ValidationID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// FilterInitiatedDelegatorRemoval is a free log retrieval operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event Initialized(uint64 version) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC20TokenStakingManagerInitializedIterator, error) { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitiatedDelegatorRemoval(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator, error) { - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "Initialized") + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "InitiatedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &ERC20TokenStakingManagerInitializedIterator{contract: _ERC20TokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &ERC20TokenStakingManagerInitiatedDelegatorRemovalIterator{contract: _ERC20TokenStakingManager.contract, event: "InitiatedDelegatorRemoval", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// WatchInitiatedDelegatorRemoval is a free log subscription operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event Initialized(uint64 version) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitialized) (event.Subscription, error) { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiatedDelegatorRemoval(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitiatedDelegatorRemoval, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "Initialized") + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "InitiatedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -2535,8 +2526,8 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiali select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ERC20TokenStakingManagerInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(ERC20TokenStakingManagerInitiatedDelegatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRemoval", log); err != nil { return err } event.Raw = log @@ -2557,12 +2548,12 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiali }), nil } -// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// ParseInitiatedDelegatorRemoval is a log parse operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event Initialized(uint64 version) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitialized(log types.Log) (*ERC20TokenStakingManagerInitialized, error) { - event := new(ERC20TokenStakingManagerInitialized) - if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitiatedDelegatorRemoval(log types.Log) (*ERC20TokenStakingManagerInitiatedDelegatorRemoval, error) { + event := new(ERC20TokenStakingManagerInitiatedDelegatorRemoval) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRemoval", log); err != nil { return nil, err } event.Raw = log diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index 0d5175691..18a7469aa 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -93,19 +93,10 @@ type ValidatorMessagesValidationPeriod struct { Weight uint64 } -// ValidatorRegistrationInput is an auto generated low-level Go binding around an user-defined struct. -type ValidatorRegistrationInput struct { - NodeID []byte - BlsPublicKey []byte - RegistrationExpiry uint64 - RemainingBalanceOwner PChainOwner - DisableOwner PChainOwner -} - // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220fefa8a178e8407d7ad158aabc54689418e8ddd5f996bf78177d3f37d09d805b164736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initiateDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initiateValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615b51380380615b5183398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a048061014d5f395ff3fe608060405260043610610249575f3560e01c80638af5499e11610134578063bb0b1938116100b3578063cc71bbba11610078578063cc71bbba146106b7578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063bb0b19381461062a578063bc5fbfec1461063e578063bee0a03f14610671578063c974d1b614610690578063cacd9755146106a4575f80fd5b8063a9778a7a116100f9578063a9778a7a1461041b578063aac80c391461059f578063afb98096146105be578063b2c1712e146105f1578063b771b3bc14610610575f80fd5b80638af5499e146105045780638ef34c981461052357806393e24598146105425780639681d94014610561578063a3a65e4814610580575f80fd5b80632aa56638116101cb5780635dc1f535116101905780635dc1f5351461046257806360305d621461047657806360ad77841461049f57806362065856146104be578063732214f8146104dd5780638280a25a146104f0575f80fd5b80632aa56638146103935780632e2194d8146103b2578063329c3e12146103e957806335455ded1461041b5780634b396bcc14610443575f80fd5b806320d91b7a1161021157806320d91b7a146102f6578063245dafcb1461031557806325e1c77614610334578063264dc6031461035357806327bf60cd14610374575f80fd5b80630322ed981461024d5780630ba512d11461026e578063134096451461028d578063151d30d1146102ac57806316679564146102d7575b5f80fd5b348015610258575f80fd5b5061026c6102673660046149e1565b610792565b005b348015610279575f80fd5b5061026c6102883660046149f8565b610a25565b348015610298575f80fd5b5061026c6102a7366004614a22565b610b02565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614a59565b610cf5565b348015610301575f80fd5b5061026c610310366004614a94565b610d01565b348015610320575f80fd5b5061026c61032f3660046149e1565b61126f565b34801561033f575f80fd5b5061026c61034e366004614a22565b6114cf565b610366610361366004614cec565b611543565b6040519081526020016102ce565b34801561037f575f80fd5b5061026c61038e366004614a59565b61157f565b34801561039e575f80fd5b5061026c6103ad366004614a59565b61158b565b3480156103bd575f80fd5b506103d16103cc3660046149e1565b61159c565b6040516001600160401b0390911681526020016102ce565b3480156103f4575f80fd5b506104036001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b348015610426575f80fd5b5061043061271081565b60405161ffff90911681526020016102ce565b34801561044e575f80fd5b5061026c61045d366004614dc1565b6115f0565b34801561046d575f80fd5b506103666115fc565b348015610481575f80fd5b5061048a601481565b60405163ffffffff90911681526020016102ce565b3480156104aa575f80fd5b5061026c6104b9366004614a22565b61160b565b3480156104c9575f80fd5b506103666104d8366004614e0f565b61185c565b3480156104e8575f80fd5b506103665f81565b3480156104fb575f80fd5b506102c0603081565b34801561050f575f80fd5b5061026c61051e366004614dc1565b61187c565b34801561052e575f80fd5b5061026c61053d366004614e2a565b611888565b34801561054d575f80fd5b5061026c61055c3660046149e1565b611939565b34801561056c575f80fd5b5061036661057b366004614e58565b6119cd565b34801561058b575f80fd5b5061036661059a366004614e58565b611aa6565b3480156105aa575f80fd5b5061026c6105b9366004614dc1565b611ca1565b3480156105c9575f80fd5b506103667f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b3480156105fc575f80fd5b5061026c61060b366004614a59565b611cad565b34801561061b575f80fd5b506104036005600160991b0181565b348015610635575f80fd5b506103d1611cb9565b348015610649575f80fd5b506103667fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561067c575f80fd5b5061026c61068b3660046149e1565b611cdb565b34801561069b575f80fd5b506102c0601481565b6103666106b23660046149e1565b611df7565b3480156106c2575f80fd5b5061026c6106d1366004614dc1565b611e23565b3480156106e1575f80fd5b506106f56106f0366004614e58565b611e2f565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c3660046149e1565b611fb2565b6040516102ce9190614ee6565b348015610749575f80fd5b506103d16202a30081565b34801561075f575f80fd5b5061026c61076e366004614e2a565b612101565b34801561077e575f80fd5b5061036661078d366004614f9c565b612198565b5f61079b6121d0565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107d5576107d5614e71565b60058111156107e6576107e6614e71565b81526020016001820180546107fa90615007565b80601f016020809104026020016040519081016040528092919081815260200182805461082690615007565b80156108715780601f1061084857610100808354040283529160200191610871565b820191905f5260205f20905b81548152906001019060200180831161085457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108e9576108e9614e71565b14610925575f8381526005830160205260409081902054905163170cc93360e21b815261091c9160ff1690600401615039565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561099c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109c39190810190615089565b6040518263ffffffff1660e01b81526004016109df91906150ba565b6020604051808303815f875af11580156109fb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a1f91906150cc565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a6e575080546001600160401b03808416911610155b15610a8c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ab6836121f4565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610b0a612208565b5f610b1361223f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610b4c57610b4c614e71565b6003811115610b5d57610b5d614e71565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529050600381516003811115610bd657610bd6614e71565b14610bf7578051604051633b0d540d60e21b815261091c91906004016150e3565b5f610c058260400151611fb2565b90506004610c168360400151611fb2565b516005811115610c2857610c28614e71565b14158015610c4f57508160c001516001600160401b031681608001516001600160401b0316105b15610ccf575f80610c5f86611e2f565b9150915081846040015114610c8a5760405163089938b360e11b81526004810183905260240161091c565b806001600160401b03168460c001516001600160401b03161115610ccc57604051632e19bc2d60e11b81526001600160401b038216600482015260240161091c565b50505b610cd885612263565b505050610cf160015f805160206159af83398151915255565b5050565b610a1f8383835f612447565b5f610d0a6121d0565b600781015490915060ff1615610d3357604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d76573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9a91906150cc565b836020013514610dc3576040516372b0a7e760e11b81526020840135600482015260240161091c565b30610dd460608501604086016150fd565b6001600160a01b031614610e1757610df260608401604085016150fd565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161091c565b5f610e256060850185615118565b905090505f805b828163ffffffff161015611065575f610e486060880188615118565b8363ffffffff16818110610e5e57610e5e61515d565b9050602002810190610e709190615171565b610e799061518f565b80516040519192505f916006880191610e919161520a565b90815260200160405180910390205414610ec157805160405163a41f772f60e01b815261091c91906004016150ba565b5f6002885f013584604051602001610ef092919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610f0a9161520a565b602060405180830381855afa158015610f25573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610f4891906150cc565b90508086600601835f0151604051610f60919061520a565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610fa0908261525f565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b03199093169290921790915561100f908561532e565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161104a92919061534e565b60405180910390a250508061105e90615378565b9050610e2c565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b03841681029190911790915560018401546064916110a8910460ff168361539a565b6001600160401b031610156110db57604051633e1a785160e01b81526001600160401b038216600482015260240161091c565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d8478846110ff8761268e565b604001516040518263ffffffff1660e01b815260040161111f91906150ba565b602060405180830381865af415801561113a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115e91906150cc565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b815260040161119891906154f0565b5f60405180830381865af41580156111b2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526111d99190810190615089565b90505f6002826040516111ec919061520a565b602060405180830381855afa158015611207573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061122a91906150cc565b90508281146112565760405163baaea89d60e01b8152600481018290526024810184905260440161091c565b5050506007909201805460ff1916600117905550505050565b5f61127861223f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156112b1576112b1614e71565b60038111156112c2576112c2614e71565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561133b5761133b614e71565b1415801561135c575060038151600381111561135957611359614e71565b14155b1561137d578051604051633b0d540d60e21b815261091c91906004016150e3565b5f61138b8260400151611fb2565b905080606001516001600160401b03165f036113bd576040516339b894f960e21b81526004810185905260240161091c565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f9361142b93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611445573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261146c9190810190615089565b6040518263ffffffff1660e01b815260040161148891906150ba565b6020604051808303815f875af11580156114a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c891906150cc565b5050505050565b6114d8826127a4565b6114f8576040516330efa98b60e01b81526004810183905260240161091c565b5f61150283611fb2565b519050600281600581111561151957611519614e71565b14611539578060405163170cc93360e21b815260040161091c9190615039565b610a1f83836127cd565b5f61154c612208565b61155c8888888888888834612a69565b905061157460015f805160206159af83398151915255565b979650505050505050565b610a1f8383835f612be6565b6115978383835f612f13565b505050565b5f806115a661223f565b600301546115b49084615584565b90508015806115c957506001600160401b0381115b156115ea5760405163222d164360e21b81526004810184905260240161091c565b92915050565b6114c884848484612447565b5f6116056121d0565b54919050565b5f61161461223f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561164d5761164d614e71565b600381111561165e5761165e614e71565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6116d482611fb2565b90506001835160038111156116eb576116eb614e71565b1461170c578251604051633b0d540d60e21b815261091c91906004016150e3565b60048151600581111561172157611721614e71565b036117375761172f86612263565b505050505050565b8260a001516001600160401b031681608001516001600160401b031610156117d5575f8061176487611e2f565b9150915081841461179057846040015160405163089938b360e11b815260040161091c91815260200190565b8460a001516001600160401b0316816001600160401b031610156117d257604051632e19bc2d60e11b81526001600160401b038216600482015260240161091c565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa910160405180910390a3505050505050565b5f61186561223f565b600301546115ea906001600160401b0384166155a3565b610a1f84848484612f13565b5f61189161223f565b90506001600160a01b0382166118c55760405163caa903f960e01b81526001600160a01b038316600482015260240161091c565b5f8381526006820160205260409020546001600160a01b0316331461190b57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161091c565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61194261223f565b90505f61194e83611fb2565b519050600481600581111561196557611965614e71565b14611985578060405163170cc93360e21b815260040161091c9190615039565b5f8381526006830160205260409020546001600160a01b031633146119aa57336118e6565b5f838152600683016020526040902054611597906001600160a01b031684612f3f565b5f6119d6612208565b5f6119df61223f565b90505f806119ec85612f69565b915091506119f9826127a4565b611a0757509150611a8b9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b03918216911680611a495750805b600483516005811115611a5e57611a5e614e71565b03611a6d57611a6d8185612f3f565b611a8382611a7e856040015161185c565b61331e565b509193505050505b611aa160015f805160206159af83398151915255565b919050565b5f80611ab06121d0565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f611ad78761268e565b604001516040518263ffffffff1660e01b8152600401611af791906150ba565b6040805180830381865af4158015611b11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b3591906155ba565b9150915080611b5b57604051632d07135360e01b8152811515600482015260240161091c565b5f82815260048401602052604090208054611b7590615007565b90505f03611b995760405163089938b360e11b81526004810183905260240161091c565b60015f838152600580860160205260409091205460ff1690811115611bc057611bc0614e71565b14611bf3575f8281526005840160205260409081902054905163170cc93360e21b815261091c9160ff1690600401615039565b5f8281526004840160205260408120611c0b9161494d565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611c9193600190910192600160c01b9092041690615656565b60405180910390a2509392505050565b6114c884848484612be6565b6115978383835f613331565b5f611cc26121d0565b60030154600160401b90046001600160401b0316919050565b5f611ce46121d0565b5f8381526004820160205260409020805491925090611d0290615007565b90505f03611d265760405163089938b360e11b81526004810183905260240161091c565b60015f838152600580840160205260409091205460ff1690811115611d4d57611d4d614e71565b14611d80575f8281526005820160205260409081902054905163170cc93360e21b815261091c9160ff1690600401615039565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611db79201615668565b6020604051808303815f875af1158015611dd3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159791906150cc565b5f611e00612208565b611e0b82333461335d565b9050611aa160015f805160206159af83398151915255565b610a1f84848484613331565b5f805f611e3b8461268e565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e7b91906150ba565b606060405180830381865af4158015611e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eba919061567a565b9250925092505f611ec96121d0565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1d57604051632e19bc2d60e11b81526001600160401b038416600482015260240161091c565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9d90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fba614984565b5f611fc36121d0565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ffd57611ffd614e71565b600581111561200e5761200e614e71565b815260200160018201805461202290615007565b80601f016020809104026020016040519081016040528092919081815260200182805461204e90615007565b80156120995780601f1061207057610100808354040283529160200191612099565b820191905f5260205f20905b81548152906001019060200180831161207c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b0381166121335760405163caa903f960e01b81526001600160a01b038216600482015260240161091c565b5f61213c61223f565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461216a57336118e6565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806121a26121d0565b90508060060184846040516121b89291906156ba565b90815260200160405180910390205491505092915050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b6121fc61359f565b612205816135ea565b50565b5f805160206159af83398151915280546001190161223957604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f61226c61223f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156122a5576122a5614e71565b60038111156122b6576122b6614e71565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061232a613664565b8260800151612339919061532e565b6001600160401b031642101561236d5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161091c565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b0316806123c8575060208201515b5f806123d583888661367f565b915091506123ee8560200151611a7e876060015161185c565b6040805183815260208101839052859189917f5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e910160405180910390a350505050505050565b60015f805160206159af83398151915255565b5f8061245161223f565b905061245c8661372c565b5f61246687611fb2565b9050612471876127a4565b61248057600192505050612686565b5f8781526006830160205260409020546001600160a01b031633146124a557336118e6565b5f87815260068301602052604090205460c08201516124d491600160b01b90046001600160401b03169061532e565b6001600160401b03168160e001516001600160401b0316101561251b5760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161091c565b5f86156125335761252c88876127cd565b9050612551565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906125769061185c565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa1580156125e0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061260491906150cc565b90506001600160a01b038616612630575f8981526006850160205260409020546001600160a01b031695505b5f898152600a850160205260408120805483929061264f9084906156c9565b90915550505f898152600b94909401602052604090932080546001600160a01b0319166001600160a01b0387161790555050151590505b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156126f2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261271991908101906156dc565b915091508061273b57604051636b2f19e960e01b815260040160405180910390fd5b815115612761578151604051636ba589a560e01b8152600481019190915260240161091c565b60208201516001600160a01b03161561279d576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161091c565b5092915050565b5f806127ae61223f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612818573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261283f91908101906156dc565b915091508061286157604051636b2f19e960e01b815260040160405180910390fd5b5f61286a61223f565b6005810154845191925014612898578251604051636ba589a560e01b8152600481019190915260240161091c565b60208301516001600160a01b0316156128d4576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161091c565b60208301516001600160a01b031615612910576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161091c565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161294d91906150ba565b6040805180830381865af4158015612967573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061298b919061576c565b915091508188146129b25760405163089938b360e11b81526004810189905260240161091c565b5f8881526006840160205260409020600101546001600160401b039081169082161115612a43575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2611574565b50505f95865260060160205250506040909220600101546001600160401b031692915050565b5f80612a7361223f565b600281015490915061ffff600160401b90910481169086161080612a9c575061271061ffff8616115b15612ac057604051635f12e6c360e11b815261ffff8616600482015260240161091c565b60028101546001600160401b039081169085161015612afc576040516202a06d60e11b81526001600160401b038516600482015260240161091c565b8054831080612b0e5750806001015483115b15612b2f5760405163222d164360e21b81526004810184905260240161091c565b825f612b3a8261159c565b90505f612b4b8d8d8d8d8d87613a17565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b03191690961790955550939998505050505050505050565b5f80612bf061223f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c2957612c29614e71565b6003811115612c3a57612c3a614e71565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f612cb082611fb2565b9050600283516003811115612cc757612cc7614e71565b14612ce8578251604051633b0d540d60e21b815261091c91906004016150e3565b60208301516001600160a01b03163314612d84575f8281526006850160205260409020546001600160a01b03163314612d2157336118e6565b5f82815260068501602052604090205460c0820151612d5091600160b01b90046001600160401b03169061532e565b6001600160401b0316421015612d845760405163fb6ce63f60e01b81526001600160401b034216600482015260240161091c565b600281516005811115612d9957612d99614e71565b03612ebb5760028401546080840151612dbb916001600160401b03169061532e565b6001600160401b0316421015612def5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161091c565b8715612e0157612dff82886127cd565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a0820151612e3a918491612e35919061578f565b613dd0565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612e7d84888c613f9a565b9050828a7f5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf60405160405180910390a3151594506126869350505050565b600481516005811115612ed057612ed0614e71565b03612ef757612ee083878b613f9a565b50612eea89612263565b6001945050505050612686565b805160405163170cc93360e21b815261091c9190600401615039565b612f1f84848484612be6565b610a1f57604051631036cf9160e11b81526004810185905260240161091c565b5f612f4861223f565b5f838152600a8201602052604081208054919055909150610a1f8482614188565b5f612f72614984565b5f612f7b6121d0565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612fa28861268e565b604001516040518263ffffffff1660e01b8152600401612fc291906150ba565b6040805180830381865af4158015612fdc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061300091906155ba565b91509150801561302757604051632d07135360e01b8152811515600482015260240161091c565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561305f5761305f614e71565b600581111561307057613070614e71565b815260200160018201805461308490615007565b80601f01602080910402602001604051908101604052809291908181526020018280546130b090615007565b80156130fb5780601f106130d2576101008083540402835291602001916130fb565b820191905f5260205f20905b8154815290600101906020018083116130de57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561317357613173614e71565b14158015613194575060018151600581111561319157613191614e71565b14155b156131b557805160405163170cc93360e21b815261091c9190600401615039565b6003815160058111156131ca576131ca614e71565b036131d857600481526131dd565b600581525b8360060181602001516040516131f3919061520a565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561323657613236614e71565b02179055506020820151600182019061324f908261525f565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b610cf16001600160a01b038316826141e6565b61333d84848484612447565b610a1f57604051635bff683f60e11b81526004810185905260240161091c565b5f8061336761223f565b90505f6133738461159c565b90505f61337f87611fb2565b905061338a876127a4565b6133aa576040516330efa98b60e01b81526004810188905260240161091c565b6002815160058111156133bf576133bf614e71565b146133e057805160405163170cc93360e21b815261091c9190600401615039565b5f828260a001516133f1919061532e565b905083600201600a9054906101000a90046001600160401b0316826040015161341a919061539a565b6001600160401b0316816001600160401b0316111561345757604051636d51fe0560e11b81526001600160401b038216600482015260240161091c565b5f806134638a84613dd0565b915091505f8a8360405160200161349192919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d19060800160405180910390a496505050505050505b9392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166135e857604051631afcd79f60e31b815260040160405180910390fd5b565b6135f261359f565b6135fb81614279565b613603614292565b6122056060820135608083013561362060c0850160a08601614e0f565b61363060e0860160c087016157af565b613641610100870160e088016157c8565b61010087013561365961014089016101208a016150fd565b8861014001356142a2565b5f61366d6121d0565b600101546001600160401b0316919050565b5f805f61368a61223f565b5f8681526008820160205260408120805490829055919250908190801561371e575f878152600685016020526040902054612710906136d490600160a01b900461ffff16836155a3565b6136de9190615584565b91508184600a015f8981526020019081526020015f205f82825461370291906156c9565b90915550613712905082826157e8565b925061371e8984614188565b509097909650945050505050565b5f6137356121d0565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561376f5761376f614e71565b600581111561378057613780614e71565b815260200160018201805461379490615007565b80601f01602080910402602001604051908101604052809291908181526020018280546137c090615007565b801561380b5780601f106137e25761010080835404028352916020019161380b565b820191905f5260205f20905b8154815290600101906020018083116137ee57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c0909101529091508151600581111561388357613883614e71565b146138b6575f8381526005830160205260409081902054905163170cc93360e21b815261091c9160ff1690600401615039565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff19169060019084908111156138fb576138fb614e71565b021790555060208201516001820190613914908261525f565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f6139b48482613dd0565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613a09939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613a206121d0565b6007015460ff16613a4457604051637fab81e560e01b815260040160405180910390fd5b5f613a4d6121d0565b905042866001600160401b0316111580613a7c5750613a6f6202a300426156c9565b866001600160401b031610155b15613aa557604051635879da1360e11b81526001600160401b038716600482015260240161091c565b60038101546001600160401b0390613ac890600160401b900482168583166156c9565b1115613af257604051633e1a785160e01b81526001600160401b038416600482015260240161091c565b613afb85614464565b613b0484614464565b8651603014613b2b5786516040516326475b2f60e11b815260040161091c91815260200190565b87515f03613b4e5787604051633e08a12560e11b815260040161091c91906150ba565b5f801b8160060189604051613b63919061520a565b90815260200160405180910390205414613b92578760405163a41f772f60e01b815260040161091c91906150ba565b613b9c835f614583565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613c1c9190615861565b5f60405180830381865af4158015613c36573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613c5d9190810190615918565b5f82815260048601602052604090209193509150613c7b828261525f565b5081836006018b604051613c8f919061520a565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613ccb9085906004016150ba565b6020604051808303815f875af1158015613ce7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d0b91906150cc565b5f8481526005860160205260409020805460ff19166001908117825591925001613d358c8261525f565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613db9908e9085908e908c9061595b565b60405180910390a250909998505050505050505050565b5f805f613ddb6121d0565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b0316613e0b8582614583565b5f613e15876147f0565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613eb9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613ee09190810190615089565b6040518263ffffffff1660e01b8152600401613efc91906150ba565b6020604051808303815f875af1158015613f18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f3c91906150cc565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f80613fa461223f565b90505f613fb48660400151611fb2565b90505f600382516005811115613fcc57613fcc614e71565b1480613fea5750600482516005811115613fe857613fe8614e71565b145b15613ffa575060e0810151614037565b60028251600581111561400f5761400f614e71565b0361401b575042614037565b815160405163170cc93360e21b815261091c9190600401615039565b86608001516001600160401b0316816001600160401b03161161405f575f9350505050613598565b600483015460608801515f916001600160a01b031690634f22429f906140849061185c565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015614105573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061412991906150cc565b90506001600160a01b03871661414157876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b1580156141d4575f80fd5b505af115801561172f573d5f803e3d5ffd5b804710156142095760405163cd78605960e01b815230600482015260240161091c565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614252576040519150601f19603f3d011682016040523d82523d5f602084013e614257565b606091505b505090508061159757604051630a12f52160e11b815260040160405180910390fd5b61428161359f565b614289614859565b61220581614861565b61429a61359f565b6135e8614945565b6142aa61359f565b5f6142b361223f565b905061ffff861615806142cb575061271061ffff8716115b156142ef57604051635f12e6c360e11b815261ffff8716600482015260240161091c565b878911156143135760405163222d164360e21b8152600481018a905260240161091c565b60ff851615806143265750600a60ff8616115b156143495760405163170db35960e31b815260ff8616600482015260240161091c565b614351613664565b6001600160401b0316876001600160401b0316101561438d576040516202a06d60e11b81526001600160401b038816600482015260240161091c565b835f036143ad5760405163a733007160e01b815260040160405180910390fd5b816143ce57604051632f6bd1db60e01b81526004810183905260240161091c565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b805163ffffffff1615801561447d575060208101515115155b156144b157805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161091c565b602081015151815163ffffffff1611156144f457805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161091c565b60015b816020015151811015610cf15760208201516145146001836157e8565b815181106145245761452461515d565b60200260200101516001600160a01b03168260200151828151811061454b5761454b61515d565b60200260200101516001600160a01b0316101561457b57604051630dbc8d5f60e31b815260040160405180910390fd5b6001016144f7565b5f61458c6121d0565b90505f826001600160401b0316846001600160401b031611156145ba576145b3838561578f565b90506145c7565b6145c4848461578f565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580614634575060018401548151614630916001600160401b0316906156c9565b8210155b1561465c576001600160401b038084166060830152828252604082015116602082015261467b565b828160600181815161466e919061532e565b6001600160401b03169052505b606081015161468b90606461539a565b602082015160018601546001600160401b0392909216916146b69190600160401b900460ff1661539a565b6001600160401b031610156146ef57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161091c565b8581604001818151614701919061532e565b6001600160401b031690525060408101805186919061472190839061578f565b6001600160401b03169052506001840154604082015160649161474f91600160401b90910460ff169061539a565b6001600160401b03161015614788576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161091c565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f806147fa6121d0565b5f848152600582016020526040902060020180549192509060089061482e90600160401b90046001600160401b0316615993565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6135e861359f565b61486961359f565b5f6148726121d0565b823581559050601461488a60608401604085016157c8565b60ff1611806148a957506148a460608301604084016157c8565b60ff16155b156148dd576148be60608301604084016157c8565b604051634a59bbff60e11b815260ff909116600482015260240161091c565b6148ed60608301604084016157c8565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561491e6040830160208401614e0f565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b61243461359f565b50805461495990615007565b5f825580601f10614968575050565b601f0160209004905f5260205f209081019061220591906149c9565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156149dd575f81556001016149ca565b5090565b5f602082840312156149f1575f80fd5b5035919050565b5f6101608284031215614a09575f80fd5b50919050565b803563ffffffff81168114611aa1575f80fd5b5f8060408385031215614a33575f80fd5b82359150614a4360208401614a0f565b90509250929050565b8015158114612205575f80fd5b5f805f60608486031215614a6b575f80fd5b833592506020840135614a7d81614a4c565b9150614a8b60408501614a0f565b90509250925092565b5f8060408385031215614aa5575f80fd5b82356001600160401b03811115614aba575f80fd5b830160808186031215614acb575f80fd5b9150614a4360208401614a0f565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715614b0f57614b0f614ad9565b60405290565b604051606081016001600160401b0381118282101715614b0f57614b0f614ad9565b604051601f8201601f191681016001600160401b0381118282101715614b5f57614b5f614ad9565b604052919050565b5f6001600160401b03821115614b7f57614b7f614ad9565b50601f01601f191660200190565b5f82601f830112614b9c575f80fd5b8135614baf614baa82614b67565b614b37565b818152846020838601011115614bc3575f80fd5b816020850160208301375f918101602001919091529392505050565b6001600160401b0381168114612205575f80fd5b8035611aa181614bdf565b6001600160a01b0381168114612205575f80fd5b5f60408284031215614c22575f80fd5b614c2a614aed565b9050614c3582614a0f565b81526020808301356001600160401b0380821115614c51575f80fd5b818501915085601f830112614c64575f80fd5b813581811115614c7657614c76614ad9565b8060051b9150614c87848301614b37565b8181529183018401918481019088841115614ca0575f80fd5b938501935b83851015614cca5784359250614cba83614bfe565b8282529385019390850190614ca5565b808688015250505050505092915050565b803561ffff81168114611aa1575f80fd5b5f805f805f805f60e0888a031215614d02575f80fd5b87356001600160401b0380821115614d18575f80fd5b614d248b838c01614b8d565b985060208a0135915080821115614d39575f80fd5b614d458b838c01614b8d565b9750614d5360408b01614bf3565b965060608a0135915080821115614d68575f80fd5b614d748b838c01614c12565b955060808a0135915080821115614d89575f80fd5b50614d968a828b01614c12565b935050614da560a08901614cdb565b9150614db360c08901614bf3565b905092959891949750929550565b5f805f8060808587031215614dd4575f80fd5b843593506020850135614de681614a4c565b9250614df460408601614a0f565b91506060850135614e0481614bfe565b939692955090935050565b5f60208284031215614e1f575f80fd5b813561359881614bdf565b5f8060408385031215614e3b575f80fd5b823591506020830135614e4d81614bfe565b809150509250929050565b5f60208284031215614e68575f80fd5b61359882614a0f565b634e487b7160e01b5f52602160045260245ffd5b60068110614e9557614e95614e71565b9052565b5f5b83811015614eb3578181015183820152602001614e9b565b50505f910152565b5f8151808452614ed2816020860160208601614e99565b601f01601f19169290920160200192915050565b60208152614ef8602082018351614e85565b5f6020830151610100806040850152614f15610120850183614ebb565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614f5460a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614fad575f80fd5b82356001600160401b0380821115614fc3575f80fd5b818501915085601f830112614fd6575f80fd5b813581811115614fe4575f80fd5b866020828501011115614ff5575f80fd5b60209290920196919550909350505050565b600181811c9082168061501b57607f821691505b602082108103614a0957634e487b7160e01b5f52602260045260245ffd5b602081016115ea8284614e85565b5f82601f830112615056575f80fd5b8151615064614baa82614b67565b818152846020838601011115615078575f80fd5b612686826020830160208701614e99565b5f60208284031215615099575f80fd5b81516001600160401b038111156150ae575f80fd5b61268684828501615047565b602081525f6135986020830184614ebb565b5f602082840312156150dc575f80fd5b5051919050565b60208101600483106150f7576150f7614e71565b91905290565b5f6020828403121561510d575f80fd5b813561359881614bfe565b5f808335601e1984360301811261512d575f80fd5b8301803591506001600160401b03821115615146575f80fd5b6020019150600581901b3603821315613f93575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615185575f80fd5b9190910192915050565b5f6060823603121561519f575f80fd5b6151a7614b15565b82356001600160401b03808211156151bd575f80fd5b6151c936838701614b8d565b835260208501359150808211156151de575f80fd5b506151eb36828601614b8d565b60208301525060408301356151ff81614bdf565b604082015292915050565b5f8251615185818460208701614e99565b601f82111561159757805f5260205f20601f840160051c810160208510156152405750805b601f840160051c820191505b818110156114c8575f815560010161524c565b81516001600160401b0381111561527857615278614ad9565b61528c816152868454615007565b8461521b565b602080601f8311600181146152bf575f84156152a85750858301515b5f19600386901b1c1916600185901b17855561172f565b5f85815260208120601f198616915b828110156152ed578886015182559484019460019091019084016152ce565b508582101561530a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561279d5761279d61531a565b604081525f6153606040830185614ebb565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036153905761539061531a565b6001019392505050565b6001600160401b038181168382160280821691908281146153bd576153bd61531a565b505092915050565b5f808335601e198436030181126153da575f80fd5b83016020810192503590506001600160401b038111156153f8575f80fd5b803603821315613f93575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156154e357848303601f19018952813536889003605e1901811261546a575f80fd5b8701606061547882806153c5565b8287526154888388018284615406565b92505050615498868301836153c5565b868303888801526154aa838284615406565b9250505060408083013592506154bf83614bdf565b6001600160401b039290921694909101939093529783019790830190600101615445565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561551481614bfe565b6001600160a01b031660608381019190915283013536849003601e1901811261553b575f80fd5b83016020810190356001600160401b03811115615556575f80fd5b8060051b3603821315615567575f80fd5b60808085015261557b60a08501828461542e565b95945050505050565b5f8261559e57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176115ea576115ea61531a565b5f80604083850312156155cb575f80fd5b825191506020830151614e4d81614a4c565b5f81546155e981615007565b80855260206001838116801561560657600181146156205761564b565b60ff1985168884015283151560051b88018301955061564b565b865f52825f205f5b858110156156435781548a8201860152908301908401615628565b890184019650505b505050505092915050565b604081525f61536060408301856155dd565b602081525f61359860208301846155dd565b5f805f6060848603121561568c575f80fd5b83519250602084015161569e81614bdf565b60408501519092506156af81614bdf565b809150509250925092565b818382375f9101908152919050565b808201808211156115ea576115ea61531a565b5f80604083850312156156ed575f80fd5b82516001600160401b0380821115615703575f80fd5b9084019060608287031215615716575f80fd5b61571e614b15565b82518152602083015161573081614bfe565b6020820152604083015182811115615746575f80fd5b61575288828601615047565b6040830152508094505050506020830151614e4d81614a4c565b5f806040838503121561577d575f80fd5b825191506020830151614e4d81614bdf565b6001600160401b0382811682821603908082111561279d5761279d61531a565b5f602082840312156157bf575f80fd5b61359882614cdb565b5f602082840312156157d8575f80fd5b813560ff81168114613598575f80fd5b818103818111156115ea576115ea61531a565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158565784516001600160a01b0316825293830193600192909201919083019061582d565b509695505050505050565b60208152815160208201525f602083015160e06040840152615887610100840182614ebb565b90506040840151601f19808584030160608601526158a58383614ebb565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526158d583836157fb565b925060a08601519150808584030160c0860152506158f382826157fb565b91505060c084015161591060e08501826001600160401b03169052565b509392505050565b5f8060408385031215615929575f80fd5b8251915060208301516001600160401b03811115615945575f80fd5b61595185828601615047565b9150509250929050565b608081525f61596d6080830187614ebb565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036153905761539061531a56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212208c55df90a8c15efc920358718e40412a9fa567e0f6dfae1abf431d1fbf456ee564736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -920,25 +911,25 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Co return _NativeTokenStakingManager.Contract.CompleteDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "completeEndDelegation", delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "completeDelegatorRemoval", delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.CompleteEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteDelegatorRemoval(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteDelegatorRemoval(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.CompleteEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteDelegatorRemoval(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteDelegatorRemoval(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) } // CompleteValidatorRegistration is a paid mutator transaction binding the contract method 0xa3a65e48. @@ -1004,88 +995,88 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Co return _NativeTokenStakingManager.Contract.CompleteValidatorWeightUpdate(&_NativeTokenStakingManager.TransactOpts, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation", delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitiateDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitiateDelegatorRemoval", delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateDelegatorRemoval(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateDelegatorRemoval(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitiateDelegatorRemoval0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitiateDelegatorRemoval0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateDelegatorRemoval0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateDelegatorRemoval0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation", validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitiateValidatorRemoval", validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateValidatorRemoval(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateValidatorRemoval(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation0", validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitiateValidatorRemoval0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitiateValidatorRemoval0", validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateValidatorRemoval0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitiateValidatorRemoval0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } // Initialize is a paid mutator transaction binding the contract method 0x0ba512d1. @@ -1109,151 +1100,151 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) In return _NativeTokenStakingManager.Contract.Initialize(&_NativeTokenStakingManager.TransactOpts, settings) } -// InitializeDelegatorRegistration is a paid mutator transaction binding the contract method 0xc599e24f. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeDelegatorRegistration(bytes32 validationID) payable returns(bytes32) -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeDelegatorRegistration(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeDelegatorRegistration", validationID) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messageIndex) } -// InitializeDelegatorRegistration is a paid mutator transaction binding the contract method 0xc599e24f. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeDelegatorRegistration(bytes32 validationID) payable returns(bytes32) -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeDelegatorRegistration(validationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, validationID) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeValidatorSet(&_NativeTokenStakingManager.TransactOpts, conversionData, messageIndex) } -// InitializeDelegatorRegistration is a paid mutator transaction binding the contract method 0xc599e24f. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeDelegatorRegistration(bytes32 validationID) payable returns(bytes32) -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeDelegatorRegistration(validationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, validationID) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeValidatorSet(&_NativeTokenStakingManager.TransactOpts, conversionData, messageIndex) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRegistration is a paid mutator transaction binding the contract method 0xcacd9755. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndDelegation", delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRegistration(bytes32 validationID) payable returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitiateDelegatorRegistration(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initiateDelegatorRegistration", validationID) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRegistration is a paid mutator transaction binding the contract method 0xcacd9755. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRegistration(bytes32 validationID) payable returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitiateDelegatorRegistration(validationID [32]byte) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, validationID) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRegistration is a paid mutator transaction binding the contract method 0xcacd9755. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRegistration(bytes32 validationID) payable returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitiateDelegatorRegistration(validationID [32]byte) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, validationID) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitiateDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initiateDelegatorRemoval", delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateDelegatorRemoval(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateDelegatorRemoval(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitiateDelegatorRemoval0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initiateDelegatorRemoval0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateDelegatorRemoval0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateDelegatorRemoval0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0x264dc603. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndValidation0", validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration) payable returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitiateValidatorRegistration(opts *bind.TransactOpts, nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, delegationFeeBips uint16, minStakeDuration uint64) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initiateValidatorRegistration", nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, delegationFeeBips, minStakeDuration) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0x264dc603. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration) payable returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitiateValidatorRegistration(nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, delegationFeeBips uint16, minStakeDuration uint64) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateValidatorRegistration(&_NativeTokenStakingManager.TransactOpts, nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, delegationFeeBips, minStakeDuration) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0x264dc603. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint16 delegationFeeBips, uint64 minStakeDuration) payable returns(bytes32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitiateValidatorRegistration(nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, delegationFeeBips uint16, minStakeDuration uint64) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateValidatorRegistration(&_NativeTokenStakingManager.TransactOpts, nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, delegationFeeBips, minStakeDuration) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0xaf2f5feb. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration) payable returns(bytes32) -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeValidatorRegistration(opts *bind.TransactOpts, registrationInput ValidatorRegistrationInput, delegationFeeBips uint16, minStakeDuration uint64) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeValidatorRegistration", registrationInput, delegationFeeBips, minStakeDuration) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initiateValidatorRemoval", validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0xaf2f5feb. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration) payable returns(bytes32) -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeValidatorRegistration(registrationInput ValidatorRegistrationInput, delegationFeeBips uint16, minStakeDuration uint64) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeValidatorRegistration(&_NativeTokenStakingManager.TransactOpts, registrationInput, delegationFeeBips, minStakeDuration) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateValidatorRemoval(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0xaf2f5feb. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint16 delegationFeeBips, uint64 minStakeDuration) payable returns(bytes32) -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeValidatorRegistration(registrationInput ValidatorRegistrationInput, delegationFeeBips uint16, minStakeDuration uint64) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeValidatorRegistration(&_NativeTokenStakingManager.TransactOpts, registrationInput, delegationFeeBips, minStakeDuration) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateValidatorRemoval(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitiateValidatorRemoval0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initiateValidatorRemoval0", validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeValidatorSet(&_NativeTokenStakingManager.TransactOpts, conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateValidatorRemoval0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeValidatorSet(&_NativeTokenStakingManager.TransactOpts, conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitiateValidatorRemoval0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) } // ResendEndValidatorMessage is a paid mutator transaction binding the contract method 0x0322ed98. @@ -1298,25 +1289,25 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Re return _NativeTokenStakingManager.Contract.ResendRegisterValidatorMessage(&_NativeTokenStakingManager.TransactOpts, validationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ResendUpdateDelegation(opts *bind.TransactOpts, delegationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "resendUpdateDelegation", delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ResendUpdateDelegator(opts *bind.TransactOpts, delegationID [32]byte) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "resendUpdateDelegator", delegationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ResendUpdateDelegation(delegationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ResendUpdateDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ResendUpdateDelegator(delegationID [32]byte) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ResendUpdateDelegator(&_NativeTokenStakingManager.TransactOpts, delegationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ResendUpdateDelegation(delegationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.ResendUpdateDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ResendUpdateDelegator(delegationID [32]byte) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ResendUpdateDelegator(&_NativeTokenStakingManager.TransactOpts, delegationID) } // SubmitUptimeProof is a paid mutator transaction binding the contract method 0x25e1c776. @@ -1340,9 +1331,9 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Su return _NativeTokenStakingManager.Contract.SubmitUptimeProof(&_NativeTokenStakingManager.TransactOpts, validationID, messageIndex) } -// NativeTokenStakingManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerCompletedValidatorRegistrationIterator struct { - Event *NativeTokenStakingManagerCompletedValidatorRegistration // Event containing the contract specifics and raw log +// NativeTokenStakingManagerCompletedDelegatorRegistrationIterator is returned from FilterCompletedDelegatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedDelegatorRegistration events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedDelegatorRegistrationIterator struct { + Event *NativeTokenStakingManagerCompletedDelegatorRegistration // 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 @@ -1356,7 +1347,7 @@ type NativeTokenStakingManagerCompletedValidatorRegistrationIterator struct { // 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 *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Next() bool { +func (it *NativeTokenStakingManagerCompletedDelegatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1365,7 +1356,7 @@ func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Next( if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerCompletedValidatorRegistration) + it.Event = new(NativeTokenStakingManagerCompletedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1380,7 +1371,7 @@ func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Next( // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerCompletedValidatorRegistration) + it.Event = new(NativeTokenStakingManagerCompletedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1396,53 +1387,61 @@ func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Next( } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedDelegatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedDelegatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerCompletedValidatorRegistration struct { +// NativeTokenStakingManagerCompletedDelegatorRegistration represents a CompletedDelegatorRegistration event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedDelegatorRegistration struct { + DelegationID [32]byte ValidationID [32]byte - NodeID []byte - Weight uint64 + StartTime *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// FilterCompletedDelegatorRegistration is a free log retrieval operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorRegistrationIterator, error) { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedDelegatorRegistration(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerCompletedDelegatorRegistrationIterator, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedDelegatorRegistration", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerCompletedValidatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedDelegatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedDelegatorRegistration", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// WatchCompletedDelegatorRegistration is a free log subscription operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedDelegatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedDelegatorRegistration, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedDelegatorRegistration", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1452,8 +1451,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchComple select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerCompletedValidatorRegistration) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { + event := new(NativeTokenStakingManagerCompletedDelegatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRegistration", log); err != nil { return err } event.Raw = log @@ -1474,21 +1473,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchComple }), nil } -// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// ParseCompletedDelegatorRegistration is a log parse operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*NativeTokenStakingManagerCompletedValidatorRegistration, error) { - event := new(NativeTokenStakingManagerCompletedValidatorRegistration) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedDelegatorRegistration(log types.Log) (*NativeTokenStakingManagerCompletedDelegatorRegistration, error) { + event := new(NativeTokenStakingManagerCompletedDelegatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerCompletedValidatorRemovalIterator struct { - Event *NativeTokenStakingManagerCompletedValidatorRemoval // Event containing the contract specifics and raw log +// NativeTokenStakingManagerCompletedDelegatorRemovalIterator is returned from FilterCompletedDelegatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedDelegatorRemoval events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedDelegatorRemovalIterator struct { + Event *NativeTokenStakingManagerCompletedDelegatorRemoval // 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 @@ -1502,7 +1501,7 @@ type NativeTokenStakingManagerCompletedValidatorRemovalIterator struct { // 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 *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Next() bool { +func (it *NativeTokenStakingManagerCompletedDelegatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1511,7 +1510,7 @@ func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Next() boo if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerCompletedValidatorRemoval) + it.Event = new(NativeTokenStakingManagerCompletedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1526,7 +1525,7 @@ func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Next() boo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerCompletedValidatorRemoval) + it.Event = new(NativeTokenStakingManagerCompletedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1542,51 +1541,62 @@ func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Next() boo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedDelegatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedDelegatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerCompletedValidatorRemoval struct { +// NativeTokenStakingManagerCompletedDelegatorRemoval represents a CompletedDelegatorRemoval event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedDelegatorRemoval struct { + DelegationID [32]byte ValidationID [32]byte + Rewards *big.Int + Fees *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// FilterCompletedDelegatorRemoval is a free log retrieval operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorRemovalIterator, error) { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedDelegatorRemoval(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerCompletedDelegatorRemovalIterator, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerCompletedValidatorRemovalIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedDelegatorRemovalIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedDelegatorRemoval", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// WatchCompletedDelegatorRemoval is a free log subscription operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedDelegatorRemoval(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedDelegatorRemoval, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1596,8 +1606,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchComple select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerCompletedValidatorRemoval) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { + event := new(NativeTokenStakingManagerCompletedDelegatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRemoval", log); err != nil { return err } event.Raw = log @@ -1618,21 +1628,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchComple }), nil } -// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. +// ParseCompletedDelegatorRemoval is a log parse operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*NativeTokenStakingManagerCompletedValidatorRemoval, error) { - event := new(NativeTokenStakingManagerCompletedValidatorRemoval) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedDelegatorRemoval(log types.Log) (*NativeTokenStakingManagerCompletedDelegatorRemoval, error) { + event := new(NativeTokenStakingManagerCompletedDelegatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedDelegatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator struct { - Event *NativeTokenStakingManagerCompletedValidatorWeightUpdate // Event containing the contract specifics and raw log +// NativeTokenStakingManagerCompletedValidatorRegistrationIterator is returned from FilterCompletedValidatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedValidatorRegistration events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRegistrationIterator struct { + Event *NativeTokenStakingManagerCompletedValidatorRegistration // 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 @@ -1646,7 +1656,7 @@ type NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator struct { // 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 *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() bool { +func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1655,7 +1665,7 @@ func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Next( if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1670,7 +1680,7 @@ func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Next( // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1686,53 +1696,53 @@ func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Next( } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerCompletedValidatorWeightUpdate struct { +// NativeTokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRegistration struct { ValidationID [32]byte - Nonce uint64 + NodeID []byte Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedValidatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRegistration", validationIDRule) if err != nil { return nil, err } @@ -1742,8 +1752,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchComple select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { + event := new(NativeTokenStakingManagerCompletedValidatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return err } event.Raw = log @@ -1764,21 +1774,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchComple }), nil } -// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. // -// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*NativeTokenStakingManagerCompletedValidatorWeightUpdate, error) { - event := new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*NativeTokenStakingManagerCompletedValidatorRegistration, error) { + event := new(NativeTokenStakingManagerCompletedValidatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerDelegationEndedIterator is returned from FilterDelegationEnded and is used to iterate over the raw logs and unpacked data for DelegationEnded events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegationEndedIterator struct { - Event *NativeTokenStakingManagerDelegationEnded // Event containing the contract specifics and raw log +// NativeTokenStakingManagerCompletedValidatorRemovalIterator is returned from FilterCompletedValidatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedValidatorRemoval events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRemovalIterator struct { + Event *NativeTokenStakingManagerCompletedValidatorRemoval // 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 @@ -1792,7 +1802,7 @@ type NativeTokenStakingManagerDelegationEndedIterator struct { // 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 *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { +func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1801,7 +1811,7 @@ func (it *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegationEnded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1816,7 +1826,7 @@ func (it *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegationEnded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1832,62 +1842,51 @@ func (it *NativeTokenStakingManagerDelegationEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegationEndedIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegationEndedIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedValidatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegationEnded represents a DelegationEnded event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegationEnded struct { - DelegationID [32]byte +// NativeTokenStakingManagerCompletedValidatorRemoval represents a CompletedValidatorRemoval event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorRemoval struct { ValidationID [32]byte - Rewards *big.Int - Fees *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// FilterCompletedValidatorRemoval is a free log retrieval operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegationEnded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegationEndedIterator, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorRemoval(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorRemovalIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegationEndedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedValidatorRemovalIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorRemoval", logs: logs, sub: sub}, nil } -// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// WatchCompletedValidatorRemoval is a free log subscription operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegationEnded(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegationEnded, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorRemoval(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorRemoval, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorRemoval", validationIDRule) if err != nil { return nil, err } @@ -1897,8 +1896,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerDelegationEnded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { + event := new(NativeTokenStakingManagerCompletedValidatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return err } event.Raw = log @@ -1919,21 +1918,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// ParseCompletedValidatorRemoval is a log parse operation binding the contract event 0xafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegationEnded(log types.Log) (*NativeTokenStakingManagerDelegationEnded, error) { - event := new(NativeTokenStakingManagerDelegationEnded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { +// Solidity: event CompletedValidatorRemoval(bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorRemoval(log types.Log) (*NativeTokenStakingManagerCompletedValidatorRemoval, error) { + event := new(NativeTokenStakingManagerCompletedValidatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerDelegatorAddedIterator is returned from FilterDelegatorAdded and is used to iterate over the raw logs and unpacked data for DelegatorAdded events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorAddedIterator struct { - Event *NativeTokenStakingManagerDelegatorAdded // Event containing the contract specifics and raw log +// NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator is returned from FilterCompletedValidatorWeightUpdate and is used to iterate over the raw logs and unpacked data for CompletedValidatorWeightUpdate events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator struct { + Event *NativeTokenStakingManagerCompletedValidatorWeightUpdate // 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 @@ -1947,7 +1946,7 @@ type NativeTokenStakingManagerDelegatorAddedIterator struct { // 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 *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { +func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1956,7 +1955,7 @@ func (it *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorAdded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1971,7 +1970,7 @@ func (it *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorAdded) + it.Event = new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1987,73 +1986,53 @@ func (it *NativeTokenStakingManagerDelegatorAddedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegatorAddedIterator) Error() error { +func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegatorAddedIterator) Close() error { +func (it *NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegatorAdded represents a DelegatorAdded event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorAdded struct { - DelegationID [32]byte - ValidationID [32]byte - DelegatorAddress common.Address - Nonce uint64 - ValidatorWeight uint64 - DelegatorWeight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerCompletedValidatorWeightUpdate represents a CompletedValidatorWeightUpdate event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerCompletedValidatorWeightUpdate struct { + ValidationID [32]byte + Nonce uint64 + Weight uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// FilterCompletedValidatorWeightUpdate is a free log retrieval operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorAdded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*NativeTokenStakingManagerDelegatorAddedIterator, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorWeightUpdate(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegatorAddedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerCompletedValidatorWeightUpdateIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorWeightUpdate", logs: logs, sub: sub}, nil } -// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// WatchCompletedValidatorWeightUpdate is a free log subscription operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegatorAdded(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegatorAdded, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorWeightUpdate(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorWeightUpdate, validationID [][32]byte) (event.Subscription, error) { - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "CompletedValidatorWeightUpdate", validationIDRule) if err != nil { return nil, err } @@ -2063,8 +2042,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerDelegatorAdded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { + event := new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return err } event.Raw = log @@ -2085,21 +2064,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// ParseCompletedValidatorWeightUpdate is a log parse operation binding the contract event 0xc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegatorAdded(log types.Log) (*NativeTokenStakingManagerDelegatorAdded, error) { - event := new(NativeTokenStakingManagerDelegatorAdded) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { +// Solidity: event CompletedValidatorWeightUpdate(bytes32 indexed validationID, uint64 nonce, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorWeightUpdate(log types.Log) (*NativeTokenStakingManagerCompletedValidatorWeightUpdate, error) { + event := new(NativeTokenStakingManagerCompletedValidatorWeightUpdate) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorWeightUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerDelegatorRegisteredIterator is returned from FilterDelegatorRegistered and is used to iterate over the raw logs and unpacked data for DelegatorRegistered events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRegisteredIterator struct { - Event *NativeTokenStakingManagerDelegatorRegistered // Event containing the contract specifics and raw log +// NativeTokenStakingManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitializedIterator struct { + Event *NativeTokenStakingManagerInitialized // 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 @@ -2113,7 +2092,7 @@ type NativeTokenStakingManagerDelegatorRegisteredIterator struct { // 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 *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { +func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2122,7 +2101,7 @@ func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRegistered) + it.Event = new(NativeTokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2137,7 +2116,7 @@ func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRegistered) + it.Event = new(NativeTokenStakingManagerInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2153,61 +2132,41 @@ func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Error() error { +func (it *NativeTokenStakingManagerInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegatorRegisteredIterator) Close() error { +func (it *NativeTokenStakingManagerInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegatorRegistered represents a DelegatorRegistered event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRegistered struct { - DelegationID [32]byte - ValidationID [32]byte - StartTime *big.Int - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerInitialized represents a Initialized event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorRegistered(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegatorRegisteredIterator, error) { - - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } +// Solidity: event Initialized(uint64 version) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*NativeTokenStakingManagerInitializedIterator, error) { - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "Initialized") if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegatorRegisteredIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil } -// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegatorRegistered(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegatorRegistered, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { - - var delegationIDRule []interface{} - for _, delegationIDItem := range delegationID { - delegationIDRule = append(delegationIDRule, delegationIDItem) - } - var validationIDRule []interface{} - for _, validationIDItem := range validationID { - validationIDRule = append(validationIDRule, validationIDItem) - } +// Solidity: event Initialized(uint64 version) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitialized) (event.Subscription, error) { - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "Initialized") if err != nil { return nil, err } @@ -2217,8 +2176,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerDelegatorRegistered) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { + event := new(NativeTokenStakingManagerInitialized) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { return err } event.Raw = log @@ -2239,21 +2198,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegatorRegistered(log types.Log) (*NativeTokenStakingManagerDelegatorRegistered, error) { - event := new(NativeTokenStakingManagerDelegatorRegistered) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { +// Solidity: event Initialized(uint64 version) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitialized(log types.Log) (*NativeTokenStakingManagerInitialized, error) { + event := new(NativeTokenStakingManagerInitialized) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerDelegatorRemovalInitializedIterator is returned from FilterDelegatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for DelegatorRemovalInitialized events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRemovalInitializedIterator struct { - Event *NativeTokenStakingManagerDelegatorRemovalInitialized // Event containing the contract specifics and raw log +// NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator is returned from FilterInitiatedDelegatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedDelegatorRegistration events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator struct { + Event *NativeTokenStakingManagerInitiatedDelegatorRegistration // 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 @@ -2267,7 +2226,7 @@ type NativeTokenStakingManagerDelegatorRemovalInitializedIterator struct { // 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 *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() bool { +func (it *NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2276,7 +2235,7 @@ func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() b if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(NativeTokenStakingManagerInitiatedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2291,7 +2250,7 @@ func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() b // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerDelegatorRemovalInitialized) + it.Event = new(NativeTokenStakingManagerInitiatedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2307,28 +2266,33 @@ func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Next() b } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Error() error { +func (it *NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerDelegatorRemovalInitializedIterator) Close() error { +func (it *NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerDelegatorRemovalInitialized struct { - DelegationID [32]byte - ValidationID [32]byte - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerInitiatedDelegatorRegistration represents a InitiatedDelegatorRegistration event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedDelegatorRegistration struct { + DelegationID [32]byte + ValidationID [32]byte + DelegatorAddress common.Address + Nonce uint64 + ValidatorWeight uint64 + DelegatorWeight uint64 + SetWeightMessageID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// FilterInitiatedDelegatorRegistration is a free log retrieval operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerDelegatorRemovalInitializedIterator, error) { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitiatedDelegatorRegistration(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -2338,18 +2302,22 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterDeleg for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) + } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "InitiatedDelegatorRegistration", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerDelegatorRemovalInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerInitiatedDelegatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "InitiatedDelegatorRegistration", logs: logs, sub: sub}, nil } -// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// WatchInitiatedDelegatorRegistration is a free log subscription operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelegatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerDelegatorRemovalInitialized, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitiatedDelegatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitiatedDelegatorRegistration, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -2359,8 +2327,12 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) + } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "InitiatedDelegatorRegistration", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } @@ -2370,8 +2342,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerDelegatorRemovalInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { + event := new(NativeTokenStakingManagerInitiatedDelegatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRegistration", log); err != nil { return err } event.Raw = log @@ -2392,21 +2364,21 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchDelega }), nil } -// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// ParseInitiatedDelegatorRegistration is a log parse operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseDelegatorRemovalInitialized(log types.Log) (*NativeTokenStakingManagerDelegatorRemovalInitialized, error) { - event := new(NativeTokenStakingManagerDelegatorRemovalInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitiatedDelegatorRegistration(log types.Log) (*NativeTokenStakingManagerInitiatedDelegatorRegistration, error) { + event := new(NativeTokenStakingManagerInitiatedDelegatorRegistration) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenStakingManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerInitializedIterator struct { - Event *NativeTokenStakingManagerInitialized // Event containing the contract specifics and raw log +// NativeTokenStakingManagerInitiatedDelegatorRemovalIterator is returned from FilterInitiatedDelegatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedDelegatorRemoval events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedDelegatorRemovalIterator struct { + Event *NativeTokenStakingManagerInitiatedDelegatorRemoval // 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 @@ -2420,7 +2392,7 @@ type NativeTokenStakingManagerInitializedIterator struct { // 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 *NativeTokenStakingManagerInitializedIterator) Next() bool { +func (it *NativeTokenStakingManagerInitiatedDelegatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2429,7 +2401,7 @@ func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerInitialized) + it.Event = new(NativeTokenStakingManagerInitiatedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2444,7 +2416,7 @@ func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenStakingManagerInitialized) + it.Event = new(NativeTokenStakingManagerInitiatedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2460,41 +2432,60 @@ func (it *NativeTokenStakingManagerInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenStakingManagerInitializedIterator) Error() error { +func (it *NativeTokenStakingManagerInitiatedDelegatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenStakingManagerInitializedIterator) Close() error { +func (it *NativeTokenStakingManagerInitiatedDelegatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenStakingManagerInitialized represents a Initialized event raised by the NativeTokenStakingManager contract. -type NativeTokenStakingManagerInitialized struct { - Version uint64 - Raw types.Log // Blockchain specific contextual infos +// NativeTokenStakingManagerInitiatedDelegatorRemoval represents a InitiatedDelegatorRemoval event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerInitiatedDelegatorRemoval struct { + DelegationID [32]byte + ValidationID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// FilterInitiatedDelegatorRemoval is a free log retrieval operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event Initialized(uint64 version) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*NativeTokenStakingManagerInitializedIterator, error) { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitiatedDelegatorRemoval(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*NativeTokenStakingManagerInitiatedDelegatorRemovalIterator, error) { - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "Initialized") + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "InitiatedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &NativeTokenStakingManagerInitializedIterator{contract: _NativeTokenStakingManager.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &NativeTokenStakingManagerInitiatedDelegatorRemovalIterator{contract: _NativeTokenStakingManager.contract, event: "InitiatedDelegatorRemoval", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// WatchInitiatedDelegatorRemoval is a free log subscription operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event Initialized(uint64 version) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitialized) (event.Subscription, error) { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitiatedDelegatorRemoval(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitiatedDelegatorRemoval, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "Initialized") + var delegationIDRule []interface{} + for _, delegationIDItem := range delegationID { + delegationIDRule = append(delegationIDRule, delegationIDItem) + } + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "InitiatedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -2504,8 +2495,8 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitia select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenStakingManagerInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(NativeTokenStakingManagerInitiatedDelegatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRemoval", log); err != nil { return err } event.Raw = log @@ -2526,12 +2517,12 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitia }), nil } -// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// ParseInitiatedDelegatorRemoval is a log parse operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event Initialized(uint64 version) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitialized(log types.Log) (*NativeTokenStakingManagerInitialized, error) { - event := new(NativeTokenStakingManagerInitialized) - if err := _NativeTokenStakingManager.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitiatedDelegatorRemoval(log types.Log) (*NativeTokenStakingManagerInitiatedDelegatorRemoval, error) { + event := new(NativeTokenStakingManagerInitiatedDelegatorRemoval) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedDelegatorRemoval", log); err != nil { return nil, err } event.Raw = log diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index dcd990e46..9183e6ac5 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -80,19 +80,10 @@ type ValidatorMessagesValidationPeriod struct { Weight uint64 } -// ValidatorRegistrationInput is an auto generated low-level Go binding around an user-defined struct. -type ValidatorRegistrationInput struct { - NodeID []byte - BlsPublicKey []byte - RegistrationExpiry uint64 - RemainingBalanceOwner PChainOwner - DisableOwner PChainOwner -} - // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a26469706673582212200791f69edd437d04d0e564251d830362412ff8a5d0aa30e4b69042271c35f22c64736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initiateValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b5060405161388a38038061388a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b61373d8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063b771b3bc116100bf578063d588c18f11610079578063d588c18f14610312578063d5f20ff614610325578063df93d8de14610345578063ed285ae11461034f578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063b771b3bc1461025a578063bb0b193814610268578063bc5fbfec146102b3578063bee0a03f146102c7578063c974d1b6146102da578063ce161f14146102e2575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d94014610221578063a3a65e4814610234578063b6e6a2ca14610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a366004612835565b610388565b005b61015f61016f366004612864565b610626565b5f805160206136c8833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f3660046128b2565b610bcc565b6101846102423660046128b2565b610bdf565b61015f610255366004612835565b610ddd565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f805160206136c883398151915281565b61015f6102d5366004612835565b610df1565b6101cb601481565b6102f56102f03660046128b2565b610f32565b604080519283526001600160401b0390911660208301520161018e565b61015f6103203660046128e6565b6110c1565b610338610333366004612835565b6111cf565b60405161018e91906129a3565b61029b6202a30081565b61018461035d366004612c47565b611329565b61015f610370366004612d0b565b61134b565b610184610383366004612d26565b611385565b5f8181525f805160206136e883398151915260205260408082208151610100810190925280545f805160206136c883398151915293929190829060ff1660058111156103d6576103d6612922565b60058111156103e7576103e7612922565b81526020016001820180546103fb90612d91565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612d91565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612922565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612dc9565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612e21565b6040518263ffffffff1660e01b81526004016105e09190612e52565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612e64565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206136c88339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612e64565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612d0b565b6001600160a01b03161461075c576107376060840160408501612d0b565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612e7b565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612e7b565b8363ffffffff168181106107a3576107a3612ec0565b90506020028101906107b59190612ed4565b6107be90612ef2565b80516040519192505f9160068801916107d691612f6d565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612e52565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612f6d565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612e64565b90508086600601835f01516040516108a59190612f6d565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612fc9565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610954908561309c565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f9291906130bc565b60405180910390a25050806109a3906130e6565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff1683613108565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a49876113e1565b604001516040518263ffffffff1660e01b8152600401610a699190612e52565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612e64565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae2919061325e565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612e21565b90505f600282604051610b369190612f6d565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612e64565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16114f7565b610bca5f611552565b565b5f80610bd7836115c2565b509392505050565b5f5f805160206136c8833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610c13876113e1565b604001516040518263ffffffff1660e01b8152600401610c339190612e52565b6040805180830381865af4158015610c4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c719190613301565b9150915080610c9757604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610cb190612d91565b90505f03610cd55760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610cfc57610cfc612922565b14610d2f575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612dc9565b5f8281526004840160205260408120610d47916127a1565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610dcd93600190910192600160c01b909204169061339b565b60405180910390a2509392505050565b610de56114f7565b610dee8161197a565b50565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206136c88339815191529190610e3890612d91565b90505f03610e5c5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610e8357610e83612922565b14610eb6575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612dc9565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610eed92016133ad565b6020604051808303815f875af1158015610f09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2d9190612e64565b505050565b5f805f610f3e846113e1565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401610f7e9190612e52565b606060405180830381865af4158015610f99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbd91906133bf565b9250925092505f610fd85f805160206136c883398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561102c57604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9906110ac90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111055750825b90505f826001600160401b031660011480156111205750303b155b90508115801561112e575080155b1561114c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561117657845460ff60401b1916600160401b1785555b6111808787611c70565b83156111c657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6111d76127d8565b5f8281525f805160206136e88339815191526020526040908190208151610100810190925280545f805160206136c8833981519152929190829060ff16600581111561122557611225612922565b600581111561123657611236612922565b815260200160018201805461124a90612d91565b80601f016020809104026020016040519081016040528092919081815260200182805461127690612d91565b80156112c15780601f10611298576101008083540402835291602001916112c1565b820191905f5260205f20905b8154815290600101906020018083116112a457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b5f6113326114f7565b611340878787878787611c8e565b979650505050505050565b6113536114f7565b6001600160a01b03811661137c57604051631e4fbdf760e01b81525f600482015260240161051d565b610dee81611552565b6040515f905f805160206136c8833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906113c890869086906133ff565b9081526020016040518091039020549150505b92915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611445573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261146c919081019061340e565b915091508061148e57604051636b2f19e960e01b815260040160405180910390fd5b8151156114b4578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156114f0576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115297f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f6115cb6127d8565b5f805160206136c88339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6115fe886113e1565b604001516040518263ffffffff1660e01b815260040161161e9190612e52565b6040805180830381865af4158015611638573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061165c9190613301565b91509150801561168357604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff909116908111156116bb576116bb612922565b60058111156116cc576116cc612922565b81526020016001820180546116e090612d91565b80601f016020809104026020016040519081016040528092919081815260200182805461170c90612d91565b80156117575780601f1061172e57610100808354040283529160200191611757565b820191905f5260205f20905b81548152906001019060200180831161173a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156117cf576117cf612922565b141580156117f057506001815160058111156117ed576117ed612922565b14155b1561181157805160405163170cc93360e21b815261051d9190600401612dc9565b60038151600581111561182657611826612922565b036118345760048152611839565b600581525b83600601816020015160405161184f9190612f6d565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561189257611892612922565b0217905550602082015160018201906118ab9082612fc9565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f805160206136e883398151915260205260408082208151610100810190925280545f805160206136c883398151915293929190829060ff1660058111156119c8576119c8612922565b60058111156119d9576119d9612922565b81526020016001820180546119ed90612d91565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1990612d91565b8015611a645780601f10611a3b57610100808354040283529160200191611a64565b820191905f5260205f20905b815481529060010190602001808311611a4757829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611adc57611adc612922565b14611b0f575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612dc9565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611b5457611b54612922565b021790555060208201516001820190611b6d9082612fc9565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611c0d8482612061565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611c62939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b611c78612238565b611c8182612281565b611c8a8161229a565b5050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611cd257604051637fab81e560e01b815260040160405180910390fd5b5f805160206136c8833981519152426001600160401b038716111580611d0d5750611d006202a3004261349b565b866001600160401b031610155b15611d3657604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611d5990600160401b9004821685831661349b565b1115611d8357604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611d8c856122ab565b611d95846122ab565b8651603014611dbc5786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611ddf5787604051633e08a12560e11b815260040161051d9190612e52565b5f801b8160060189604051611df49190612f6d565b90815260200160405180910390205414611e23578760405163a41f772f60e01b815260040161051d9190612e52565b611e2d835f6123ca565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611ead9190613514565b5f60405180830381865af4158015611ec7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611eee91908101906135c3565b5f82815260048601602052604090209193509150611f0c8282612fc9565b5081836006018b604051611f209190612f6d565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611f5c908590600401612e52565b6020604051808303815f875af1158015611f78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9c9190612e64565b5f8481526005860160205260409020805460ff19166001908117825591925001611fc68c82612fc9565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf9061204a908e9085908e908c90613606565b60405180910390a250909998505050505050505050565b5f8281525f805160206136e8833981519152602052604081206002015481905f805160206136c883398151915290600160c01b90046001600160401b03166120a985826123ca565b5f6120b387612634565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612157573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261217e9190810190612e21565b6040518263ffffffff1660e01b815260040161219a9190612e52565b6020604051808303815f875af11580156121b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121da9190612e64565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b612289612238565b6122916126a9565b610dee816126b1565b6122a2612238565b610dee81612799565b805163ffffffff161580156122c4575060208101515115155b156122f857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561233b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b816020015151811015611c8a57602082015161235b60018361363e565b8151811061236b5761236b612ec0565b60200260200101516001600160a01b03168260200151828151811061239257612392612ec0565b60200260200101516001600160a01b031610156123c257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161233e565b5f805160206136c88339815191525f6001600160401b0380841690851611156123fe576123f78385613651565b905061240b565b6124088484613651565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580612478575060018401548151612474916001600160401b03169061349b565b8210155b156124a0576001600160401b03808416606083015282825260408201511660208201526124bf565b82816060018181516124b2919061309c565b6001600160401b03169052505b60608101516124cf906064613108565b602082015160018601546001600160401b0392909216916124fa9190600160401b900460ff16613108565b6001600160401b0316101561253357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b8581604001818151612545919061309c565b6001600160401b0316905250604081018051869190612565908390613651565b6001600160401b03169052506001840154604082015160649161259391600160401b90910460ff1690613108565b6001600160401b031610156125cc576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f805160206136e88339815191526020526040812060020180545f805160206136c8833981519152919060089061267e90600160401b90046001600160401b0316613671565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612238565b6126b9612238565b80355f805160206136c883398151915290815560146126de606084016040850161368c565b60ff1611806126fd57506126f8606083016040840161368c565b60ff16155b1561273157612712606083016040840161368c565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b612741606083016040840161368c565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561277260408301602084016136ac565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611353612238565b5080546127ad90612d91565b5f825580601f106127bc575050565b601f0160209004905f5260205f2090810190610dee919061281d565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115612831575f815560010161281e565b5090565b5f60208284031215612845575f80fd5b5035919050565b803563ffffffff8116811461285f575f80fd5b919050565b5f8060408385031215612875575f80fd5b82356001600160401b0381111561288a575f80fd5b83016080818603121561289b575f80fd5b91506128a96020840161284c565b90509250929050565b5f602082840312156128c2575f80fd5b6128cb8261284c565b9392505050565b6001600160a01b0381168114610dee575f80fd5b5f8082840360808112156128f8575f80fd5b6060811215612905575f80fd5b508291506060830135612917816128d2565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6006811061295257634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612970578181015183820152602001612958565b50505f910152565b5f815180845261298f816020860160208601612956565b601f01601f19169290920160200192915050565b602081526129b5602082018351612936565b5f60208301516101008060408501526129d2610120850183612978565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612a1160a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715612a8f57612a8f612a59565b60405290565b604051606081016001600160401b0381118282101715612a8f57612a8f612a59565b604051601f8201601f191681016001600160401b0381118282101715612adf57612adf612a59565b604052919050565b5f6001600160401b03821115612aff57612aff612a59565b50601f01601f191660200190565b5f82601f830112612b1c575f80fd5b8135612b2f612b2a82612ae7565b612ab7565b818152846020838601011115612b43575f80fd5b816020850160208301375f918101602001919091529392505050565b6001600160401b0381168114610dee575f80fd5b803561285f81612b5f565b5f60408284031215612b8e575f80fd5b612b96612a6d565b9050612ba18261284c565b81526020808301356001600160401b0380821115612bbd575f80fd5b818501915085601f830112612bd0575f80fd5b813581811115612be257612be2612a59565b8060051b9150612bf3848301612ab7565b8181529183018401918481019088841115612c0c575f80fd5b938501935b83851015612c365784359250612c26836128d2565b8282529385019390850190612c11565b808688015250505050505092915050565b5f805f805f8060c08789031215612c5c575f80fd5b86356001600160401b0380821115612c72575f80fd5b612c7e8a838b01612b0d565b97506020890135915080821115612c93575f80fd5b612c9f8a838b01612b0d565b9650612cad60408a01612b73565b95506060890135915080821115612cc2575f80fd5b612cce8a838b01612b7e565b94506080890135915080821115612ce3575f80fd5b50612cf089828a01612b7e565b925050612cff60a08801612b73565b90509295509295509295565b5f60208284031215612d1b575f80fd5b81356128cb816128d2565b5f8060208385031215612d37575f80fd5b82356001600160401b0380821115612d4d575f80fd5b818501915085601f830112612d60575f80fd5b813581811115612d6e575f80fd5b866020828501011115612d7f575f80fd5b60209290920196919550909350505050565b600181811c90821680612da557607f821691505b602082108103612dc357634e487b7160e01b5f52602260045260245ffd5b50919050565b602081016113db8284612936565b5f82601f830112612de6575f80fd5b8151612df4612b2a82612ae7565b818152846020838601011115612e08575f80fd5b612e19826020830160208701612956565b949350505050565b5f60208284031215612e31575f80fd5b81516001600160401b03811115612e46575f80fd5b612e1984828501612dd7565b602081525f6128cb6020830184612978565b5f60208284031215612e74575f80fd5b5051919050565b5f808335601e19843603018112612e90575f80fd5b8301803591506001600160401b03821115612ea9575f80fd5b6020019150600581901b3603821315612231575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612ee8575f80fd5b9190910192915050565b5f60608236031215612f02575f80fd5b612f0a612a95565b82356001600160401b0380821115612f20575f80fd5b612f2c36838701612b0d565b83526020850135915080821115612f41575f80fd5b50612f4e36828601612b0d565b6020830152506040830135612f6281612b5f565b604082015292915050565b5f8251612ee8818460208701612956565b601f821115610f2d57805f5260205f20601f840160051c81016020851015612fa35750805b601f840160051c820191505b81811015612fc2575f8155600101612faf565b5050505050565b81516001600160401b03811115612fe257612fe2612a59565b612ff681612ff08454612d91565b84612f7e565b602080601f831160018114613029575f84156130125750858301515b5f19600386901b1c1916600185901b178555613080565b5f85815260208120601f198616915b8281101561305757888601518255948401946001909101908401613038565b508582101561307457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156114f0576114f0613088565b604081525f6130ce6040830185612978565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036130fe576130fe613088565b6001019392505050565b6001600160401b0381811683821602808216919082811461312b5761312b613088565b505092915050565b5f808335601e19843603018112613148575f80fd5b83016020810192503590506001600160401b03811115613166575f80fd5b803603821315612231575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561325157848303601f19018952813536889003605e190181126131d8575f80fd5b870160606131e68280613133565b8287526131f68388018284613174565b9250505061320686830183613133565b86830388880152613218838284613174565b92505050604080830135925061322d83612b5f565b6001600160401b0392909216949091019390935297830197908301906001016131b3565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135613282816128d2565b6001600160a01b031660608381019190915283013536849003601e190181126132a9575f80fd5b83016020810190356001600160401b038111156132c4575f80fd5b8060051b36038213156132d5575f80fd5b6080808501526132e960a08501828461319c565b95945050505050565b8051801515811461285f575f80fd5b5f8060408385031215613312575f80fd5b825191506128a9602084016132f2565b5f815461332e81612d91565b80855260206001838116801561334b576001811461336557613390565b60ff1985168884015283151560051b880183019550613390565b865f52825f205f5b858110156133885781548a820186015290830190840161336d565b890184019650505b505050505092915050565b604081525f6130ce6040830185613322565b602081525f6128cb6020830184613322565b5f805f606084860312156133d1575f80fd5b8351925060208401516133e381612b5f565b60408501519092506133f481612b5f565b809150509250925092565b818382375f9101908152919050565b5f806040838503121561341f575f80fd5b82516001600160401b0380821115613435575f80fd5b9084019060608287031215613448575f80fd5b613450612a95565b825181526020830151613462816128d2565b6020820152604083015182811115613478575f80fd5b61348488828601612dd7565b60408301525093506128a9915050602084016132f2565b808201808211156113db576113db613088565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135095784516001600160a01b031682529383019360019290920191908301906134e0565b509695505050505050565b60208152815160208201525f602083015160e0604084015261353a610100840182612978565b90506040840151601f19808584030160608601526135588383612978565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261358883836134ae565b925060a08601519150808584030160c0860152506135a682826134ae565b91505060c0840151610bd760e08501826001600160401b03169052565b5f80604083850312156135d4575f80fd5b8251915060208301516001600160401b038111156135f0575f80fd5b6135fc85828601612dd7565b9150509250929050565b608081525f6136186080830187612978565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b818103818111156113db576113db613088565b6001600160401b038281168282160390808211156114f0576114f0613088565b5f6001600160401b038083168181036130fe576130fe613088565b5f6020828403121561369c575f80fd5b813560ff811681146128cb575f80fd5b5f602082840312156136bc575f80fd5b81356128cb81612b5f56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a264697066735822122052f4c0f8e0b9626ebc248c9a5bbfe5d04d9af9052f4c89dacae6343f5fb139d564736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. @@ -721,67 +712,67 @@ func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) Initialize(set return _PoAValidatorManager.Contract.Initialize(&_PoAValidatorManager.TransactOpts, settings, initialOwner) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x97fb70d4. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeEndValidation(bytes32 validationID) returns() -func (_PoAValidatorManager *PoAValidatorManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { - return _PoAValidatorManager.contract.Transact(opts, "initializeEndValidation", validationID) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_PoAValidatorManager *PoAValidatorManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x97fb70d4. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeEndValidation(bytes32 validationID) returns() -func (_PoAValidatorManager *PoAValidatorManagerSession) InitializeEndValidation(validationID [32]byte) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.InitializeEndValidation(&_PoAValidatorManager.TransactOpts, validationID) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_PoAValidatorManager *PoAValidatorManagerSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.InitializeValidatorSet(&_PoAValidatorManager.TransactOpts, conversionData, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x97fb70d4. +// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. // -// Solidity: function initializeEndValidation(bytes32 validationID) returns() -func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) InitializeEndValidation(validationID [32]byte) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.InitializeEndValidation(&_PoAValidatorManager.TransactOpts, validationID) +// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() +func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.InitializeValidatorSet(&_PoAValidatorManager.TransactOpts, conversionData, messageIndex) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x9ba96b86. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0xed285ae1. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint64 weight) returns(bytes32 validationID) -func (_PoAValidatorManager *PoAValidatorManagerTransactor) InitializeValidatorRegistration(opts *bind.TransactOpts, registrationInput ValidatorRegistrationInput, weight uint64) (*types.Transaction, error) { - return _PoAValidatorManager.contract.Transact(opts, "initializeValidatorRegistration", registrationInput, weight) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint64 weight) returns(bytes32 validationID) +func (_PoAValidatorManager *PoAValidatorManagerTransactor) InitiateValidatorRegistration(opts *bind.TransactOpts, nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, weight uint64) (*types.Transaction, error) { + return _PoAValidatorManager.contract.Transact(opts, "initiateValidatorRegistration", nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, weight) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x9ba96b86. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0xed285ae1. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint64 weight) returns(bytes32 validationID) -func (_PoAValidatorManager *PoAValidatorManagerSession) InitializeValidatorRegistration(registrationInput ValidatorRegistrationInput, weight uint64) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.InitializeValidatorRegistration(&_PoAValidatorManager.TransactOpts, registrationInput, weight) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint64 weight) returns(bytes32 validationID) +func (_PoAValidatorManager *PoAValidatorManagerSession) InitiateValidatorRegistration(nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, weight uint64) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.InitiateValidatorRegistration(&_PoAValidatorManager.TransactOpts, nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, weight) } -// InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x9ba96b86. +// InitiateValidatorRegistration is a paid mutator transaction binding the contract method 0xed285ae1. // -// Solidity: function initializeValidatorRegistration((bytes,bytes,uint64,(uint32,address[]),(uint32,address[])) registrationInput, uint64 weight) returns(bytes32 validationID) -func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) InitializeValidatorRegistration(registrationInput ValidatorRegistrationInput, weight uint64) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.InitializeValidatorRegistration(&_PoAValidatorManager.TransactOpts, registrationInput, weight) +// Solidity: function initiateValidatorRegistration(bytes nodeID, bytes blsPublicKey, uint64 registrationExpiry, (uint32,address[]) remainingBalanceOwner, (uint32,address[]) disableOwner, uint64 weight) returns(bytes32 validationID) +func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) InitiateValidatorRegistration(nodeID []byte, blsPublicKey []byte, registrationExpiry uint64, remainingBalanceOwner PChainOwner, disableOwner PChainOwner, weight uint64) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.InitiateValidatorRegistration(&_PoAValidatorManager.TransactOpts, nodeID, blsPublicKey, registrationExpiry, remainingBalanceOwner, disableOwner, weight) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb6e6a2ca. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_PoAValidatorManager *PoAValidatorManagerTransactor) InitializeValidatorSet(opts *bind.TransactOpts, conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _PoAValidatorManager.contract.Transact(opts, "initializeValidatorSet", conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID) returns() +func (_PoAValidatorManager *PoAValidatorManagerTransactor) InitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte) (*types.Transaction, error) { + return _PoAValidatorManager.contract.Transact(opts, "initiateValidatorRemoval", validationID) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb6e6a2ca. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_PoAValidatorManager *PoAValidatorManagerSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.InitializeValidatorSet(&_PoAValidatorManager.TransactOpts, conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID) returns() +func (_PoAValidatorManager *PoAValidatorManagerSession) InitiateValidatorRemoval(validationID [32]byte) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.InitiateValidatorRemoval(&_PoAValidatorManager.TransactOpts, validationID) } -// InitializeValidatorSet is a paid mutator transaction binding the contract method 0x20d91b7a. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb6e6a2ca. // -// Solidity: function initializeValidatorSet((bytes32,bytes32,address,(bytes,bytes,uint64)[]) conversionData, uint32 messageIndex) returns() -func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) InitializeValidatorSet(conversionData ConversionData, messageIndex uint32) (*types.Transaction, error) { - return _PoAValidatorManager.Contract.InitializeValidatorSet(&_PoAValidatorManager.TransactOpts, conversionData, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID) returns() +func (_PoAValidatorManager *PoAValidatorManagerTransactorSession) InitiateValidatorRemoval(validationID [32]byte) (*types.Transaction, error) { + return _PoAValidatorManager.Contract.InitiateValidatorRemoval(&_PoAValidatorManager.TransactOpts, validationID) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. diff --git a/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go b/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go index 2fc70bcaf..13e84fd3c 100644 --- a/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go +++ b/abi-bindings/go/validator-manager/interfaces/IPoSValidatorManager/IPoSValidatorManager.go @@ -63,7 +63,7 @@ type ValidatorMessagesValidationPeriod struct { // IPoSValidatorManagerMetaData contains all meta data concerning the IPoSValidatorManager contract. var IPoSValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"CompletedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InitiatedDelegatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"forceInitiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initiateDelegatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"initiateValidatorRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // IPoSValidatorManagerABI is the input ABI used to generate the binding from. @@ -296,214 +296,214 @@ func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) CompleteDele return _IPoSValidatorManager.Contract.CompleteDelegatorRegistration(&_IPoSValidatorManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) CompleteEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "completeEndDelegation", delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) CompleteDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "completeDelegatorRemoval", delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.CompleteEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) CompleteDelegatorRemoval(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.CompleteDelegatorRemoval(&_IPoSValidatorManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// CompleteDelegatorRemoval is a paid mutator transaction binding the contract method 0x13409645. // -// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.CompleteEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, messageIndex) +// Solidity: function completeDelegatorRemoval(bytes32 delegationID, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) CompleteDelegatorRemoval(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.CompleteDelegatorRemoval(&_IPoSValidatorManager.TransactOpts, delegationID, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitializeEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "forceInitializeEndDelegation", delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitiateDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "forceInitiateDelegatorRemoval", delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateDelegatorRemoval(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation is a paid mutator transaction binding the contract method 0x1ec44724. +// ForceInitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x27bf60cd. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateDelegatorRemoval(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "forceInitializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitiateDelegatorRemoval0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "forceInitiateDelegatorRemoval0", delegationID, includeUptimeProof, messageIndex, recipientAddress) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndDelegation0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateDelegatorRemoval0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) } -// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// ForceInitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0xaac80c39. // -// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndDelegation0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function forceInitiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateDelegatorRemoval0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "forceInitializeEndValidation", validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "forceInitiateValidatorRemoval", validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndValidation(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateValidatorRemoval(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. +// ForceInitiateValidatorRemoval is a paid mutator transaction binding the contract method 0x16679564. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndValidation(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateValidatorRemoval(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "forceInitializeEndValidation0", validationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ForceInitiateValidatorRemoval0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "forceInitiateValidatorRemoval0", validationID, includeUptimeProof, messageIndex, recipientAddress) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndValidation0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) ForceInitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateValidatorRemoval0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) } -// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// ForceInitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0x4b396bcc. // -// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ForceInitializeEndValidation0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function forceInitiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ForceInitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ForceInitiateValidatorRemoval0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitializeEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "initializeEndDelegation", delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitiateDelegatorRemoval(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "initiateDelegatorRemoval", delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateDelegatorRemoval(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation is a paid mutator transaction binding the contract method 0x0118acc4. +// InitiateDelegatorRemoval is a paid mutator transaction binding the contract method 0x2aa56638. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeEndDelegation(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndDelegation(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitiateDelegatorRemoval(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateDelegatorRemoval(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "initializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitiateDelegatorRemoval0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "initiateDelegatorRemoval0", delegationID, includeUptimeProof, messageIndex, recipientAddress) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndDelegation0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateDelegatorRemoval0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) } -// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// InitiateDelegatorRemoval0 is a paid mutator transaction binding the contract method 0x8af5499e. // -// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndDelegation0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function initiateDelegatorRemoval(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitiateDelegatorRemoval0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateDelegatorRemoval0(&_IPoSValidatorManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, recipientAddress) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitiateValidatorRemoval(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "initiateValidatorRemoval", validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndValidation(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateValidatorRemoval(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// InitiateValidatorRemoval is a paid mutator transaction binding the contract method 0xb2c1712e. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndValidation(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitiateValidatorRemoval(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateValidatorRemoval(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "initializeEndValidation0", validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) InitiateValidatorRemoval0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "initiateValidatorRemoval0", validationID, includeUptimeProof, messageIndex, recipientAddress) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndValidation0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) InitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateValidatorRemoval0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) } -// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. +// InitiateValidatorRemoval0 is a paid mutator transaction binding the contract method 0xcc71bbba. // -// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.InitializeEndValidation0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +// Solidity: function initiateValidatorRemoval(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address recipientAddress) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) InitiateValidatorRemoval0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, recipientAddress common.Address) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.InitiateValidatorRemoval0(&_IPoSValidatorManager.TransactOpts, validationID, includeUptimeProof, messageIndex, recipientAddress) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ResendUpdateDelegation(opts *bind.TransactOpts, delegationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.contract.Transact(opts, "resendUpdateDelegation", delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactor) ResendUpdateDelegator(opts *bind.TransactOpts, delegationID [32]byte) (*types.Transaction, error) { + return _IPoSValidatorManager.contract.Transact(opts, "resendUpdateDelegator", delegationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerSession) ResendUpdateDelegation(delegationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ResendUpdateDelegation(&_IPoSValidatorManager.TransactOpts, delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerSession) ResendUpdateDelegator(delegationID [32]byte) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ResendUpdateDelegator(&_IPoSValidatorManager.TransactOpts, delegationID) } -// ResendUpdateDelegation is a paid mutator transaction binding the contract method 0xba3a4b97. +// ResendUpdateDelegator is a paid mutator transaction binding the contract method 0x245dafcb. // -// Solidity: function resendUpdateDelegation(bytes32 delegationID) returns() -func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ResendUpdateDelegation(delegationID [32]byte) (*types.Transaction, error) { - return _IPoSValidatorManager.Contract.ResendUpdateDelegation(&_IPoSValidatorManager.TransactOpts, delegationID) +// Solidity: function resendUpdateDelegator(bytes32 delegationID) returns() +func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) ResendUpdateDelegator(delegationID [32]byte) (*types.Transaction, error) { + return _IPoSValidatorManager.Contract.ResendUpdateDelegator(&_IPoSValidatorManager.TransactOpts, delegationID) } // SubmitUptimeProof is a paid mutator transaction binding the contract method 0x25e1c776. @@ -527,9 +527,9 @@ func (_IPoSValidatorManager *IPoSValidatorManagerTransactorSession) SubmitUptime return _IPoSValidatorManager.Contract.SubmitUptimeProof(&_IPoSValidatorManager.TransactOpts, validationID, messageIndex) } -// IPoSValidatorManagerDelegationEndedIterator is returned from FilterDelegationEnded and is used to iterate over the raw logs and unpacked data for DelegationEnded events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegationEndedIterator struct { - Event *IPoSValidatorManagerDelegationEnded // Event containing the contract specifics and raw log +// IPoSValidatorManagerCompletedDelegatorRegistrationIterator is returned from FilterCompletedDelegatorRegistration and is used to iterate over the raw logs and unpacked data for CompletedDelegatorRegistration events raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerCompletedDelegatorRegistrationIterator struct { + Event *IPoSValidatorManagerCompletedDelegatorRegistration // 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 @@ -543,7 +543,7 @@ type IPoSValidatorManagerDelegationEndedIterator struct { // 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 *IPoSValidatorManagerDelegationEndedIterator) Next() bool { +func (it *IPoSValidatorManagerCompletedDelegatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -552,7 +552,7 @@ func (it *IPoSValidatorManagerDelegationEndedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegationEnded) + it.Event = new(IPoSValidatorManagerCompletedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -567,7 +567,7 @@ func (it *IPoSValidatorManagerDelegationEndedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegationEnded) + it.Event = new(IPoSValidatorManagerCompletedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -583,30 +583,29 @@ func (it *IPoSValidatorManagerDelegationEndedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerDelegationEndedIterator) Error() error { +func (it *IPoSValidatorManagerCompletedDelegatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IPoSValidatorManagerDelegationEndedIterator) Close() error { +func (it *IPoSValidatorManagerCompletedDelegatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// IPoSValidatorManagerDelegationEnded represents a DelegationEnded event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegationEnded struct { +// IPoSValidatorManagerCompletedDelegatorRegistration represents a CompletedDelegatorRegistration event raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerCompletedDelegatorRegistration struct { DelegationID [32]byte ValidationID [32]byte - Rewards *big.Int - Fees *big.Int + StartTime *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterDelegationEnded is a free log retrieval operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// FilterCompletedDelegatorRegistration is a free log retrieval operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegationEnded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*IPoSValidatorManagerDelegationEndedIterator, error) { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterCompletedDelegatorRegistration(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*IPoSValidatorManagerCompletedDelegatorRegistrationIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -617,17 +616,17 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegationEnded validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "CompletedDelegatorRegistration", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &IPoSValidatorManagerDelegationEndedIterator{contract: _IPoSValidatorManager.contract, event: "DelegationEnded", logs: logs, sub: sub}, nil + return &IPoSValidatorManagerCompletedDelegatorRegistrationIterator{contract: _IPoSValidatorManager.contract, event: "CompletedDelegatorRegistration", logs: logs, sub: sub}, nil } -// WatchDelegationEnded is a free log subscription operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// WatchCompletedDelegatorRegistration is a free log subscription operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegationEnded(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerDelegationEnded, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchCompletedDelegatorRegistration(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerCompletedDelegatorRegistration, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -638,7 +637,7 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegationEnded( validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "DelegationEnded", delegationIDRule, validationIDRule) + logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "CompletedDelegatorRegistration", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -648,8 +647,8 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegationEnded( select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerDelegationEnded) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { + event := new(IPoSValidatorManagerCompletedDelegatorRegistration) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "CompletedDelegatorRegistration", log); err != nil { return err } event.Raw = log @@ -670,21 +669,21 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegationEnded( }), nil } -// ParseDelegationEnded is a log parse operation binding the contract event 0x8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993. +// ParseCompletedDelegatorRegistration is a log parse operation binding the contract event 0x3886b7389bccb22cac62838dee3f400cf8b22289295283e01a2c7093f93dd5aa. // -// Solidity: event DelegationEnded(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseDelegationEnded(log types.Log) (*IPoSValidatorManagerDelegationEnded, error) { - event := new(IPoSValidatorManagerDelegationEnded) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegationEnded", log); err != nil { +// Solidity: event CompletedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseCompletedDelegatorRegistration(log types.Log) (*IPoSValidatorManagerCompletedDelegatorRegistration, error) { + event := new(IPoSValidatorManagerCompletedDelegatorRegistration) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "CompletedDelegatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IPoSValidatorManagerDelegatorAddedIterator is returned from FilterDelegatorAdded and is used to iterate over the raw logs and unpacked data for DelegatorAdded events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegatorAddedIterator struct { - Event *IPoSValidatorManagerDelegatorAdded // Event containing the contract specifics and raw log +// IPoSValidatorManagerCompletedDelegatorRemovalIterator is returned from FilterCompletedDelegatorRemoval and is used to iterate over the raw logs and unpacked data for CompletedDelegatorRemoval events raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerCompletedDelegatorRemovalIterator struct { + Event *IPoSValidatorManagerCompletedDelegatorRemoval // 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 @@ -698,7 +697,7 @@ type IPoSValidatorManagerDelegatorAddedIterator struct { // 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 *IPoSValidatorManagerDelegatorAddedIterator) Next() bool { +func (it *IPoSValidatorManagerCompletedDelegatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -707,7 +706,7 @@ func (it *IPoSValidatorManagerDelegatorAddedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegatorAdded) + it.Event = new(IPoSValidatorManagerCompletedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -722,7 +721,7 @@ func (it *IPoSValidatorManagerDelegatorAddedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegatorAdded) + it.Event = new(IPoSValidatorManagerCompletedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -738,33 +737,30 @@ func (it *IPoSValidatorManagerDelegatorAddedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerDelegatorAddedIterator) Error() error { +func (it *IPoSValidatorManagerCompletedDelegatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IPoSValidatorManagerDelegatorAddedIterator) Close() error { +func (it *IPoSValidatorManagerCompletedDelegatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// IPoSValidatorManagerDelegatorAdded represents a DelegatorAdded event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegatorAdded struct { - DelegationID [32]byte - ValidationID [32]byte - DelegatorAddress common.Address - Nonce uint64 - ValidatorWeight uint64 - DelegatorWeight uint64 - SetWeightMessageID [32]byte - Raw types.Log // Blockchain specific contextual infos +// IPoSValidatorManagerCompletedDelegatorRemoval represents a CompletedDelegatorRemoval event raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerCompletedDelegatorRemoval struct { + DelegationID [32]byte + ValidationID [32]byte + Rewards *big.Int + Fees *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorAdded is a free log retrieval operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// FilterCompletedDelegatorRemoval is a free log retrieval operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegatorAdded(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*IPoSValidatorManagerDelegatorAddedIterator, error) { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterCompletedDelegatorRemoval(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*IPoSValidatorManagerCompletedDelegatorRemovalIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -774,22 +770,18 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegatorAdded( for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "CompletedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &IPoSValidatorManagerDelegatorAddedIterator{contract: _IPoSValidatorManager.contract, event: "DelegatorAdded", logs: logs, sub: sub}, nil + return &IPoSValidatorManagerCompletedDelegatorRemovalIterator{contract: _IPoSValidatorManager.contract, event: "CompletedDelegatorRemoval", logs: logs, sub: sub}, nil } -// WatchDelegatorAdded is a free log subscription operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// WatchCompletedDelegatorRemoval is a free log subscription operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorAdded(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerDelegatorAdded, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchCompletedDelegatorRemoval(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerCompletedDelegatorRemoval, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -799,12 +791,8 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorAdded(o for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } - var delegatorAddressRule []interface{} - for _, delegatorAddressItem := range delegatorAddress { - delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) - } - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "DelegatorAdded", delegationIDRule, validationIDRule, delegatorAddressRule) + logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "CompletedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -814,8 +802,8 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorAdded(o select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerDelegatorAdded) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { + event := new(IPoSValidatorManagerCompletedDelegatorRemoval) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "CompletedDelegatorRemoval", log); err != nil { return err } event.Raw = log @@ -836,21 +824,21 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorAdded(o }), nil } -// ParseDelegatorAdded is a log parse operation binding the contract event 0xb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426. +// ParseCompletedDelegatorRemoval is a log parse operation binding the contract event 0x5ecc5b26a9265302cf871229b3d983e5ca57dbb1448966c6c58b2d3c68bc7f7e. // -// Solidity: event DelegatorAdded(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseDelegatorAdded(log types.Log) (*IPoSValidatorManagerDelegatorAdded, error) { - event := new(IPoSValidatorManagerDelegatorAdded) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegatorAdded", log); err != nil { +// Solidity: event CompletedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 rewards, uint256 fees) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseCompletedDelegatorRemoval(log types.Log) (*IPoSValidatorManagerCompletedDelegatorRemoval, error) { + event := new(IPoSValidatorManagerCompletedDelegatorRemoval) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "CompletedDelegatorRemoval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IPoSValidatorManagerDelegatorRegisteredIterator is returned from FilterDelegatorRegistered and is used to iterate over the raw logs and unpacked data for DelegatorRegistered events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegatorRegisteredIterator struct { - Event *IPoSValidatorManagerDelegatorRegistered // Event containing the contract specifics and raw log +// IPoSValidatorManagerInitiatedDelegatorRegistrationIterator is returned from FilterInitiatedDelegatorRegistration and is used to iterate over the raw logs and unpacked data for InitiatedDelegatorRegistration events raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerInitiatedDelegatorRegistrationIterator struct { + Event *IPoSValidatorManagerInitiatedDelegatorRegistration // 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 @@ -864,7 +852,7 @@ type IPoSValidatorManagerDelegatorRegisteredIterator struct { // 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 *IPoSValidatorManagerDelegatorRegisteredIterator) Next() bool { +func (it *IPoSValidatorManagerInitiatedDelegatorRegistrationIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -873,7 +861,7 @@ func (it *IPoSValidatorManagerDelegatorRegisteredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegatorRegistered) + it.Event = new(IPoSValidatorManagerInitiatedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -888,7 +876,7 @@ func (it *IPoSValidatorManagerDelegatorRegisteredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegatorRegistered) + it.Event = new(IPoSValidatorManagerInitiatedDelegatorRegistration) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -904,29 +892,33 @@ func (it *IPoSValidatorManagerDelegatorRegisteredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerDelegatorRegisteredIterator) Error() error { +func (it *IPoSValidatorManagerInitiatedDelegatorRegistrationIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IPoSValidatorManagerDelegatorRegisteredIterator) Close() error { +func (it *IPoSValidatorManagerInitiatedDelegatorRegistrationIterator) Close() error { it.sub.Unsubscribe() return nil } -// IPoSValidatorManagerDelegatorRegistered represents a DelegatorRegistered event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegatorRegistered struct { - DelegationID [32]byte - ValidationID [32]byte - StartTime *big.Int - Raw types.Log // Blockchain specific contextual infos +// IPoSValidatorManagerInitiatedDelegatorRegistration represents a InitiatedDelegatorRegistration event raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerInitiatedDelegatorRegistration struct { + DelegationID [32]byte + ValidationID [32]byte + DelegatorAddress common.Address + Nonce uint64 + ValidatorWeight uint64 + DelegatorWeight uint64 + SetWeightMessageID [32]byte + Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRegistered is a free log retrieval operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// FilterInitiatedDelegatorRegistration is a free log retrieval operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegatorRegistered(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*IPoSValidatorManagerDelegatorRegisteredIterator, error) { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterInitiatedDelegatorRegistration(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (*IPoSValidatorManagerInitiatedDelegatorRegistrationIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -936,18 +928,22 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegatorRegist for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) + } - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "InitiatedDelegatorRegistration", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } - return &IPoSValidatorManagerDelegatorRegisteredIterator{contract: _IPoSValidatorManager.contract, event: "DelegatorRegistered", logs: logs, sub: sub}, nil + return &IPoSValidatorManagerInitiatedDelegatorRegistrationIterator{contract: _IPoSValidatorManager.contract, event: "InitiatedDelegatorRegistration", logs: logs, sub: sub}, nil } -// WatchDelegatorRegistered is a free log subscription operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// WatchInitiatedDelegatorRegistration is a free log subscription operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRegistered(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerDelegatorRegistered, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchInitiatedDelegatorRegistration(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerInitiatedDelegatorRegistration, delegationID [][32]byte, validationID [][32]byte, delegatorAddress []common.Address) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -957,8 +953,12 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRegiste for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var delegatorAddressRule []interface{} + for _, delegatorAddressItem := range delegatorAddress { + delegatorAddressRule = append(delegatorAddressRule, delegatorAddressItem) + } - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "DelegatorRegistered", delegationIDRule, validationIDRule) + logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "InitiatedDelegatorRegistration", delegationIDRule, validationIDRule, delegatorAddressRule) if err != nil { return nil, err } @@ -968,8 +968,8 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRegiste select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerDelegatorRegistered) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { + event := new(IPoSValidatorManagerInitiatedDelegatorRegistration) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "InitiatedDelegatorRegistration", log); err != nil { return err } event.Raw = log @@ -990,21 +990,21 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRegiste }), nil } -// ParseDelegatorRegistered is a log parse operation binding the contract event 0x047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6. +// ParseInitiatedDelegatorRegistration is a log parse operation binding the contract event 0xdf91f7709a30fda3fc5fc5dc97cb5d5b05e67e193dccaaef3cb332d23fda83d1. // -// Solidity: event DelegatorRegistered(bytes32 indexed delegationID, bytes32 indexed validationID, uint256 startTime) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseDelegatorRegistered(log types.Log) (*IPoSValidatorManagerDelegatorRegistered, error) { - event := new(IPoSValidatorManagerDelegatorRegistered) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegatorRegistered", log); err != nil { +// Solidity: event InitiatedDelegatorRegistration(bytes32 indexed delegationID, bytes32 indexed validationID, address indexed delegatorAddress, uint64 nonce, uint64 validatorWeight, uint64 delegatorWeight, bytes32 setWeightMessageID) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseInitiatedDelegatorRegistration(log types.Log) (*IPoSValidatorManagerInitiatedDelegatorRegistration, error) { + event := new(IPoSValidatorManagerInitiatedDelegatorRegistration) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "InitiatedDelegatorRegistration", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IPoSValidatorManagerDelegatorRemovalInitializedIterator is returned from FilterDelegatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for DelegatorRemovalInitialized events raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegatorRemovalInitializedIterator struct { - Event *IPoSValidatorManagerDelegatorRemovalInitialized // Event containing the contract specifics and raw log +// IPoSValidatorManagerInitiatedDelegatorRemovalIterator is returned from FilterInitiatedDelegatorRemoval and is used to iterate over the raw logs and unpacked data for InitiatedDelegatorRemoval events raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerInitiatedDelegatorRemovalIterator struct { + Event *IPoSValidatorManagerInitiatedDelegatorRemoval // 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 @@ -1018,7 +1018,7 @@ type IPoSValidatorManagerDelegatorRemovalInitializedIterator struct { // 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 *IPoSValidatorManagerDelegatorRemovalInitializedIterator) Next() bool { +func (it *IPoSValidatorManagerInitiatedDelegatorRemovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1027,7 +1027,7 @@ func (it *IPoSValidatorManagerDelegatorRemovalInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegatorRemovalInitialized) + it.Event = new(IPoSValidatorManagerInitiatedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1042,7 +1042,7 @@ func (it *IPoSValidatorManagerDelegatorRemovalInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IPoSValidatorManagerDelegatorRemovalInitialized) + it.Event = new(IPoSValidatorManagerInitiatedDelegatorRemoval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1058,28 +1058,28 @@ func (it *IPoSValidatorManagerDelegatorRemovalInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IPoSValidatorManagerDelegatorRemovalInitializedIterator) Error() error { +func (it *IPoSValidatorManagerInitiatedDelegatorRemovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IPoSValidatorManagerDelegatorRemovalInitializedIterator) Close() error { +func (it *IPoSValidatorManagerInitiatedDelegatorRemovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// IPoSValidatorManagerDelegatorRemovalInitialized represents a DelegatorRemovalInitialized event raised by the IPoSValidatorManager contract. -type IPoSValidatorManagerDelegatorRemovalInitialized struct { +// IPoSValidatorManagerInitiatedDelegatorRemoval represents a InitiatedDelegatorRemoval event raised by the IPoSValidatorManager contract. +type IPoSValidatorManagerInitiatedDelegatorRemoval struct { DelegationID [32]byte ValidationID [32]byte Raw types.Log // Blockchain specific contextual infos } -// FilterDelegatorRemovalInitialized is a free log retrieval operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// FilterInitiatedDelegatorRemoval is a free log retrieval operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegatorRemovalInitialized(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*IPoSValidatorManagerDelegatorRemovalInitializedIterator, error) { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterInitiatedDelegatorRemoval(opts *bind.FilterOpts, delegationID [][32]byte, validationID [][32]byte) (*IPoSValidatorManagerInitiatedDelegatorRemovalIterator, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1090,17 +1090,17 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) FilterDelegatorRemova validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _IPoSValidatorManager.contract.FilterLogs(opts, "InitiatedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } - return &IPoSValidatorManagerDelegatorRemovalInitializedIterator{contract: _IPoSValidatorManager.contract, event: "DelegatorRemovalInitialized", logs: logs, sub: sub}, nil + return &IPoSValidatorManagerInitiatedDelegatorRemovalIterator{contract: _IPoSValidatorManager.contract, event: "InitiatedDelegatorRemoval", logs: logs, sub: sub}, nil } -// WatchDelegatorRemovalInitialized is a free log subscription operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// WatchInitiatedDelegatorRemoval is a free log subscription operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRemovalInitialized(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerDelegatorRemovalInitialized, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchInitiatedDelegatorRemoval(opts *bind.WatchOpts, sink chan<- *IPoSValidatorManagerInitiatedDelegatorRemoval, delegationID [][32]byte, validationID [][32]byte) (event.Subscription, error) { var delegationIDRule []interface{} for _, delegationIDItem := range delegationID { @@ -1111,7 +1111,7 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRemoval validationIDRule = append(validationIDRule, validationIDItem) } - logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "DelegatorRemovalInitialized", delegationIDRule, validationIDRule) + logs, sub, err := _IPoSValidatorManager.contract.WatchLogs(opts, "InitiatedDelegatorRemoval", delegationIDRule, validationIDRule) if err != nil { return nil, err } @@ -1121,8 +1121,8 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRemoval select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IPoSValidatorManagerDelegatorRemovalInitialized) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { + event := new(IPoSValidatorManagerInitiatedDelegatorRemoval) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "InitiatedDelegatorRemoval", log); err != nil { return err } event.Raw = log @@ -1143,12 +1143,12 @@ func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) WatchDelegatorRemoval }), nil } -// ParseDelegatorRemovalInitialized is a log parse operation binding the contract event 0x366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57. +// ParseInitiatedDelegatorRemoval is a log parse operation binding the contract event 0x5abe543af12bb7f76f6fa9daaa9d95d181c5e90566df58d3c012216b6245eeaf. // -// Solidity: event DelegatorRemovalInitialized(bytes32 indexed delegationID, bytes32 indexed validationID) -func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseDelegatorRemovalInitialized(log types.Log) (*IPoSValidatorManagerDelegatorRemovalInitialized, error) { - event := new(IPoSValidatorManagerDelegatorRemovalInitialized) - if err := _IPoSValidatorManager.contract.UnpackLog(event, "DelegatorRemovalInitialized", log); err != nil { +// Solidity: event InitiatedDelegatorRemoval(bytes32 indexed delegationID, bytes32 indexed validationID) +func (_IPoSValidatorManager *IPoSValidatorManagerFilterer) ParseInitiatedDelegatorRemoval(log types.Log) (*IPoSValidatorManagerInitiatedDelegatorRemoval, error) { + event := new(IPoSValidatorManagerInitiatedDelegatorRemoval) + if err := _IPoSValidatorManager.contract.UnpackLog(event, "InitiatedDelegatorRemoval", log); err != nil { return nil, err } event.Raw = log diff --git a/tests/flows/validator-manager/erc20_token_staking.go b/tests/flows/validator-manager/erc20_token_staking.go index a561a9dc3..c9ec90346 100644 --- a/tests/flows/validator-manager/erc20_token_staking.go +++ b/tests/flows/validator-manager/erc20_token_staking.go @@ -142,7 +142,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) { ) initRegistrationEvent, err := utils.GetEventFromLogs( receipt.Logs, - erc20StakingManager.ParseDelegatorAdded, + erc20StakingManager.ParseInitiatedDelegatorRegistration, ) Expect(err).Should(BeNil()) delegationID = initRegistrationEvent.DelegationID @@ -185,7 +185,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) { // Check that the validator is registered in the staking contract registrationEvent, err := utils.GetEventFromLogs( receipt.Logs, - erc20StakingManager.ParseDelegatorRegistered, + erc20StakingManager.ParseCompletedDelegatorRegistration, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -207,7 +207,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) { ) delegatorRemovalEvent, err := utils.GetEventFromLogs( receipt.Logs, - erc20StakingManager.ParseDelegatorRemovalInitialized, + erc20StakingManager.ParseInitiatedDelegatorRemoval, ) Expect(err).Should(BeNil()) Expect(delegatorRemovalEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -254,7 +254,7 @@ func ERC20TokenStakingManager(network *localnetwork.LocalNetwork) { // Check that the delegator has been delisted from the staking contract registrationEvent, err := utils.GetEventFromLogs( receipt.Logs, - erc20StakingManager.ParseDelegationEnded, + erc20StakingManager.ParseCompletedDelegatorRemoval, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) diff --git a/tests/flows/validator-manager/native_token_staking.go b/tests/flows/validator-manager/native_token_staking.go index 75e209dc9..81f2b1604 100644 --- a/tests/flows/validator-manager/native_token_staking.go +++ b/tests/flows/validator-manager/native_token_staking.go @@ -136,7 +136,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) { ) initRegistrationEvent, err := utils.GetEventFromLogs( receipt.Logs, - nativeStakingManager.ParseDelegatorAdded, + nativeStakingManager.ParseInitiatedDelegatorRegistration, ) Expect(err).Should(BeNil()) delegationID = initRegistrationEvent.DelegationID @@ -179,7 +179,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) { // Check that the validator is registered in the staking contract registrationEvent, err := utils.GetEventFromLogs( receipt.Logs, - nativeStakingManager.ParseDelegatorRegistered, + nativeStakingManager.ParseCompletedDelegatorRegistration, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -200,7 +200,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) { ) delegatorRemovalEvent, err := utils.GetEventFromLogs( receipt.Logs, - nativeStakingManager.ParseDelegatorRemovalInitialized, + nativeStakingManager.ParseInitiatedDelegatorRemoval, ) Expect(err).Should(BeNil()) Expect(delegatorRemovalEvent.ValidationID[:]).Should(Equal(validationID[:])) @@ -247,7 +247,7 @@ func NativeTokenStakingManager(network *localnetwork.LocalNetwork) { // Check that the delegator has been delisted from the staking contract registrationEvent, err := utils.GetEventFromLogs( receipt.Logs, - nativeStakingManager.ParseDelegationEnded, + nativeStakingManager.ParseCompletedDelegatorRemoval, ) Expect(err).Should(BeNil()) Expect(registrationEvent.ValidationID[:]).Should(Equal(validationID[:])) diff --git a/tests/flows/validator-manager/poa_to_pos.go b/tests/flows/validator-manager/poa_to_pos.go index 2d98adda1..06299f4cb 100644 --- a/tests/flows/validator-manager/poa_to_pos.go +++ b/tests/flows/validator-manager/poa_to_pos.go @@ -104,13 +104,13 @@ func PoAMigrationToPoS(network *localnetwork.LocalNetwork) { opts, err := bind.NewKeyedTransactorWithChainID(fundedKey, l1AInfo.EVMChainID) Expect(err).Should(BeNil()) - _, err = poaValidatorManager.InitializeValidatorRegistration( + _, err = poaValidatorManager.InitiateValidatorRegistration( opts, - poavalidatormanager.ValidatorRegistrationInput{ - NodeID: nodes[0].NodeID[:], - RegistrationExpiry: uint64(time.Now().Add(24 * time.Hour).Unix()), - BlsPublicKey: nodes[0].NodePoP.PublicKey[:], - }, + nodes[0].NodeID[:], + nodes[0].NodePoP.PublicKey[:], + uint64(time.Now().Add(24*time.Hour).Unix()), + poavalidatormanager.PChainOwner{}, + poavalidatormanager.PChainOwner{}, nodes[0].Weight, ) Expect(err).ShouldNot(BeNil()) diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go index 854ece5ab..99a639709 100644 --- a/tests/utils/validator_manager.go +++ b/tests/utils/validator_manager.go @@ -385,13 +385,13 @@ func InitializeNativeValidatorRegistration( Expect(err).Should(BeNil()) opts.Value = stakeAmount - tx, err := stakingManager.InitializeValidatorRegistration( + tx, err := stakingManager.InitiateValidatorRegistration( opts, - nativetokenstakingmanager.ValidatorRegistrationInput{ - NodeID: node.NodeID[:], - RegistrationExpiry: expiry, - BlsPublicKey: node.NodePoP.PublicKey[:], - }, + node.NodeID[:], + node.NodePoP.PublicKey[:], + expiry, + nativetokenstakingmanager.PChainOwner{}, + nativetokenstakingmanager.PChainOwner{}, DefaultMinDelegateFeeBips, DefaultMinStakeDurationSeconds, ) @@ -431,13 +431,13 @@ func InitializeERC20ValidatorRegistration( opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.InitializeValidatorRegistration( + tx, err := stakingManager.InitiateValidatorRegistration( opts, - erc20tokenstakingmanager.ValidatorRegistrationInput{ - NodeID: node.NodeID[:], - RegistrationExpiry: expiry, - BlsPublicKey: node.NodePoP.PublicKey[:], - }, + node.NodeID[:], + node.NodePoP.PublicKey[:], + expiry, + erc20tokenstakingmanager.PChainOwner{}, + erc20tokenstakingmanager.PChainOwner{}, DefaultMinDelegateFeeBips, DefaultMinStakeDurationSeconds, stakeAmount, @@ -467,13 +467,13 @@ func InitializePoAValidatorRegistration( opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := validatorManager.InitializeValidatorRegistration( + tx, err := validatorManager.InitiateValidatorRegistration( opts, - poavalidatormanager.ValidatorRegistrationInput{ - NodeID: node.NodeID[:], - RegistrationExpiry: expiry, - BlsPublicKey: node.NodePoP.PublicKey[:], - }, + node.NodeID[:], + node.NodePoP.PublicKey[:], + expiry, + poavalidatormanager.PChainOwner{}, + poavalidatormanager.PChainOwner{}, node.Weight, ) Expect(err).Should(BeNil()) @@ -774,11 +774,12 @@ func InitializeEndPoSValidation( ) *types.Receipt { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.InitializeEndValidation0( + tx, err := stakingManager.InitiateValidatorRemoval0( opts, validationID, false, 0, + common.Address{}, ) Expect(err).Should(BeNil()) return WaitForTransactionSuccess(ctx, l1, tx.Hash()) @@ -793,7 +794,7 @@ func ForceInitializeEndPoSValidation( ) *types.Receipt { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.ForceInitializeEndValidation( + tx, err := stakingManager.ForceInitiateValidatorRemoval( opts, validationID, false, @@ -851,7 +852,7 @@ func ForceInitializeEndPoSValidationWithUptime( abi, err := iposvalidatormanager.IPoSValidatorManagerMetaData.GetAbi() Expect(err).Should(BeNil()) - callData, err := abi.Pack("forceInitializeEndValidation", validationID, true, uint32(0)) + callData, err := abi.Pack("forceInitiateValidatorRemoval", validationID, true, uint32(0)) Expect(err).Should(BeNil()) return CallWarpReceiver( ctx, @@ -883,7 +884,7 @@ func InitializeEndPoSValidationWithUptime( abi, err := iposvalidatormanager.IPoSValidatorManagerMetaData.GetAbi() Expect(err).Should(BeNil()) - callData, err := abi.Pack("initializeEndValidation", validationID, true, uint32(0)) + callData, err := abi.Pack("initiateValidatorRemoval", validationID, true, uint32(0)) Expect(err).Should(BeNil()) return CallWarpReceiver( ctx, @@ -904,7 +905,7 @@ func InitializeEndPoAValidation( ) *types.Receipt { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := validatorManager.InitializeEndValidation( + tx, err := validatorManager.InitiateValidatorRemoval( opts, validationID, ) @@ -955,7 +956,7 @@ func InitializeERC20DelegatorRegistration( opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.InitializeDelegatorRegistration( + tx, err := stakingManager.InitiateDelegatorRegistration( opts, validationID, delegationAmount, @@ -964,7 +965,7 @@ func InitializeERC20DelegatorRegistration( receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash()) _, err = GetEventFromLogs( receipt.Logs, - stakingManager.ParseDelegatorAdded, + stakingManager.ParseInitiatedDelegatorRegistration, ) Expect(err).Should(BeNil()) return receipt @@ -983,7 +984,7 @@ func InitializeNativeDelegatorRegistration( Expect(err).Should(BeNil()) opts.Value = delegationAmount - tx, err := stakingManager.InitializeDelegatorRegistration( + tx, err := stakingManager.InitiateDelegatorRegistration( opts, validationID, ) @@ -991,7 +992,7 @@ func InitializeNativeDelegatorRegistration( receipt := WaitForTransactionSuccess(ctx, l1, tx.Hash()) _, err = GetEventFromLogs( receipt.Logs, - stakingManager.ParseDelegatorAdded, + stakingManager.ParseInitiatedDelegatorRegistration, ) Expect(err).Should(BeNil()) return receipt @@ -1031,7 +1032,7 @@ func InitializeEndDelegation( WaitMinStakeDuration(ctx, l1, senderKey) opts, err := bind.NewKeyedTransactorWithChainID(senderKey, l1.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.ForceInitializeEndDelegation( + tx, err := stakingManager.ForceInitiateDelegatorRemoval( opts, delegationID, false, From b386f448e8adc4426ae84a92e4b34682daf546ce Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Thu, 16 Jan 2025 09:30:16 -0600 Subject: [PATCH 24/29] fix function name --- tests/utils/validator_manager.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go index 99a639709..7876b8670 100644 --- a/tests/utils/validator_manager.go +++ b/tests/utils/validator_manager.go @@ -1052,7 +1052,7 @@ func CompleteEndDelegation( ) *types.Receipt { abi, err := iposvalidatormanager.IPoSValidatorManagerMetaData.GetAbi() Expect(err).Should(BeNil()) - callData, err := abi.Pack("completeEndDelegation", delegationID, uint32(0)) + callData, err := abi.Pack("completeDelegatorRemoval", delegationID, uint32(0)) Expect(err).Should(BeNil()) return CallWarpReceiver( ctx, From 5ec426b91edeae2f5fb802d66ca577dc94a84de6 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Thu, 23 Jan 2025 16:39:11 -0600 Subject: [PATCH 25/29] review comments --- .../ERC20TokenStakingManager.go | 4 ++-- .../NativeTokenStakingManager.go | 4 ++-- .../PoAValidatorManager/PoAValidatorManager.go | 4 ++-- contracts/validator-manager/PoSValidatorManager.sol | 10 +++++++--- contracts/validator-manager/ValidatorManager.sol | 1 + .../tests/PoSValidatorManagerTests.t.sol | 4 +++- 6 files changed, 17 insertions(+), 10 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index bb6263f88..7ee18e4a1 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -104,8 +104,8 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615e76380380615e7683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d298061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614cce565b6105f4565b005b610277610287366004614d09565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614cce565b610898565b6102776102cc366004614d20565b6108a4565b6102776102df366004614d6e565b610e12565b6102f76102f2366004614d09565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614da3565b610eda565b61027761034c366004614cce565b610eed565b61036461035f366004614e16565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614da3565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d6e565b610f49565b6103646103cb366004614e7d565b61119a565b6103645f81565b6102776103e5366004614cce565b6111ba565b5f80516020615cb4833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614da3565b6111c6565b61027761043c366004614d6e565b6111d2565b610294603081565b610277610457366004614e98565b6113c5565b61027761046a366004614d09565b611476565b61036461047d366004614ec6565b61150a565b610277610490366004614da3565b6115e3565b6103646104a3366004614edf565b6115ef565b6102776104b6366004614eff565b61161b565b6103646104c9366004614ec6565b6116fa565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d09565b6118f5565b6102f7611b4e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d09565b611b70565b610294601481565b61057361056e366004614ec6565b611c8c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d09565b611e0f565b6040516102a29190614fa7565b6102f76202a30081565b6103645f80516020615cb483398151915281565b6102776105dc366004614e98565b611f5e565b6103646105ef36600461505d565b611ff5565b6106008383835f61202d565b505050565b5f61060e612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f32565b600581111561065957610659614f32565b815260200160018201805461066d906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150c8565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f32565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615209565b6040518263ffffffff1660e01b8152600401610852919061523a565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610892919061524c565b50505050565b6108928383835f61207d565b5f6108ad612059565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d919061524c565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b306109776060850160408601615263565b6001600160a01b0316146109ba576109956060840160408501615263565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c8606085018561527e565b905090505f805b828163ffffffff161015610c08575f6109eb606088018861527e565b8363ffffffff16818110610a0157610a016152c3565b9050602002810190610a1391906152d7565b610a1c90615342565b80516040519192505f916006880191610a34916153bd565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f919060040161523a565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153bd565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb919061524c565b90508086600601835f0151604051610b0391906153bd565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615412565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154e1565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615501565b60405180910390a2505080610c019061552b565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff168361554d565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123aa565b604001516040518263ffffffff1660e01b8152600401610cc2919061523a565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d01919061524c565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156a3565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615209565b90505f600282604051610d8f91906153bd565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd919061524c565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124c0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e0f565b5190506002816005811115610e5c57610e5c614f32565b14610e7c578060405163170cc93360e21b815260040161078f9190615100565b61089283836124e9565b5f80610e90612788565b60030154610e9e9084615737565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461207d565b5050505050565b6108928383835f6127ac565b5f610f026129f3565b610f0e85858585612a2a565b9050610f2660015f80516020615cd483398151915255565b949350505050565b5f610f37612059565b54919050565b61089284848484612c77565b5f610f52612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f32565b6003811115610f9c57610f9c614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e0f565b905060018351600381111561102957611029614f32565b1461104a578251604051633b0d540d60e21b815261078f9190600401615756565b60048151600581111561105f5761105f614f32565b036110755761106d86612ca3565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611113575f806110a287611c8c565b915091508184146110ce57846040015160405163089938b360e11b815260040161078f91815260200190565b8460a001516001600160401b0316816001600160401b0316101561111057604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a3612788565b60030154610ed4906001600160401b038416615770565b6106008383835f612c77565b610ee6848484846127ac565b6111da6129f3565b5f6111e3612788565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121c5761121c614f32565b600381111561122d5761122d614f32565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a6576112a6614f32565b146112c7578051604051633b0d540d60e21b815261078f9190600401615756565b5f6112d58260400151611e0f565b905060046112e68360400151611e0f565b5160058111156112f8576112f8614f32565b1415801561131f57508160c001516001600160401b031681608001516001600160401b0316105b1561139f575f8061132f86611c8c565b915091508184604001511461135a5760405163089938b360e11b81526004810183905260240161078f565b806001600160401b03168460c001516001600160401b0316111561139c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113a885612ca3565b5050506113c160015f80516020615cd483398151915255565b5050565b5f6113ce612788565b90506001600160a01b0382166114025760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461144857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61147f612788565b90505f61148b83611e0f565b51905060048160058111156114a2576114a2614f32565b146114c2578060405163170cc93360e21b815260040161078f9190615100565b5f8381526006830160205260409020546001600160a01b031633146114e75733611423565b5f838152600683016020526040902054610600906001600160a01b031684612e74565b5f6115136129f3565b5f61151c612788565b90505f8061152985612e9e565b91509150611536826124c0565b611544575091506115c89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115865750805b60048351600581111561159b5761159b614f32565b036115aa576115aa8185612e74565b6115c0826115bb856040015161119a565b613253565b509193505050505b6115de60015f80516020615cd483398151915255565b919050565b6108928484848461202d565b5f6115f86129f3565b611603833384613276565b9050610ed460015f80516020615cd483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611664575080546001600160401b03808416911610155b156116825760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116ad84846134bb565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611704612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61172b876123aa565b604001516040518263ffffffff1660e01b815260040161174b919061523a565b6040805180830381865af4158015611765573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117899190615787565b91509150806117af57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117c9906150c8565b90505f036117ed5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561181457611814614f32565b14611847575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f828152600484016020526040812061185f91614c1a565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118e593600190910192600160c01b9092041690615823565b60405180910390a2509392505050565b5f6118fe612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561193757611937614f32565b600381111561194857611948614f32565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119c1576119c1614f32565b141580156119e257506003815160038111156119df576119df614f32565b14155b15611a03578051604051633b0d540d60e21b815261078f9190600401615756565b5f611a118260400151611e0f565b905080606001516001600160401b03165f03611a43576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ab193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611acb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af29190810190615209565b6040518263ffffffff1660e01b8152600401611b0e919061523a565b6020604051808303815f875af1158015611b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061524c565b5f611b57612059565b60030154600160401b90046001600160401b0316919050565b5f611b79612059565b5f8381526004820160205260409020805491925090611b97906150c8565b90505f03611bbb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611be257611be2614f32565b14611c15575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c4c9201615835565b6020604051808303815f875af1158015611c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610600919061524c565b5f805f611c98846123aa565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611cd8919061523a565b606060405180830381865af4158015611cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d179190615847565b9250925092505f611d26612059565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d7a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611dfa90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e17614c51565b5f611e20612059565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e5a57611e5a614f32565b6005811115611e6b57611e6b614f32565b8152602001600182018054611e7f906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eab906150c8565b8015611ef65780601f10611ecd57610100808354040283529160200191611ef6565b820191905f5260205f20905b815481529060010190602001808311611ed957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611f905760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611f99612788565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fc75733611423565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f80611fff612059565b9050806006018484604051612015929190615887565b90815260200160405180910390205491505092915050565b6120398484848461207d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f80612087612788565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120c0576120c0614f32565b60038111156120d1576120d1614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61214782611e0f565b905060028351600381111561215e5761215e614f32565b1461217f578251604051633b0d540d60e21b815261078f9190600401615756565b60208301516001600160a01b0316331461221b575f8281526006850160205260409020546001600160a01b031633146121b85733611423565b5f82815260068501602052604090205460c08201516121e791600160b01b90046001600160401b0316906154e1565b6001600160401b031642101561221b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561223057612230614f32565b036123525760028401546080840151612252916001600160401b0316906154e1565b6001600160401b03164210156122865760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122985761229682886124e9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122d19184916122cc9190615896565b6134d5565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561231484888c61369f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561236757612367614f32565b0361238e5761237783878b61369f565b5061238189612ca3565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615100565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261243591908101906158b6565b915091508061245757604051636b2f19e960e01b815260040160405180910390fd5b81511561247d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124b9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124ca612788565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612534573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261255b91908101906158b6565b915091508061257d57604051636b2f19e960e01b815260040160405180910390fd5b5f612586612788565b60058101548451919250146125b4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b0316156125f0576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561262c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612669919061523a565b6040805180830381865af4158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190615946565b915091508188146126ce5760405163089938b360e11b81526004810189905260240161078f565b5f8881526006840160205260409020600101546001600160401b03908116908216111561275f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261277d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127b6612788565b90506127c18661388d565b5f6127cb87611e0f565b90506127d6876124c0565b6127e557600192505050610f26565b5f8781526006830160205260409020546001600160a01b0316331461280a5733611423565b5f87815260068301602052604090205460c082015161283991600160b01b90046001600160401b0316906154e1565b6001600160401b03168160e001516001600160401b031610156128805760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128985761289188876124e9565b90506128b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128db9061119a565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061524c565b90506001600160a01b038616612995575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129b4908490615969565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cd4833981519152805460011901612a2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a34612788565b600281015490915061ffff600160401b90910481169086161080612a5d575061271061ffff8616115b15612a8157604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612abd576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612acf5750806001015483115b15612af05760405163222d164360e21b81526004810184905260240161078f565b5f612afa84613b78565b90505f612b0682610e86565b90505f612bcd612b168a8061597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b579250505060208c018c61597c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b9b9250505060608d0160408e01614e7d565b612ba860608e018e6159be565b612bb1906159d2565b612bbe60808f018f6159be565b612bc7906159d2565b87613b9b565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cd483398151915255565b612c83848484846127ac565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cac612788565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612ce557612ce5614f32565b6003811115612cf657612cf6614f32565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6a613f54565b8260800151612d7991906154e1565b6001600160401b0316421015612dad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e08575060208201515b5f80612e15838886613f6f565b91509150612e2e85602001516115bb876060015161119a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e7d612788565b5f838152600a8201602052604081208054919055909150610892848261401c565b5f612ea7614c51565b5f612eb0612059565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612ed7886123aa565b604001516040518263ffffffff1660e01b8152600401612ef7919061523a565b6040805180830381865af4158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190615787565b915091508015612f5c57604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f9457612f94614f32565b6005811115612fa557612fa5614f32565b8152602001600182018054612fb9906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe5906150c8565b80156130305780601f1061300757610100808354040283529160200191613030565b820191905f5260205f20905b81548152906001019060200180831161301357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130a8576130a8614f32565b141580156130c957506001815160058111156130c6576130c6614f32565b14155b156130ea57805160405163170cc93360e21b815261078f9190600401615100565b6003815160058111156130ff576130ff614f32565b0361310d5760048152613112565b600581525b83600601816020015160405161312891906153bd565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561316b5761316b614f32565b0217905550602082015160018201906131849082615412565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615cb4833981519152546113c1906001600160a01b03168383614092565b5f80613280612788565b90505f61328f6102f285613b78565b90505f61329b87611e0f565b90506132a6876124c0565b6132c6576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132db576132db614f32565b146132fc57805160405163170cc93360e21b815261078f9190600401615100565b5f828260a0015161330d91906154e1565b905083600201600a9054906101000a90046001600160401b03168260400151613336919061554d565b6001600160401b0316816001600160401b0316111561337357604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f8061337f8a846134d5565b915091505f8a836040516020016133ad92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134c36140f1565b6134cc8261413c565b6113c1816141b9565b5f805f6134e0612059565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135108582614221565b5f61351a8761448e565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135e59190810190615209565b6040518263ffffffff1660e01b8152600401613601919061523a565b6020604051808303815f875af115801561361d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613641919061524c565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136a9612788565b90505f6136b98660400151611e0f565b90505f6003825160058111156136d1576136d1614f32565b14806136ef57506004825160058111156136ed576136ed614f32565b145b156136ff575060e081015161373c565b60028251600581111561371457613714614f32565b0361372057504261373c565b815160405163170cc93360e21b815261078f9190600401615100565b86608001516001600160401b0316816001600160401b031611613764575f93505050506134b4565b600483015460608801515f916001600160a01b031690634f22429f906137899061119a565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561380a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382e919061524c565b90506001600160a01b03871661384657876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613896612059565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138d0576138d0614f32565b60058111156138e1576138e1614f32565b81526020016001820180546138f5906150c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613921906150c8565b801561396c5780601f106139435761010080835404028352916020019161396c565b820191905f5260205f20905b81548152906001019060200180831161394f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139e4576139e4614f32565b14613a17575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615100565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a5c57613a5c614f32565b021790555060208201516001820190613a759082615412565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b1584826134d5565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b6a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615cb4833981519152546001600160a01b0316906144f7565b5f613ba4612059565b6007015460ff16613bc857604051637fab81e560e01b815260040160405180910390fd5b5f613bd1612059565b905042866001600160401b0316111580613c005750613bf36202a30042615969565b866001600160401b031610155b15613c2957604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c4c90600160401b90048216858316615969565b1115613c7657604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c7f85614503565b613c8884614503565b8651603014613caf5786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613cd25787604051633e08a12560e11b815260040161078f919061523a565b5f801b8160060189604051613ce791906153bd565b90815260200160405180910390205414613d16578760405163a41f772f60e01b815260040161078f919061523a565b613d20835f614221565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613da09190615aff565b5f60405180830381865af4158015613dba573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613de19190810190615bb6565b5f82815260048601602052604090209193509150613dff8282615412565b5081836006018b604051613e1391906153bd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e4f90859060040161523a565b6020604051808303815f875af1158015613e6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8f919061524c565b5f8481526005860160205260409020805460ff19166001908117825591925001613eb98c82615412565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f3d908e9085908e908c90615bf9565b60405180910390a250909998505050505050505050565b5f613f5d612059565b600101546001600160401b0316919050565b5f805f613f7a612788565b5f8681526008820160205260408120805490829055919250908190801561400e575f87815260068501602052604090205461271090613fc490600160a01b900461ffff1683615770565b613fce9190615737565b91508184600a015f8981526020019081526020015f205f828254613ff29190615969565b9091555061400290508282615c31565b925061400e898461401c565b509097909650945050505050565b5f5f80516020615cb483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614077575f80fd5b505af1158015614089573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614622565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661413a57604051631afcd79f60e31b815260040160405180910390fd5b565b6141446140f1565b61414d81614683565b61415561469c565b6141b66060820135608083013561417260c0850160a08601614e7d565b61418260e0860160c08701615c44565b614193610100870160e08801615c5d565b6101008701356141ab61014089016101208a01615263565b8861014001356146ac565b50565b6141c16140f1565b5f80516020615cb48339815191526001600160a01b03821661420157604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61422a612059565b90505f826001600160401b0316846001600160401b03161115614258576142518385615896565b9050614265565b6142628484615896565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142d25750600184015481516142ce916001600160401b031690615969565b8210155b156142fa576001600160401b0380841660608301528282526040820151166020820152614319565b828160600181815161430c91906154e1565b6001600160401b03169052505b606081015161432990606461554d565b602082015160018601546001600160401b0392909216916143549190600160401b900460ff1661554d565b6001600160401b0316101561438d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b858160400181815161439f91906154e1565b6001600160401b03169052506040810180518691906143bf908390615896565b6001600160401b0316905250600184015460408201516064916143ed91600160401b90910460ff169061554d565b6001600160401b03161015614426576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f80614498612059565b5f84815260058201602052604090206002018054919250906008906144cc90600160401b90046001600160401b0316615c7d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134b483338461486e565b805163ffffffff1615801561451c575060208101515115155b1561455057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff16111561459357805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113c15760208201516145b3600183615c31565b815181106145c3576145c36152c3565b60200260200101516001600160a01b0316826020015182815181106145ea576145ea6152c3565b60200260200101516001600160a01b0316101561461a57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614596565b5f6146366001600160a01b038416836149d1565b905080515f1415801561465a5750808060200190518101906146589190615c98565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b61468b6140f1565b6146936149de565b6141b6816149e6565b6146a46140f1565b61413a614aca565b6146b46140f1565b5f6146bd612788565b905061ffff861615806146d5575061271061ffff8716115b156146f957604051635f12e6c360e11b815261ffff8716600482015260240161078f565b8789111561471d5760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147305750600a60ff8616115b156147535760405163170db35960e31b815260ff8616600482015260240161078f565b61475b613f54565b6001600160401b0316876001600160401b03161015614797576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147b75760405163a733007160e01b815260040160405180910390fd5b816147d857604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148d8919061524c565b90506148ef6001600160a01b038616853086614ad2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614933573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614957919061524c565b90508181116149bd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149c78282615c31565b9695505050505050565b60606134b483835f614b0b565b61413a6140f1565b6149ee6140f1565b5f6149f7612059565b8235815590506014614a0f6060840160408501615c5d565b60ff161180614a2e5750614a296060830160408401615c5d565b60ff16155b15614a6257614a436060830160408401615c5d565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a726060830160408401615c5d565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa36040830160208401614e7d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c646140f1565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140bf565b606081471015614b305760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b4b91906153bd565b5f6040518083038185875af1925050503d805f8114614b85576040519150601f19603f3d011682016040523d82523d5f602084013e614b8a565b606091505b50915091506149c7868383606082614baa57614ba582614bf1565b6134b4565b8151158015614bc157506001600160a01b0384163b155b15614bea57604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134b4565b805115614c015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c26906150c8565b5f825580601f10614c35575050565b601f0160209004905f5260205f20908101906141b69190614c96565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614caa575f8155600101614c97565b5090565b80151581146141b6575f80fd5b803563ffffffff811681146115de575f80fd5b5f805f60608486031215614ce0575f80fd5b833592506020840135614cf281614cae565b9150614d0060408501614cbb565b90509250925092565b5f60208284031215614d19575f80fd5b5035919050565b5f8060408385031215614d31575f80fd5b82356001600160401b03811115614d46575f80fd5b830160808186031215614d57575f80fd5b9150614d6560208401614cbb565b90509250929050565b5f8060408385031215614d7f575f80fd5b82359150614d6560208401614cbb565b6001600160a01b03811681146141b6575f80fd5b5f805f8060808587031215614db6575f80fd5b843593506020850135614dc881614cae565b9250614dd660408601614cbb565b91506060850135614de681614d8f565b939692955090935050565b803561ffff811681146115de575f80fd5b6001600160401b03811681146141b6575f80fd5b5f805f8060808587031215614e29575f80fd5b84356001600160401b03811115614e3e575f80fd5b850160a08188031215614e4f575f80fd5b9350614e5d60208601614df1565b92506040850135614e6d81614e02565b9396929550929360600135925050565b5f60208284031215614e8d575f80fd5b81356134b481614e02565b5f8060408385031215614ea9575f80fd5b823591506020830135614ebb81614d8f565b809150509250929050565b5f60208284031215614ed6575f80fd5b6134b482614cbb565b5f8060408385031215614ef0575f80fd5b50508035926020909101359150565b5f80828403610180811215614f12575f80fd5b61016080821215614f21575f80fd5b8493508301359050614ebb81614d8f565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5657614f56614f32565b9052565b5f5b83811015614f74578181015183820152602001614f5c565b50505f910152565b5f8151808452614f93816020860160208601614f5a565b601f01601f19169290920160200192915050565b60208152614fb9602082018351614f46565b5f6020830151610100806040850152614fd6610120850183614f7c565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161501560a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f806020838503121561506e575f80fd5b82356001600160401b0380821115615084575f80fd5b818501915085601f830112615097575f80fd5b8135818111156150a5575f80fd5b8660208285010111156150b6575f80fd5b60209290920196919550909350505050565b600181811c908216806150dc57607f821691505b6020821081036150fa57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f46565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151445761514461510e565b60405290565b604080519081016001600160401b03811182821017156151445761514461510e565b604051601f8201601f191681016001600160401b03811182821017156151945761519461510e565b604052919050565b5f6001600160401b038211156151b4576151b461510e565b50601f01601f191660200190565b5f82601f8301126151d1575f80fd5b81516151e46151df8261519c565b61516c565b8181528460208386010111156151f8575f80fd5b610f26826020830160208701614f5a565b5f60208284031215615219575f80fd5b81516001600160401b0381111561522e575f80fd5b610f26848285016151c2565b602081525f6134b46020830184614f7c565b5f6020828403121561525c575f80fd5b5051919050565b5f60208284031215615273575f80fd5b81356134b481614d8f565b5f808335601e19843603018112615293575f80fd5b8301803591506001600160401b038211156152ac575f80fd5b6020019150600581901b3603821315613698575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152eb575f80fd5b9190910192915050565b5f82601f830112615304575f80fd5b81356153126151df8261519c565b818152846020838601011115615326575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615352575f80fd5b61535a615122565b82356001600160401b0380821115615370575f80fd5b61537c368387016152f5565b83526020850135915080821115615391575f80fd5b5061539e368286016152f5565b60208301525060408301356153b281614e02565b604082015292915050565b5f82516152eb818460208701614f5a565b601f82111561060057805f5260205f20601f840160051c810160208510156153f35750805b601f840160051c820191505b81811015610ee6575f81556001016153ff565b81516001600160401b0381111561542b5761542b61510e565b61543f8161543984546150c8565b846153ce565b602080601f831160018114615472575f841561545b5750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154a057888601518255948401946001909101908401615481565b50858210156154bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124b9576124b96154cd565b604081525f6155136040830185614f7c565b90506001600160401b03831660208301529392505050565b5f63ffffffff808316818103615543576155436154cd565b6001019392505050565b6001600160401b03818116838216028082169190828114615570576155706154cd565b505092915050565b5f808335601e1984360301811261558d575f80fd5b83016020810192503590506001600160401b038111156155ab575f80fd5b803603821315613698575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569657848303601f19018952813536889003605e1901811261561d575f80fd5b8701606061562b8280615578565b82875261563b83880182846155b9565b9250505061564b86830183615578565b8683038888015261565d8382846155b9565b92505050604080830135925061567283614e02565b6001600160401b0392909216949091019390935297830197908301906001016155f8565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156c781614d8f565b6001600160a01b031660608381019190915283013536849003601e190181126156ee575f80fd5b83016020810190356001600160401b03811115615709575f80fd5b8060051b360382131561571a575f80fd5b60808085015261572e60a0850182846155e1565b95945050505050565b5f8261575157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576a5761576a614f32565b91905290565b8082028115828204841417610ed457610ed46154cd565b5f8060408385031215615798575f80fd5b825191506020830151614ebb81614cae565b5f81546157b6816150c8565b8085526020600183811680156157d357600181146157ed57615818565b60ff1985168884015283151560051b880183019550615818565b865f52825f205f5b858110156158105781548a82018601529083019084016157f5565b890184019650505b505050505092915050565b604081525f61551360408301856157aa565b602081525f6134b460208301846157aa565b5f805f60608486031215615859575f80fd5b83519250602084015161586b81614e02565b604085015190925061587c81614e02565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124b9576124b96154cd565b5f80604083850312156158c7575f80fd5b82516001600160401b03808211156158dd575f80fd5b90840190606082870312156158f0575f80fd5b6158f8615122565b82518152602083015161590a81614d8f565b6020820152604083015182811115615920575f80fd5b61592c888286016151c2565b6040830152508094505050506020830151614ebb81614cae565b5f8060408385031215615957575f80fd5b825191506020830151614ebb81614e02565b80820180821115610ed457610ed46154cd565b5f808335601e19843603018112615991575f80fd5b8301803591506001600160401b038211156159aa575f80fd5b602001915036819003821315613698575f80fd5b5f8235603e198336030181126152eb575f80fd5b5f604082360312156159e2575f80fd5b6159ea61514a565b6159f383614cbb565b81526020808401356001600160401b0380821115615a0f575f80fd5b9085019036601f830112615a21575f80fd5b813581811115615a3357615a3361510e565b8060051b9150615a4484830161516c565b8181529183018401918481019036841115615a5d575f80fd5b938501935b83851015615a875784359250615a7783614d8f565b8282529385019390850190615a62565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af45784516001600160a01b03168252938301936001929092019190830190615acb565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b25610100840182614f7c565b90506040840151601f1980858403016060860152615b438383614f7c565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b738383615a99565b925060a08601519150808584030160c086015250615b918282615a99565b91505060c0840151615bae60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bc7575f80fd5b8251915060208301516001600160401b03811115615be3575f80fd5b615bef858286016151c2565b9150509250929050565b608081525f615c0b6080830187614f7c565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154cd565b5f60208284031215615c54575f80fd5b6134b482614df1565b5f60208284031215615c6d575f80fd5b813560ff811681146134b4575f80fd5b5f6001600160401b03808316818103615543576155436154cd565b5f60208284031215615ca8575f80fd5b81516134b481614cae56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212202e56ae877e5052d2c0ddd9a5935283ea99b8af5087884b97e75b9fc6dbd6a59164736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615e8d380380615e8d83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d408061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614ce5565b6105f4565b005b610277610287366004614d20565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614ce5565b610898565b6102776102cc366004614d37565b6108a4565b6102776102df366004614d85565b610e12565b6102f76102f2366004614d20565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614dba565b610eda565b61027761034c366004614ce5565b610eed565b61036461035f366004614e2d565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614dba565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d85565b610f49565b6103646103cb366004614e94565b61119c565b6103645f81565b6102776103e5366004614ce5565b6111bc565b5f80516020615ccb833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614dba565b6111c8565b61027761043c366004614d85565b6111d4565b610294603081565b610277610457366004614eaf565b6113d5565b61027761046a366004614d20565b611486565b61036461047d366004614edd565b61151a565b610277610490366004614dba565b6115f3565b6103646104a3366004614ef6565b6115ff565b6102776104b6366004614f16565b61162b565b6103646104c9366004614edd565b61170a565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d20565b611905565b6102f7611b5e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d20565b611b80565b610294601481565b61057361056e366004614edd565b611c9c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d20565b611e1f565b6040516102a29190614fbe565b6102f76202a30081565b6103645f80516020615ccb83398151915281565b6102776105dc366004614eaf565b611f6e565b6103646105ef366004615074565b612005565b6106008383835f61203d565b505050565b5f61060e612069565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f49565b600581111561065957610659614f49565b815260200160018201805461066d906150df565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150df565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f49565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615117565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615220565b6040518263ffffffff1660e01b81526004016108529190615251565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108929190615263565b50505050565b6108928383835f61208d565b5f6108ad612069565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d9190615263565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b30610977606085016040860161527a565b6001600160a01b0316146109ba57610995606084016040850161527a565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c86060850185615295565b905090505f805b828163ffffffff161015610c08575f6109eb6060880188615295565b8363ffffffff16818110610a0157610a016152da565b9050602002810190610a1391906152ee565b610a1c90615359565b80516040519192505f916006880191610a34916153d4565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f9190600401615251565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153d4565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb9190615263565b90508086600601835f0151604051610b0391906153d4565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615429565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154f8565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615518565b60405180910390a2505080610c0190615542565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff1683615564565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123ba565b604001516040518263ffffffff1660e01b8152600401610cc29190615251565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d019190615263565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156ba565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615220565b90505f600282604051610d8f91906153d4565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd9190615263565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124d0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e1f565b5190506002816005811115610e5c57610e5c614f49565b14610e7c578060405163170cc93360e21b815260040161078f9190615117565b61089283836124f9565b5f80610e9061279f565b60030154610e9e908461574e565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461208d565b5050505050565b6108928383835f6127c3565b5f610f02612a0a565b610f0e85858585612a41565b9050610f2660015f80516020615ceb83398151915255565b949350505050565b5f610f37612069565b54919050565b61089284848484612c8e565b5f610f5261279f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f49565b6003811115610f9c57610f9c614f49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e1f565b905060018351600381111561102957611029614f49565b1461104a578251604051633b0d540d60e21b815261078f919060040161576d565b60048151600581111561105f5761105f614f49565b036110755761106d86612cba565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611115575f806110a287611c9c565b915091508184146110d05760405163fee3144560e01b8152600481018390526024810185905260440161078f565b8460a001516001600160401b0316816001600160401b0316101561111257604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a561279f565b60030154610ed4906001600160401b038416615787565b6106008383835f612c8e565b610ee6848484846127c3565b6111dc612a0a565b5f6111e561279f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121e5761121e614f49565b600381111561122f5761122f614f49565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a8576112a8614f49565b146112c9578051604051633b0d540d60e21b815261078f919060040161576d565b5f6112d78260400151611e1f565b905060046112e88360400151611e1f565b5160058111156112fa576112fa614f49565b1415801561132157508160c001516001600160401b031681608001516001600160401b0316105b156113af575f8061133186611c9c565b915091508184604001511461136a5781846040015160405163fee3144560e01b815260040161078f929190918252602082015260400190565b806001600160401b03168460c001516001600160401b031611156113ac57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113b885612cba565b5050506113d160015f80516020615ceb83398151915255565b5050565b5f6113de61279f565b90506001600160a01b0382166114125760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461145857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61148f61279f565b90505f61149b83611e1f565b51905060048160058111156114b2576114b2614f49565b146114d2578060405163170cc93360e21b815260040161078f9190615117565b5f8381526006830160205260409020546001600160a01b031633146114f75733611433565b5f838152600683016020526040902054610600906001600160a01b031684612e8b565b5f611523612a0a565b5f61152c61279f565b90505f8061153985612eb5565b91509150611546826124d0565b611554575091506115d89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115965750805b6004835160058111156115ab576115ab614f49565b036115ba576115ba8185612e8b565b6115d0826115cb856040015161119c565b61326a565b509193505050505b6115ee60015f80516020615ceb83398151915255565b919050565b6108928484848461203d565b5f611608612a0a565b61161383338461328d565b9050610ed460015f80516020615ceb83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611674575080546001600160401b03808416911610155b156116925760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116bd84846134d2565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611714612069565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61173b876123ba565b604001516040518263ffffffff1660e01b815260040161175b9190615251565b6040805180830381865af4158015611775573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611799919061579e565b91509150806117bf57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117d9906150df565b90505f036117fd5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561182457611824614f49565b14611857575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615117565b5f828152600484016020526040812061186f91614c31565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118f593600190910192600160c01b909204169061583a565b60405180910390a2509392505050565b5f61190e61279f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561194757611947614f49565b600381111561195857611958614f49565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119d1576119d1614f49565b141580156119f257506003815160038111156119ef576119ef614f49565b14155b15611a13578051604051633b0d540d60e21b815261078f919060040161576d565b5f611a218260400151611e1f565b905080606001516001600160401b03165f03611a53576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ac193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611adb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b029190810190615220565b6040518263ffffffff1660e01b8152600401611b1e9190615251565b6020604051808303815f875af1158015611b3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee69190615263565b5f611b67612069565b60030154600160401b90046001600160401b0316919050565b5f611b89612069565b5f8381526004820160205260409020805491925090611ba7906150df565b90505f03611bcb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611bf257611bf2614f49565b14611c25575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615117565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c5c920161584c565b6020604051808303815f875af1158015611c78573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106009190615263565b5f805f611ca8846123ba565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611ce89190615251565b606060405180830381865af4158015611d03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d27919061585e565b9250925092505f611d36612069565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d8a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611e0a90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e27614c68565b5f611e30612069565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e6a57611e6a614f49565b6005811115611e7b57611e7b614f49565b8152602001600182018054611e8f906150df565b80601f0160208091040260200160405190810160405280929190818152602001828054611ebb906150df565b8015611f065780601f10611edd57610100808354040283529160200191611f06565b820191905f5260205f20905b815481529060010190602001808311611ee957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611fa05760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611fa961279f565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fd75733611433565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061200f612069565b905080600601848460405161202592919061589e565b90815260200160405180910390205491505092915050565b6120498484848461208d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f8061209761279f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120d0576120d0614f49565b60038111156120e1576120e1614f49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61215782611e1f565b905060028351600381111561216e5761216e614f49565b1461218f578251604051633b0d540d60e21b815261078f919060040161576d565b60208301516001600160a01b0316331461222b575f8281526006850160205260409020546001600160a01b031633146121c85733611433565b5f82815260068501602052604090205460c08201516121f791600160b01b90046001600160401b0316906154f8565b6001600160401b031642101561222b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561224057612240614f49565b036123625760028401546080840151612262916001600160401b0316906154f8565b6001600160401b03164210156122965760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122a8576122a682886124f9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122e19184916122dc91906158ad565b6134ec565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561232484888c6136b6565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561237757612377614f49565b0361239e5761238783878b6136b6565b5061239189612cba565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615117565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561241e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261244591908101906158cd565b915091508061246757604051636b2f19e960e01b815260040160405180910390fd5b81511561248d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124c9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124da61279f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612544573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261256b91908101906158cd565b915091508061258d57604051636b2f19e960e01b815260040160405180910390fd5b5f61259661279f565b60058101548451919250146125c4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b031615612600576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561263c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126799190615251565b6040805180830381865af4158015612693573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b7919061595d565b915091508188146126e55760405163fee3144560e01b8152600481018390526024810189905260440161078f565b5f8881526006840160205260409020600101546001600160401b039081169082161115612776575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612794565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127cd61279f565b90506127d8866138a4565b5f6127e287611e1f565b90506127ed876124d0565b6127fc57600192505050610f26565b5f8781526006830160205260409020546001600160a01b031633146128215733611433565b5f87815260068301602052604090205460c082015161285091600160b01b90046001600160401b0316906154f8565b6001600160401b03168160e001516001600160401b031610156128975760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128af576128a888876124f9565b90506128cd565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128f29061119c565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa15801561295c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129809190615263565b90506001600160a01b0386166129ac575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129cb908490615980565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615ceb833981519152805460011901612a3b57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a4b61279f565b600281015490915061ffff600160401b90910481169086161080612a74575061271061ffff8616115b15612a9857604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612ad4576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612ae65750806001015483115b15612b075760405163222d164360e21b81526004810184905260240161078f565b5f612b1184613b8f565b90505f612b1d82610e86565b90505f612be4612b2d8a80615993565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b6e9250505060208c018c615993565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bb29250505060608d0160408e01614e94565b612bbf60608e018e6159d5565b612bc8906159e9565b612bd560808f018f6159d5565b612bde906159e9565b87613bb2565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615ceb83398151915255565b612c9a848484846127c3565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cc361279f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612cfc57612cfc614f49565b6003811115612d0d57612d0d614f49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d81613f6b565b8260800151612d9091906154f8565b6001600160401b0316421015612dc45760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e1f575060208201515b5f80612e2c838886613f86565b91509150612e4585602001516115cb876060015161119c565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e9461279f565b5f838152600a82016020526040812080549190559091506108928482614033565b5f612ebe614c68565b5f612ec7612069565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612eee886123ba565b604001516040518263ffffffff1660e01b8152600401612f0e9190615251565b6040805180830381865af4158015612f28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f4c919061579e565b915091508015612f7357604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612fab57612fab614f49565b6005811115612fbc57612fbc614f49565b8152602001600182018054612fd0906150df565b80601f0160208091040260200160405190810160405280929190818152602001828054612ffc906150df565b80156130475780601f1061301e57610100808354040283529160200191613047565b820191905f5260205f20905b81548152906001019060200180831161302a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130bf576130bf614f49565b141580156130e057506001815160058111156130dd576130dd614f49565b14155b1561310157805160405163170cc93360e21b815261078f9190600401615117565b60038151600581111561311657613116614f49565b036131245760048152613129565b600581525b83600601816020015160405161313f91906153d4565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561318257613182614f49565b02179055506020820151600182019061319b9082615429565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615ccb833981519152546113d1906001600160a01b031683836140a9565b5f8061329761279f565b90505f6132a66102f285613b8f565b90505f6132b287611e1f565b90506132bd876124d0565b6132dd576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132f2576132f2614f49565b1461331357805160405163170cc93360e21b815261078f9190600401615117565b5f828260a0015161332491906154f8565b905083600201600a9054906101000a90046001600160401b0316826040015161334d9190615564565b6001600160401b0316816001600160401b0316111561338a57604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f806133968a846134ec565b915091505f8a836040516020016133c492919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134da614108565b6134e382614153565b6113d1816141d0565b5f805f6134f7612069565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135278582614238565b5f613531876144a5565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135d5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135fc9190810190615220565b6040518263ffffffff1660e01b81526004016136189190615251565b6020604051808303815f875af1158015613634573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136589190615263565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136c061279f565b90505f6136d08660400151611e1f565b90505f6003825160058111156136e8576136e8614f49565b1480613706575060048251600581111561370457613704614f49565b145b15613716575060e0810151613753565b60028251600581111561372b5761372b614f49565b03613737575042613753565b815160405163170cc93360e21b815261078f9190600401615117565b86608001516001600160401b0316816001600160401b03161161377b575f93505050506134cb565b600483015460608801515f916001600160a01b031690634f22429f906137a09061119c565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613821573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138459190615263565b90506001600160a01b03871661385d57876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f6138ad612069565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138e7576138e7614f49565b60058111156138f8576138f8614f49565b815260200160018201805461390c906150df565b80601f0160208091040260200160405190810160405280929190818152602001828054613938906150df565b80156139835780601f1061395a57610100808354040283529160200191613983565b820191905f5260205f20905b81548152906001019060200180831161396657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139fb576139fb614f49565b14613a2e575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615117565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a7357613a73614f49565b021790555060208201516001820190613a8c9082615429565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b2c84826134ec565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b81939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615ccb833981519152546001600160a01b03169061450e565b5f613bbb612069565b6007015460ff16613bdf57604051637fab81e560e01b815260040160405180910390fd5b5f613be8612069565b905042866001600160401b0316111580613c175750613c0a6202a30042615980565b866001600160401b031610155b15613c4057604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c6390600160401b90048216858316615980565b1115613c8d57604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c968561451a565b613c9f8461451a565b8651603014613cc65786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613ce95787604051633e08a12560e11b815260040161078f9190615251565b5f801b8160060189604051613cfe91906153d4565b90815260200160405180910390205414613d2d578760405163a41f772f60e01b815260040161078f9190615251565b613d37835f614238565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613db79190615b16565b5f60405180830381865af4158015613dd1573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613df89190810190615bcd565b5f82815260048601602052604090209193509150613e168282615429565b5081836006018b604051613e2a91906153d4565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e66908590600401615251565b6020604051808303815f875af1158015613e82573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ea69190615263565b5f8481526005860160205260409020805460ff19166001908117825591925001613ed08c82615429565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f54908e9085908e908c90615c10565b60405180910390a250909998505050505050505050565b5f613f74612069565b600101546001600160401b0316919050565b5f805f613f9161279f565b5f86815260088201602052604081208054908290559192509081908015614025575f87815260068501602052604090205461271090613fdb90600160a01b900461ffff1683615787565b613fe5919061574e565b91508184600a015f8981526020019081526020015f205f8282546140099190615980565b9091555061401990508282615c48565b92506140258984614033565b509097909650945050505050565b5f5f80516020615ccb83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b15801561408e575f80fd5b505af11580156140a0573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614639565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661415157604051631afcd79f60e31b815260040160405180910390fd5b565b61415b614108565b6141648161469a565b61416c6146b3565b6141cd6060820135608083013561418960c0850160a08601614e94565b61419960e0860160c08701615c5b565b6141aa610100870160e08801615c74565b6101008701356141c261014089016101208a0161527a565b8861014001356146c3565b50565b6141d8614108565b5f80516020615ccb8339815191526001600160a01b03821661421857604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f614241612069565b90505f826001600160401b0316846001600160401b0316111561426f5761426883856158ad565b905061427c565b61427984846158ad565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142e95750600184015481516142e5916001600160401b031690615980565b8210155b15614311576001600160401b0380841660608301528282526040820151166020820152614330565b828160600181815161432391906154f8565b6001600160401b03169052505b6060810151614340906064615564565b602082015160018601546001600160401b03929092169161436b9190600160401b900460ff16615564565b6001600160401b031610156143a457606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b85816040018181516143b691906154f8565b6001600160401b03169052506040810180518691906143d69083906158ad565b6001600160401b03169052506001840154604082015160649161440491600160401b90910460ff1690615564565b6001600160401b0316101561443d576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f806144af612069565b5f84815260058201602052604090206002018054919250906008906144e390600160401b90046001600160401b0316615c94565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134cb833384614885565b805163ffffffff16158015614533575060208101515115155b1561456757805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff1611156145aa57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113d15760208201516145ca600183615c48565b815181106145da576145da6152da565b60200260200101516001600160a01b031682602001518281518110614601576146016152da565b60200260200101516001600160a01b0316101561463157604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145ad565b5f61464d6001600160a01b038416836149e8565b905080515f1415801561467157508080602001905181019061466f9190615caf565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b6146a2614108565b6146aa6149f5565b6141cd816149fd565b6146bb614108565b614151614ae1565b6146cb614108565b5f6146d461279f565b905061ffff861615806146ec575061271061ffff8716115b1561471057604051635f12e6c360e11b815261ffff8716600482015260240161078f565b878911156147345760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147475750600a60ff8616115b1561476a5760405163170db35960e31b815260ff8616600482015260240161078f565b614772613f6b565b6001600160401b0316876001600160401b031610156147ae576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147ce5760405163a733007160e01b815260040160405180910390fd5b816147ef57604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148ef9190615263565b90506149066001600160a01b038616853086614ae9565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561494a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061496e9190615263565b90508181116149d45760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149de8282615c48565b9695505050505050565b60606134cb83835f614b22565b614151614108565b614a05614108565b5f614a0e612069565b8235815590506014614a266060840160408501615c74565b60ff161180614a455750614a406060830160408401615c74565b60ff16155b15614a7957614a5a6060830160408401615c74565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a896060830160408401615c74565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aba6040830160208401614e94565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c7b614108565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140d6565b606081471015614b475760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b6291906153d4565b5f6040518083038185875af1925050503d805f8114614b9c576040519150601f19603f3d011682016040523d82523d5f602084013e614ba1565b606091505b50915091506149de868383606082614bc157614bbc82614c08565b6134cb565b8151158015614bd857506001600160a01b0384163b155b15614c0157604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134cb565b805115614c185780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c3d906150df565b5f825580601f10614c4c575050565b601f0160209004905f5260205f20908101906141cd9190614cad565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614cc1575f8155600101614cae565b5090565b80151581146141cd575f80fd5b803563ffffffff811681146115ee575f80fd5b5f805f60608486031215614cf7575f80fd5b833592506020840135614d0981614cc5565b9150614d1760408501614cd2565b90509250925092565b5f60208284031215614d30575f80fd5b5035919050565b5f8060408385031215614d48575f80fd5b82356001600160401b03811115614d5d575f80fd5b830160808186031215614d6e575f80fd5b9150614d7c60208401614cd2565b90509250929050565b5f8060408385031215614d96575f80fd5b82359150614d7c60208401614cd2565b6001600160a01b03811681146141cd575f80fd5b5f805f8060808587031215614dcd575f80fd5b843593506020850135614ddf81614cc5565b9250614ded60408601614cd2565b91506060850135614dfd81614da6565b939692955090935050565b803561ffff811681146115ee575f80fd5b6001600160401b03811681146141cd575f80fd5b5f805f8060808587031215614e40575f80fd5b84356001600160401b03811115614e55575f80fd5b850160a08188031215614e66575f80fd5b9350614e7460208601614e08565b92506040850135614e8481614e19565b9396929550929360600135925050565b5f60208284031215614ea4575f80fd5b81356134cb81614e19565b5f8060408385031215614ec0575f80fd5b823591506020830135614ed281614da6565b809150509250929050565b5f60208284031215614eed575f80fd5b6134cb82614cd2565b5f8060408385031215614f07575f80fd5b50508035926020909101359150565b5f80828403610180811215614f29575f80fd5b61016080821215614f38575f80fd5b8493508301359050614ed281614da6565b634e487b7160e01b5f52602160045260245ffd5b60068110614f6d57614f6d614f49565b9052565b5f5b83811015614f8b578181015183820152602001614f73565b50505f910152565b5f8151808452614faa816020860160208601614f71565b601f01601f19169290920160200192915050565b60208152614fd0602082018351614f5d565b5f6020830151610100806040850152614fed610120850183614f93565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161502c60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215615085575f80fd5b82356001600160401b038082111561509b575f80fd5b818501915085601f8301126150ae575f80fd5b8135818111156150bc575f80fd5b8660208285010111156150cd575f80fd5b60209290920196919550909350505050565b600181811c908216806150f357607f821691505b60208210810361511157634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f5d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561515b5761515b615125565b60405290565b604080519081016001600160401b038111828210171561515b5761515b615125565b604051601f8201601f191681016001600160401b03811182821017156151ab576151ab615125565b604052919050565b5f6001600160401b038211156151cb576151cb615125565b50601f01601f191660200190565b5f82601f8301126151e8575f80fd5b81516151fb6151f6826151b3565b615183565b81815284602083860101111561520f575f80fd5b610f26826020830160208701614f71565b5f60208284031215615230575f80fd5b81516001600160401b03811115615245575f80fd5b610f26848285016151d9565b602081525f6134cb6020830184614f93565b5f60208284031215615273575f80fd5b5051919050565b5f6020828403121561528a575f80fd5b81356134cb81614da6565b5f808335601e198436030181126152aa575f80fd5b8301803591506001600160401b038211156152c3575f80fd5b6020019150600581901b36038213156136af575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615302575f80fd5b9190910192915050565b5f82601f83011261531b575f80fd5b81356153296151f6826151b3565b81815284602083860101111561533d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615369575f80fd5b615371615139565b82356001600160401b0380821115615387575f80fd5b6153933683870161530c565b835260208501359150808211156153a8575f80fd5b506153b53682860161530c565b60208301525060408301356153c981614e19565b604082015292915050565b5f8251615302818460208701614f71565b601f82111561060057805f5260205f20601f840160051c8101602085101561540a5750805b601f840160051c820191505b81811015610ee6575f8155600101615416565b81516001600160401b0381111561544257615442615125565b6154568161545084546150df565b846153e5565b602080601f831160018114615489575f84156154725750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154b757888601518255948401946001909101908401615498565b50858210156154d457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124c9576124c96154e4565b604081525f61552a6040830185614f93565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361555a5761555a6154e4565b6001019392505050565b6001600160401b03818116838216028082169190828114615587576155876154e4565b505092915050565b5f808335601e198436030181126155a4575f80fd5b83016020810192503590506001600160401b038111156155c2575f80fd5b8036038213156136af575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156ad57848303601f19018952813536889003605e19018112615634575f80fd5b87016060615642828061558f565b82875261565283880182846155d0565b925050506156628683018361558f565b868303888801526156748382846155d0565b92505050604080830135925061568983614e19565b6001600160401b03929092169490910193909352978301979083019060010161560f565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156de81614da6565b6001600160a01b031660608381019190915283013536849003601e19018112615705575f80fd5b83016020810190356001600160401b03811115615720575f80fd5b8060051b3603821315615731575f80fd5b60808085015261574560a0850182846155f8565b95945050505050565b5f8261576857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061578157615781614f49565b91905290565b8082028115828204841417610ed457610ed46154e4565b5f80604083850312156157af575f80fd5b825191506020830151614ed281614cc5565b5f81546157cd816150df565b8085526020600183811680156157ea57600181146158045761582f565b60ff1985168884015283151560051b88018301955061582f565b865f52825f205f5b858110156158275781548a820186015290830190840161580c565b890184019650505b505050505092915050565b604081525f61552a60408301856157c1565b602081525f6134cb60208301846157c1565b5f805f60608486031215615870575f80fd5b83519250602084015161588281614e19565b604085015190925061589381614e19565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124c9576124c96154e4565b5f80604083850312156158de575f80fd5b82516001600160401b03808211156158f4575f80fd5b9084019060608287031215615907575f80fd5b61590f615139565b82518152602083015161592181614da6565b6020820152604083015182811115615937575f80fd5b615943888286016151d9565b6040830152508094505050506020830151614ed281614cc5565b5f806040838503121561596e575f80fd5b825191506020830151614ed281614e19565b80820180821115610ed457610ed46154e4565b5f808335601e198436030181126159a8575f80fd5b8301803591506001600160401b038211156159c1575f80fd5b6020019150368190038213156136af575f80fd5b5f8235603e19833603018112615302575f80fd5b5f604082360312156159f9575f80fd5b615a01615161565b615a0a83614cd2565b81526020808401356001600160401b0380821115615a26575f80fd5b9085019036601f830112615a38575f80fd5b813581811115615a4a57615a4a615125565b8060051b9150615a5b848301615183565b8181529183018401918481019036841115615a74575f80fd5b938501935b83851015615a9e5784359250615a8e83614da6565b8282529385019390850190615a79565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b0b5784516001600160a01b03168252938301936001929092019190830190615ae2565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b3c610100840182614f93565b90506040840151601f1980858403016060860152615b5a8383614f93565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b8a8383615ab0565b925060a08601519150808584030160c086015250615ba88282615ab0565b91505060c0840151615bc560e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bde575f80fd5b8251915060208301516001600160401b03811115615bfa575f80fd5b615c06858286016151d9565b9150509250929050565b608081525f615c226080830187614f93565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154e4565b5f60208284031215615c6b575f80fd5b6134cb82614e08565b5f60208284031215615c84575f80fd5b813560ff811681146134cb575f80fd5b5f6001600160401b0380831681810361555a5761555a6154e4565b5f60208284031215615cbf575f80fd5b81516134cb81614cc556fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122002dd2e18c15e62b76d660348b87fcc64fdd94d10b81ea11542034906fae8fd5764736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index a0c5fc45d..d28c32101 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -104,8 +104,8 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615bce380380615bce83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a818061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614ab4565b610792565b005b348015610279575f80fd5b5061026c610288366004614aef565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b06565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614ab4565b610b13565b348015610301575f80fd5b5061026c610310366004614b1d565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b6b565b61108d565b34801561033f575f80fd5b5061035361034e366004614aef565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614ba0565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614ab4565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614ba0565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b6b565b61118f565b348015610497575f80fd5b506104176104a6366004614c02565b6113e0565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614ab4565b611400565b3480156104e8575f80fd5b5061026c6104f7366004614ba0565b61140c565b348015610507575f80fd5b5061026c610516366004614b6b565b611418565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c1d565b61160b565b348015610559575f80fd5b5061026c610568366004614aef565b6116bc565b348015610578575f80fd5b50610417610587366004614c4b565b611750565b348015610597575f80fd5b5061026c6105a6366004614ba0565b611829565b3480156105b6575f80fd5b506104176105c5366004614c4b565b611835565b6104176105d8366004614c75565b611a30565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614aef565b611a64565b348015610654575f80fd5b50610353611cbd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614aef565b611cdf565b6104176106bd366004614aef565b611dfb565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c4b565b611e27565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614aef565b611faa565b6040516102ce9190614d4b565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c1d565b6120f9565b34801561077e575f80fd5b5061041761078d366004614e01565b612190565b61079e8383835f6121c8565b505050565b5f6107ac6121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614cd6565b60058111156107f7576107f7614cd6565b815260200160018201805461080b90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e6c565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614cd6565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fa7565b6040518263ffffffff1660e01b81526004016109f09190614fd8565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190614fea565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612218565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61222c565b5f610b286121f4565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190614fea565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615001565b6001600160a01b031614610c3557610c106060840160408501615001565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c43606085018561501c565b905090505f805b828163ffffffff161015610e83575f610c66606088018861501c565b8363ffffffff16818110610c7c57610c7c615061565b9050602002810190610c8e9190615075565b610c97906150e0565b80516040519192505f916006880191610caf9161515b565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fd8565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d289161515b565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190614fea565b90508086600601835f0151604051610d7e919061515b565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151b0565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d908561527f565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e6892919061529f565b60405180910390a2505080610e7c906152c9565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff16836152eb565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612561565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fd8565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190614fea565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615441565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fa7565b90505f60028260405161100a919061515b565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190614fea565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612677565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611faa565b51905060028160058111156110d7576110d7614cd6565b146110f7578060405163170cc93360e21b815260040161092d9190614e9e565b610a3083836126a0565b5f8061110b61293f565b6003015461111990846154d5565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461222c565b5050505050565b610a308383835f612963565b5f61117d6121f4565b54919050565b610a3084848484612baa565b5f61119861293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614cd6565b60038111156111e2576111e2614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611faa565b905060018351600381111561126f5761126f614cd6565b14611290578251604051633b0d540d60e21b815261092d91906004016154f4565b6004815160058111156112a5576112a5614cd6565b036112bb576112b386612bd6565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611359575f806112e887611e27565b9150915081841461131457846040015160405163089938b360e11b815260040161092d91815260200190565b8460a001516001600160401b0316816001600160401b0316101561135657604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113e961293f565b6003015461114f906001600160401b03841661550e565b61079e8383835f612baa565b61116184848484612963565b611420612da7565b5f61142961293f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146257611462614cd6565b600381111561147357611473614cd6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ec576114ec614cd6565b1461150d578051604051633b0d540d60e21b815261092d91906004016154f4565b5f61151b8260400151611faa565b9050600461152c8360400151611faa565b51600581111561153e5761153e614cd6565b1415801561156557508160c001516001600160401b031681608001516001600160401b0316105b156115e5575f8061157586611e27565b91509150818460400151146115a05760405163089938b360e11b81526004810183905260240161092d565b806001600160401b03168460c001516001600160401b031611156115e257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115ee85612bd6565b50505061160760015f80516020615a2c83398151915255565b5050565b5f61161461293f565b90506001600160a01b0382166116485760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461168e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116c561293f565b90505f6116d183611faa565b51905060048160058111156116e8576116e8614cd6565b14611708578060405163170cc93360e21b815260040161092d9190614e9e565b5f8381526006830160205260409020546001600160a01b0316331461172d5733611669565b5f83815260068301602052604090205461079e906001600160a01b031684612df1565b5f611759612da7565b5f61176261293f565b90505f8061176f85612e1b565b9150915061177c82612677565b61178a5750915061180e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117cc5750805b6004835160058111156117e1576117e1614cd6565b036117f0576117f08185612df1565b6118068261180185604001516113e0565b6131d0565b509193505050505b61182460015f80516020615a2c83398151915255565b919050565b610a30848484846121c8565b5f8061183f6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61186687612561565b604001516040518263ffffffff1660e01b81526004016118869190614fd8565b6040805180830381865af41580156118a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c49190615525565b91509150806118ea57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461190490614e6c565b90505f036119285760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561194f5761194f614cd6565b14611982575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f828152600484016020526040812061199a91614a00565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a2093600190910192600160c01b90920416906155c1565b60405180910390a2509392505050565b5f611a39612da7565b611a45848484346131e3565b9050611a5d60015f80516020615a2c83398151915255565b9392505050565b5f611a6d61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611aa657611aa6614cd6565b6003811115611ab757611ab7614cd6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b3057611b30614cd6565b14158015611b515750600381516003811115611b4e57611b4e614cd6565b14155b15611b72578051604051633b0d540d60e21b815261092d91906004016154f4565b5f611b808260400151611faa565b905080606001516001600160401b03165f03611bb2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c2093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c619190810190614fa7565b6040518263ffffffff1660e01b8152600401611c7d9190614fd8565b6020604051808303815f875af1158015611c99573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190614fea565b5f611cc66121f4565b60030154600160401b90046001600160401b0316919050565b5f611ce86121f4565b5f8381526004820160205260409020805491925090611d0690614e6c565b90505f03611d2a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d5157611d51614cd6565b14611d84575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dbb92016155d3565b6020604051808303815f875af1158015611dd7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190614fea565b5f611e04612da7565b611e0f823334613412565b905061182460015f80516020615a2c83398151915255565b5f805f611e3384612561565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e739190614fd8565b606060405180830381865af4158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb291906155e5565b9250925092505f611ec16121f4565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f1557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611f9590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fb2614a37565b5f611fbb6121f4565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611ff557611ff5614cd6565b600581111561200657612006614cd6565b815260200160018201805461201a90614e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461204690614e6c565b80156120915780601f1061206857610100808354040283529160200191612091565b820191905f5260205f20905b81548152906001019060200180831161207457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661212b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f61213461293f565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121625733611669565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061219a6121f4565b90508060060184846040516121b092919061561a565b90815260200160405180910390205491505092915050565b6121d48484848461222c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612220613652565b6122298161369d565b50565b5f8061223661293f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561226f5761226f614cd6565b600381111561228057612280614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6122f682611faa565b905060028351600381111561230d5761230d614cd6565b1461232e578251604051633b0d540d60e21b815261092d91906004016154f4565b60208301516001600160a01b031633146123ca575f8281526006850160205260409020546001600160a01b031633146123675733611669565b5f82815260068501602052604090205460c082015161239691600160b01b90046001600160401b03169061527f565b6001600160401b03164210156123ca5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123df576123df614cd6565b036125015760028401546080840151612401916001600160401b03169061527f565b6001600160401b03164210156124355760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124475761244582886126a0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161248091849161247b9190615629565b613717565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124c384888c6138e1565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125599350505050565b60048151600581111561251657612516614cd6565b0361253d5761252683878b6138e1565b5061253089612bd6565b6001945050505050612559565b805160405163170cc93360e21b815261092d9190600401614e9e565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125c5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125ec9190810190615649565b915091508061260e57604051636b2f19e960e01b815260040160405180910390fd5b815115612634578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612670576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f8061268161293f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126eb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127129190810190615649565b915091508061273457604051636b2f19e960e01b815260040160405180910390fd5b5f61273d61293f565b600581015484519192501461276b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127a7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127e3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128209190614fd8565b6040805180830381865af415801561283a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e91906156d9565b915091508188146128855760405163089938b360e11b81526004810189905260240161092d565b5f8881526006840160205260409020600101546001600160401b039081169082161115612916575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612934565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061296d61293f565b905061297886613acf565b5f61298287611faa565b905061298d87612677565b61299c57600192505050612559565b5f8781526006830160205260409020546001600160a01b031633146129c15733611669565b5f87815260068301602052604090205460c08201516129f091600160b01b90046001600160401b03169061527f565b6001600160401b03168160e001516001600160401b03161015612a375760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a4f57612a4888876126a0565b9050612a6d565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a92906113e0565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612afc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b209190614fea565b90506001600160a01b038616612b4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b6b9084906156fc565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bb684848484612963565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bdf61293f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c1857612c18614cd6565b6003811115612c2957612c29614cd6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c9d613dba565b8260800151612cac919061527f565b6001600160401b0316421015612ce05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d3b575060208201515b5f80612d48838886613dd5565b91509150612d61856020015161180187606001516113e0565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a2c833981519152805460011901612dd857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a2c83398151915255565b5f612dfa61293f565b5f838152600a8201602052604081208054919055909150610a308482613e82565b5f612e24614a37565b5f612e2d6121f4565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e5488612561565b604001516040518263ffffffff1660e01b8152600401612e749190614fd8565b6040805180830381865af4158015612e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb29190615525565b915091508015612ed957604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f1157612f11614cd6565b6005811115612f2257612f22614cd6565b8152602001600182018054612f3690614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6290614e6c565b8015612fad5780601f10612f8457610100808354040283529160200191612fad565b820191905f5260205f20905b815481529060010190602001808311612f9057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561302557613025614cd6565b14158015613046575060018151600581111561304357613043614cd6565b14155b1561306757805160405163170cc93360e21b815261092d9190600401614e9e565b60038151600581111561307c5761307c614cd6565b0361308a576004815261308f565b600581525b8360060181602001516040516130a5919061515b565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130e8576130e8614cd6565b02179055506020820151600182019061310190826151b0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116076001600160a01b03831682613ee0565b5f806131ed61293f565b600281015490915061ffff600160401b90910481169086161080613216575061271061ffff8616115b1561323a57604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b039081169085161015613276576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b80548310806132885750806001015483115b156132a95760405163222d164360e21b81526004810184905260240161092d565b825f6132b482611101565b90505f61337b6132c48a8061570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133059250505060208c018c61570f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133499250505060608d0160408e01614c02565b61335660608e018e615751565b61335f90615765565b61336c60808f018f615751565b61337590615765565b87613f73565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061341c61293f565b90505f61342884611101565b90505f61343487611faa565b905061343f87612677565b61345f576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561347457613474614cd6565b1461349557805160405163170cc93360e21b815261092d9190600401614e9e565b5f828260a001516134a6919061527f565b905083600201600a9054906101000a90046001600160401b031682604001516134cf91906152eb565b6001600160401b0316816001600160401b0316111561350c57604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f806135188a84613717565b915091505f8a8360405160200161354692919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661369b57604051631afcd79f60e31b815260040160405180910390fd5b565b6136a5613652565b6136ae8161432c565b6136b6614345565b612229606082013560808301356136d360c0850160a08601614c02565b6136e360e0860160c0870161582c565b6136f4610100870160e08801615845565b61010087013561370c61014089016101208a01615001565b886101400135614355565b5f805f6137226121f4565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137528582614517565b5f61375c87614784565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613800573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138279190810190614fa7565b6040518263ffffffff1660e01b81526004016138439190614fd8565b6020604051808303815f875af115801561385f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138839190614fea565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806138eb61293f565b90505f6138fb8660400151611faa565b90505f60038251600581111561391357613913614cd6565b1480613931575060048251600581111561392f5761392f614cd6565b145b15613941575060e081015161397e565b60028251600581111561395657613956614cd6565b0361396257504261397e565b815160405163170cc93360e21b815261092d9190600401614e9e565b86608001516001600160401b0316816001600160401b0316116139a6575f9350505050611a5d565b600483015460608801515f916001600160a01b031690634f22429f906139cb906113e0565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614fea565b90506001600160a01b038716613a8857876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613ad86121f4565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b1257613b12614cd6565b6005811115613b2357613b23614cd6565b8152602001600182018054613b3790614e6c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6390614e6c565b8015613bae5780601f10613b8557610100808354040283529160200191613bae565b820191905f5260205f20905b815481529060010190602001808311613b9157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c2657613c26614cd6565b14613c59575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614e9e565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613c9e57613c9e614cd6565b021790555060208201516001820190613cb790826151b0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d578482613717565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dac939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dc36121f4565b600101546001600160401b0316919050565b5f805f613de061293f565b5f86815260088201602052604081208054908290559192509081908015613e74575f87815260068501602052604090205461271090613e2a90600160a01b900461ffff168361550e565b613e3491906154d5565b91508184600a015f8981526020019081526020015f205f828254613e5891906156fc565b90915550613e6890508282615865565b9250613e748984613e82565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ece575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f035760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f4c576040519150601f19603f3d011682016040523d82523d5f602084013e613f51565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f7c6121f4565b6007015460ff16613fa057604051637fab81e560e01b815260040160405180910390fd5b5f613fa96121f4565b905042866001600160401b0316111580613fd85750613fcb6202a300426156fc565b866001600160401b031610155b1561400157604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061402490600160401b900482168583166156fc565b111561404e57604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b614057856147ed565b614060846147ed565b86516030146140875786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140aa5787604051633e08a12560e11b815260040161092d9190614fd8565b5f801b81600601896040516140bf919061515b565b908152602001604051809103902054146140ee578760405163a41f772f60e01b815260040161092d9190614fd8565b6140f8835f614517565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161417891906158de565b5f60405180830381865af4158015614192573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b99190810190615995565b5f828152600486016020526040902091935091506141d782826151b0565b5081836006018b6040516141eb919061515b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614227908590600401614fd8565b6020604051808303815f875af1158015614243573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142679190614fea565b5f8481526005860160205260409020805460ff191660019081178255919250016142918c826151b0565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90614315908e9085908e908c906159d8565b60405180910390a250909998505050505050505050565b614334613652565b61433c61490c565b61222981614914565b61434d613652565b61369b6149f8565b61435d613652565b5f61436661293f565b905061ffff8616158061437e575061271061ffff8716115b156143a257604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143c65760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143d95750600a60ff8616115b156143fc5760405163170db35960e31b815260ff8616600482015260240161092d565b614404613dba565b6001600160401b0316876001600160401b03161015614440576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144605760405163a733007160e01b815260040160405180910390fd5b8161448157604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145206121f4565b90505f826001600160401b0316846001600160401b0316111561454e576145478385615629565b905061455b565b6145588484615629565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145c85750600184015481516145c4916001600160401b0316906156fc565b8210155b156145f0576001600160401b038084166060830152828252604082015116602082015261460f565b8281606001818151614602919061527f565b6001600160401b03169052505b606081015161461f9060646152eb565b602082015160018601546001600160401b03929092169161464a9190600160401b900460ff166152eb565b6001600160401b0316101561468357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b8581604001818151614695919061527f565b6001600160401b03169052506040810180518691906146b5908390615629565b6001600160401b0316905250600184015460408201516064916146e391600160401b90910460ff16906152eb565b6001600160401b0316101561471c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061478e6121f4565b5f84815260058201602052604090206002018054919250906008906147c290600160401b90046001600160401b0316615a10565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614806575060208101515115155b1561483a57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561487d57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b81602001515181101561160757602082015161489d600183615865565b815181106148ad576148ad615061565b60200260200101516001600160a01b0316826020015182815181106148d4576148d4615061565b60200260200101516001600160a01b0316101561490457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614880565b61369b613652565b61491c613652565b5f6149256121f4565b823581559050601461493d6060840160408501615845565b60ff16118061495c57506149576060830160408401615845565b60ff16155b15614990576149716060830160408401615845565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149a06060830160408401615845565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149d16040830160208401614c02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dde613652565b508054614a0c90614e6c565b5f825580601f10614a1b575050565b601f0160209004905f5260205f20908101906122299190614a7c565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614a90575f8155600101614a7d565b5090565b8015158114612229575f80fd5b803563ffffffff81168114611824575f80fd5b5f805f60608486031215614ac6575f80fd5b833592506020840135614ad881614a94565b9150614ae660408501614aa1565b90509250925092565b5f60208284031215614aff575f80fd5b5035919050565b5f6101608284031215614b17575f80fd5b50919050565b5f8060408385031215614b2e575f80fd5b82356001600160401b03811115614b43575f80fd5b830160808186031215614b54575f80fd5b9150614b6260208401614aa1565b90509250929050565b5f8060408385031215614b7c575f80fd5b82359150614b6260208401614aa1565b6001600160a01b0381168114612229575f80fd5b5f805f8060808587031215614bb3575f80fd5b843593506020850135614bc581614a94565b9250614bd360408601614aa1565b91506060850135614be381614b8c565b939692955090935050565b6001600160401b0381168114612229575f80fd5b5f60208284031215614c12575f80fd5b8135611a5d81614bee565b5f8060408385031215614c2e575f80fd5b823591506020830135614c4081614b8c565b809150509250929050565b5f60208284031215614c5b575f80fd5b611a5d82614aa1565b803561ffff81168114611824575f80fd5b5f805f60608486031215614c87575f80fd5b83356001600160401b03811115614c9c575f80fd5b840160a08187031215614cad575f80fd5b9250614cbb60208501614c64565b91506040840135614ccb81614bee565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614cfa57614cfa614cd6565b9052565b5f5b83811015614d18578181015183820152602001614d00565b50505f910152565b5f8151808452614d37816020860160208601614cfe565b601f01601f19169290920160200192915050565b60208152614d5d602082018351614cea565b5f6020830151610100806040850152614d7a610120850183614d20565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614db960a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e12575f80fd5b82356001600160401b0380821115614e28575f80fd5b818501915085601f830112614e3b575f80fd5b813581811115614e49575f80fd5b866020828501011115614e5a575f80fd5b60209290920196919550909350505050565b600181811c90821680614e8057607f821691505b602082108103614b1757634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614cea565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ee257614ee2614eac565b60405290565b604080519081016001600160401b0381118282101715614ee257614ee2614eac565b604051601f8201601f191681016001600160401b0381118282101715614f3257614f32614eac565b604052919050565b5f6001600160401b03821115614f5257614f52614eac565b50601f01601f191660200190565b5f82601f830112614f6f575f80fd5b8151614f82614f7d82614f3a565b614f0a565b818152846020838601011115614f96575f80fd5b612559826020830160208701614cfe565b5f60208284031215614fb7575f80fd5b81516001600160401b03811115614fcc575f80fd5b61255984828501614f60565b602081525f611a5d6020830184614d20565b5f60208284031215614ffa575f80fd5b5051919050565b5f60208284031215615011575f80fd5b8135611a5d81614b8c565b5f808335601e19843603018112615031575f80fd5b8301803591506001600160401b0382111561504a575f80fd5b6020019150600581901b36038213156138da575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615089575f80fd5b9190910192915050565b5f82601f8301126150a2575f80fd5b81356150b0614f7d82614f3a565b8181528460208386010111156150c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150f0575f80fd5b6150f8614ec0565b82356001600160401b038082111561510e575f80fd5b61511a36838701615093565b8352602085013591508082111561512f575f80fd5b5061513c36828601615093565b602083015250604083013561515081614bee565b604082015292915050565b5f8251615089818460208701614cfe565b601f82111561079e57805f5260205f20601f840160051c810160208510156151915750805b601f840160051c820191505b81811015611161575f815560010161519d565b81516001600160401b038111156151c9576151c9614eac565b6151dd816151d78454614e6c565b8461516c565b602080601f831160018114615210575f84156151f95750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561523e5788860151825594840194600190910190840161521f565b508582101561525b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126705761267061526b565b604081525f6152b16040830185614d20565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152e1576152e161526b565b6001019392505050565b6001600160401b0381811683821602808216919082811461530e5761530e61526b565b505092915050565b5f808335601e1984360301811261532b575f80fd5b83016020810192503590506001600160401b03811115615349575f80fd5b8036038213156138da575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543457848303601f19018952813536889003605e190181126153bb575f80fd5b870160606153c98280615316565b8287526153d98388018284615357565b925050506153e986830183615316565b868303888801526153fb838284615357565b92505050604080830135925061541083614bee565b6001600160401b039290921694909101939093529783019790830190600101615396565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561546581614b8c565b6001600160a01b031660608381019190915283013536849003601e1901811261548c575f80fd5b83016020810190356001600160401b038111156154a7575f80fd5b8060051b36038213156154b8575f80fd5b6080808501526154cc60a08501828461537f565b95945050505050565b5f826154ef57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550857615508614cd6565b91905290565b808202811582820484141761114f5761114f61526b565b5f8060408385031215615536575f80fd5b825191506020830151614c4081614a94565b5f815461555481614e6c565b808552602060018381168015615571576001811461558b576155b6565b60ff1985168884015283151560051b8801830195506155b6565b865f52825f205f5b858110156155ae5781548a8201860152908301908401615593565b890184019650505b505050505092915050565b604081525f6152b16040830185615548565b602081525f611a5d6020830184615548565b5f805f606084860312156155f7575f80fd5b83519250602084015161560981614bee565b6040850151909250614ccb81614bee565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126705761267061526b565b5f806040838503121561565a575f80fd5b82516001600160401b0380821115615670575f80fd5b9084019060608287031215615683575f80fd5b61568b614ec0565b82518152602083015161569d81614b8c565b60208201526040830151828111156156b3575f80fd5b6156bf88828601614f60565b6040830152508094505050506020830151614c4081614a94565b5f80604083850312156156ea575f80fd5b825191506020830151614c4081614bee565b8082018082111561114f5761114f61526b565b5f808335601e19843603018112615724575f80fd5b8301803591506001600160401b0382111561573d575f80fd5b6020019150368190038213156138da575f80fd5b5f8235603e19833603018112615089575f80fd5b5f60408236031215615775575f80fd5b61577d614ee8565b61578683614aa1565b81526020808401356001600160401b03808211156157a2575f80fd5b9085019036601f8301126157b4575f80fd5b8135818111156157c6576157c6614eac565b8060051b91506157d7848301614f0a565b81815291830184019184810190368411156157f0575f80fd5b938501935b8385101561581a578435925061580a83614b8c565b82825293850193908501906157f5565b94860194909452509295945050505050565b5f6020828403121561583c575f80fd5b611a5d82614c64565b5f60208284031215615855575f80fd5b813560ff81168114611a5d575f80fd5b8181038181111561114f5761114f61526b565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158d35784516001600160a01b031682529383019360019290920191908301906158aa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615904610100840182614d20565b90506040840151601f19808584030160608601526159228383614d20565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159528383615878565b925060a08601519150808584030160c0860152506159708282615878565b91505060c084015161598d60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159a6575f80fd5b8251915060208301516001600160401b038111156159c2575f80fd5b6159ce85828601614f60565b9150509250929050565b608081525f6159ea6080830187614d20565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152e1576152e161526b56fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122055f1486459db5ac8a1a440bf6d0f206207edac77aa2ad44cd82792a3ba6a7ab064736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615be5380380615be583398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a988061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614acb565b610792565b005b348015610279575f80fd5b5061026c610288366004614b06565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b1d565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614acb565b610b13565b348015610301575f80fd5b5061026c610310366004614b34565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b82565b61108d565b34801561033f575f80fd5b5061035361034e366004614b06565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614bb7565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614acb565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614bb7565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b82565b61118f565b348015610497575f80fd5b506104176104a6366004614c19565b6113e2565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614acb565b611402565b3480156104e8575f80fd5b5061026c6104f7366004614bb7565b61140e565b348015610507575f80fd5b5061026c610516366004614b82565b61141a565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c34565b61161b565b348015610559575f80fd5b5061026c610568366004614b06565b6116cc565b348015610578575f80fd5b50610417610587366004614c62565b611760565b348015610597575f80fd5b5061026c6105a6366004614bb7565b611839565b3480156105b6575f80fd5b506104176105c5366004614c62565b611845565b6104176105d8366004614c8c565b611a40565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614b06565b611a74565b348015610654575f80fd5b50610353611ccd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614b06565b611cef565b6104176106bd366004614b06565b611e0b565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c62565b611e37565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614b06565b611fba565b6040516102ce9190614d62565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c34565b612109565b34801561077e575f80fd5b5061041761078d366004614e18565b6121a0565b61079e8383835f6121d8565b505050565b5f6107ac612204565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614ced565b60058111156107f7576107f7614ced565b815260200160018201805461080b90614e83565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e83565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614ced565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614eb5565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fbe565b6040518263ffffffff1660e01b81526004016109f09190614fef565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190615001565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612228565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61223c565b5f610b28612204565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190615001565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615018565b6001600160a01b031614610c3557610c106060840160408501615018565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c436060850185615033565b905090505f805b828163ffffffff161015610e83575f610c666060880188615033565b8363ffffffff16818110610c7c57610c7c615078565b9050602002810190610c8e919061508c565b610c97906150f7565b80516040519192505f916006880191610caf91615172565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fef565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d2891615172565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190615001565b90508086600601835f0151604051610d7e9190615172565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151c7565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d9085615296565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e689291906152b6565b60405180910390a2505080610e7c906152e0565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff1683615302565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612571565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fef565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190615001565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615458565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fbe565b90505f60028260405161100a9190615172565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190615001565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612687565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611fba565b51905060028160058111156110d7576110d7614ced565b146110f7578060405163170cc93360e21b815260040161092d9190614eb5565b610a3083836126b0565b5f8061110b612956565b6003015461111990846154ec565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461223c565b5050505050565b610a308383835f61297a565b5f61117d612204565b54919050565b610a3084848484612bc1565b5f611198612956565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614ced565b60038111156111e2576111e2614ced565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611fba565b905060018351600381111561126f5761126f614ced565b14611290578251604051633b0d540d60e21b815261092d919060040161550b565b6004815160058111156112a5576112a5614ced565b036112bb576112b386612bed565b505050505050565b8260a001516001600160401b031681608001516001600160401b0316101561135b575f806112e887611e37565b915091508184146113165760405163fee3144560e01b8152600481018390526024810185905260440161092d565b8460a001516001600160401b0316816001600160401b0316101561135857604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113eb612956565b6003015461114f906001600160401b038416615525565b61079e8383835f612bc1565b6111618484848461297a565b611422612dbe565b5f61142b612956565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146457611464614ced565b600381111561147557611475614ced565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ee576114ee614ced565b1461150f578051604051633b0d540d60e21b815261092d919060040161550b565b5f61151d8260400151611fba565b9050600461152e8360400151611fba565b51600581111561154057611540614ced565b1415801561156757508160c001516001600160401b031681608001516001600160401b0316105b156115f5575f8061157786611e37565b91509150818460400151146115b05781846040015160405163fee3144560e01b815260040161092d929190918252602082015260400190565b806001600160401b03168460c001516001600160401b031611156115f257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115fe85612bed565b50505061161760015f80516020615a4383398151915255565b5050565b5f611624612956565b90506001600160a01b0382166116585760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461169e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116d5612956565b90505f6116e183611fba565b51905060048160058111156116f8576116f8614ced565b14611718578060405163170cc93360e21b815260040161092d9190614eb5565b5f8381526006830160205260409020546001600160a01b0316331461173d5733611679565b5f83815260068301602052604090205461079e906001600160a01b031684612e08565b5f611769612dbe565b5f611772612956565b90505f8061177f85612e32565b9150915061178c82612687565b61179a5750915061181e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117dc5750805b6004835160058111156117f1576117f1614ced565b03611800576118008185612e08565b6118168261181185604001516113e2565b6131e7565b509193505050505b61183460015f80516020615a4383398151915255565b919050565b610a30848484846121d8565b5f8061184f612204565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61187687612571565b604001516040518263ffffffff1660e01b81526004016118969190614fef565b6040805180830381865af41580156118b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118d4919061553c565b91509150806118fa57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461191490614e83565b90505f036119385760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561195f5761195f614ced565b14611992575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614eb5565b5f82815260048401602052604081206119aa91614a17565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a3093600190910192600160c01b90920416906155d8565b60405180910390a2509392505050565b5f611a49612dbe565b611a55848484346131fa565b9050611a6d60015f80516020615a4383398151915255565b9392505050565b5f611a7d612956565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611ab657611ab6614ced565b6003811115611ac757611ac7614ced565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b4057611b40614ced565b14158015611b615750600381516003811115611b5e57611b5e614ced565b14155b15611b82578051604051633b0d540d60e21b815261092d919060040161550b565b5f611b908260400151611fba565b905080606001516001600160401b03165f03611bc2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c3093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c4a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c719190810190614fbe565b6040518263ffffffff1660e01b8152600401611c8d9190614fef565b6020604051808303815f875af1158015611ca9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190615001565b5f611cd6612204565b60030154600160401b90046001600160401b0316919050565b5f611cf8612204565b5f8381526004820160205260409020805491925090611d1690614e83565b90505f03611d3a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d6157611d61614ced565b14611d94575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614eb5565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dcb92016155ea565b6020604051808303815f875af1158015611de7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190615001565b5f611e14612dbe565b611e1f823334613429565b905061183460015f80516020615a4383398151915255565b5f805f611e4384612571565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e839190614fef565b606060405180830381865af4158015611e9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec291906155fc565b9250925092505f611ed1612204565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f2557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611fa590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fc2614a4e565b5f611fcb612204565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff9091169081111561200557612005614ced565b600581111561201657612016614ced565b815260200160018201805461202a90614e83565b80601f016020809104026020016040519081016040528092919081815260200182805461205690614e83565b80156120a15780601f10612078576101008083540402835291602001916120a1565b820191905f5260205f20905b81548152906001019060200180831161208457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661213b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f612144612956565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121725733611679565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806121aa612204565b90508060060184846040516121c0929190615631565b90815260200160405180910390205491505092915050565b6121e48484848461223c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612230613669565b612239816136b4565b50565b5f80612246612956565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561227f5761227f614ced565b600381111561229057612290614ced565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61230682611fba565b905060028351600381111561231d5761231d614ced565b1461233e578251604051633b0d540d60e21b815261092d919060040161550b565b60208301516001600160a01b031633146123da575f8281526006850160205260409020546001600160a01b031633146123775733611679565b5f82815260068501602052604090205460c08201516123a691600160b01b90046001600160401b031690615296565b6001600160401b03164210156123da5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123ef576123ef614ced565b036125115760028401546080840151612411916001600160401b031690615296565b6001600160401b03164210156124455760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124575761245582886126b0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161249091849161248b9190615640565b61372e565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124d384888c6138f8565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125699350505050565b60048151600581111561252657612526614ced565b0361254d5761253683878b6138f8565b5061254089612bed565b6001945050505050612569565b805160405163170cc93360e21b815261092d9190600401614eb5565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125d5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125fc9190810190615660565b915091508061261e57604051636b2f19e960e01b815260040160405180910390fd5b815115612644578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612680576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f80612691612956565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127229190810190615660565b915091508061274457604051636b2f19e960e01b815260040160405180910390fd5b5f61274d612956565b600581015484519192501461277b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127b7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127f3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128309190614fef565b6040805180830381865af415801561284a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061286e91906156f0565b9150915081881461289c5760405163fee3144560e01b8152600481018390526024810189905260440161092d565b5f8881526006840160205260409020600101546001600160401b03908116908216111561292d575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261294b565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612984612956565b905061298f86613ae6565b5f61299987611fba565b90506129a487612687565b6129b357600192505050612569565b5f8781526006830160205260409020546001600160a01b031633146129d85733611679565b5f87815260068301602052604090205460c0820151612a0791600160b01b90046001600160401b031690615296565b6001600160401b03168160e001516001600160401b03161015612a4e5760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a6657612a5f88876126b0565b9050612a84565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612aa9906113e2565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612b13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b379190615001565b90506001600160a01b038616612b63575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b82908490615713565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bcd8484848461297a565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bf6612956565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c2f57612c2f614ced565b6003811115612c4057612c40614ced565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cb4613dd1565b8260800151612cc39190615296565b6001600160401b0316421015612cf75760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d52575060208201515b5f80612d5f838886613dec565b91509150612d78856020015161181187606001516113e2565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a43833981519152805460011901612def57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a4383398151915255565b5f612e11612956565b5f838152600a8201602052604081208054919055909150610a308482613e99565b5f612e3b614a4e565b5f612e44612204565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e6b88612571565b604001516040518263ffffffff1660e01b8152600401612e8b9190614fef565b6040805180830381865af4158015612ea5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ec9919061553c565b915091508015612ef057604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f2857612f28614ced565b6005811115612f3957612f39614ced565b8152602001600182018054612f4d90614e83565b80601f0160208091040260200160405190810160405280929190818152602001828054612f7990614e83565b8015612fc45780601f10612f9b57610100808354040283529160200191612fc4565b820191905f5260205f20905b815481529060010190602001808311612fa757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561303c5761303c614ced565b1415801561305d575060018151600581111561305a5761305a614ced565b14155b1561307e57805160405163170cc93360e21b815261092d9190600401614eb5565b60038151600581111561309357613093614ced565b036130a157600481526130a6565b600581525b8360060181602001516040516130bc9190615172565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130ff576130ff614ced565b02179055506020820151600182019061311890826151c7565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116176001600160a01b03831682613ef7565b5f80613204612956565b600281015490915061ffff600160401b9091048116908616108061322d575061271061ffff8616115b1561325157604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b03908116908516101561328d576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b805483108061329f5750806001015483115b156132c05760405163222d164360e21b81526004810184905260240161092d565b825f6132cb82611101565b90505f6133926132db8a80615726565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061331c9250505060208c018c615726565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133609250505060608d0160408e01614c19565b61336d60608e018e615768565b6133769061577c565b61338360808f018f615768565b61338c9061577c565b87613f8a565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f80613433612956565b90505f61343f84611101565b90505f61344b87611fba565b905061345687612687565b613476576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561348b5761348b614ced565b146134ac57805160405163170cc93360e21b815261092d9190600401614eb5565b5f828260a001516134bd9190615296565b905083600201600a9054906101000a90046001600160401b031682604001516134e69190615302565b6001600160401b0316816001600160401b0316111561352357604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f8061352f8a8461372e565b915091505f8a8360405160200161355d92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166136b257604051631afcd79f60e31b815260040160405180910390fd5b565b6136bc613669565b6136c581614343565b6136cd61435c565b612239606082013560808301356136ea60c0850160a08601614c19565b6136fa60e0860160c08701615843565b61370b610100870160e0880161585c565b61010087013561372361014089016101208a01615018565b88610140013561436c565b5f805f613739612204565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b0316613769858261452e565b5f6137738761479b565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613817573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261383e9190810190614fbe565b6040518263ffffffff1660e01b815260040161385a9190614fef565b6020604051808303815f875af1158015613876573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061389a9190615001565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f80613902612956565b90505f6139128660400151611fba565b90505f60038251600581111561392a5761392a614ced565b1480613948575060048251600581111561394657613946614ced565b145b15613958575060e0810151613995565b60028251600581111561396d5761396d614ced565b03613979575042613995565b815160405163170cc93360e21b815261092d9190600401614eb5565b86608001516001600160401b0316816001600160401b0316116139bd575f9350505050611a6d565b600483015460608801515f916001600160a01b031690634f22429f906139e2906113e2565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a879190615001565b90506001600160a01b038716613a9f57876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613aef612204565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b2957613b29614ced565b6005811115613b3a57613b3a614ced565b8152602001600182018054613b4e90614e83565b80601f0160208091040260200160405190810160405280929190818152602001828054613b7a90614e83565b8015613bc55780601f10613b9c57610100808354040283529160200191613bc5565b820191905f5260205f20905b815481529060010190602001808311613ba857829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c3d57613c3d614ced565b14613c70575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614eb5565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613cb557613cb5614ced565b021790555060208201516001820190613cce90826151c7565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d6e848261372e565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dc3939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dda612204565b600101546001600160401b0316919050565b5f805f613df7612956565b5f86815260088201602052604081208054908290559192509081908015613e8b575f87815260068501602052604090205461271090613e4190600160a01b900461ffff1683615525565b613e4b91906154ec565b91508184600a015f8981526020019081526020015f205f828254613e6f9190615713565b90915550613e7f9050828261587c565b9250613e8b8984613e99565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ee5575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f1a5760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f63576040519150601f19603f3d011682016040523d82523d5f602084013e613f68565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f93612204565b6007015460ff16613fb757604051637fab81e560e01b815260040160405180910390fd5b5f613fc0612204565b905042866001600160401b0316111580613fef5750613fe26202a30042615713565b866001600160401b031610155b1561401857604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061403b90600160401b90048216858316615713565b111561406557604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b61406e85614804565b61407784614804565b865160301461409e5786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140c15787604051633e08a12560e11b815260040161092d9190614fef565b5f801b81600601896040516140d69190615172565b90815260200160405180910390205414614105578760405163a41f772f60e01b815260040161092d9190614fef565b61410f835f61452e565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161418f91906158f5565b5f60405180830381865af41580156141a9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141d091908101906159ac565b5f828152600486016020526040902091935091506141ee82826151c7565b5081836006018b6040516142029190615172565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061423e908590600401614fef565b6020604051808303815f875af115801561425a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061427e9190615001565b5f8481526005860160205260409020805460ff191660019081178255919250016142a88c826151c7565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf9061432c908e9085908e908c906159ef565b60405180910390a250909998505050505050505050565b61434b613669565b614353614923565b6122398161492b565b614364613669565b6136b2614a0f565b614374613669565b5f61437d612956565b905061ffff86161580614395575061271061ffff8716115b156143b957604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143dd5760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143f05750600a60ff8616115b156144135760405163170db35960e31b815260ff8616600482015260240161092d565b61441b613dd1565b6001600160401b0316876001600160401b03161015614457576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144775760405163a733007160e01b815260040160405180910390fd5b8161449857604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f614537612204565b90505f826001600160401b0316846001600160401b031611156145655761455e8385615640565b9050614572565b61456f8484615640565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145df5750600184015481516145db916001600160401b031690615713565b8210155b15614607576001600160401b0380841660608301528282526040820151166020820152614626565b82816060018181516146199190615296565b6001600160401b03169052505b6060810151614636906064615302565b602082015160018601546001600160401b0392909216916146619190600160401b900460ff16615302565b6001600160401b0316101561469a57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b85816040018181516146ac9190615296565b6001600160401b03169052506040810180518691906146cc908390615640565b6001600160401b0316905250600184015460408201516064916146fa91600160401b90910460ff1690615302565b6001600160401b03161015614733576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f806147a5612204565b5f84815260058201602052604090206002018054919250906008906147d990600160401b90046001600160401b0316615a27565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff1615801561481d575060208101515115155b1561485157805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561489457805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b8160200151518110156116175760208201516148b460018361587c565b815181106148c4576148c4615078565b60200260200101516001600160a01b0316826020015182815181106148eb576148eb615078565b60200260200101516001600160a01b0316101561491b57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614897565b6136b2613669565b614933613669565b5f61493c612204565b8235815590506014614954606084016040850161585c565b60ff161180614973575061496e606083016040840161585c565b60ff16155b156149a757614988606083016040840161585c565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149b7606083016040840161585c565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149e86040830160208401614c19565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612df5613669565b508054614a2390614e83565b5f825580601f10614a32575050565b601f0160209004905f5260205f20908101906122399190614a93565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614aa7575f8155600101614a94565b5090565b8015158114612239575f80fd5b803563ffffffff81168114611834575f80fd5b5f805f60608486031215614add575f80fd5b833592506020840135614aef81614aab565b9150614afd60408501614ab8565b90509250925092565b5f60208284031215614b16575f80fd5b5035919050565b5f6101608284031215614b2e575f80fd5b50919050565b5f8060408385031215614b45575f80fd5b82356001600160401b03811115614b5a575f80fd5b830160808186031215614b6b575f80fd5b9150614b7960208401614ab8565b90509250929050565b5f8060408385031215614b93575f80fd5b82359150614b7960208401614ab8565b6001600160a01b0381168114612239575f80fd5b5f805f8060808587031215614bca575f80fd5b843593506020850135614bdc81614aab565b9250614bea60408601614ab8565b91506060850135614bfa81614ba3565b939692955090935050565b6001600160401b0381168114612239575f80fd5b5f60208284031215614c29575f80fd5b8135611a6d81614c05565b5f8060408385031215614c45575f80fd5b823591506020830135614c5781614ba3565b809150509250929050565b5f60208284031215614c72575f80fd5b611a6d82614ab8565b803561ffff81168114611834575f80fd5b5f805f60608486031215614c9e575f80fd5b83356001600160401b03811115614cb3575f80fd5b840160a08187031215614cc4575f80fd5b9250614cd260208501614c7b565b91506040840135614ce281614c05565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d1157614d11614ced565b9052565b5f5b83811015614d2f578181015183820152602001614d17565b50505f910152565b5f8151808452614d4e816020860160208601614d15565b601f01601f19169290920160200192915050565b60208152614d74602082018351614d01565b5f6020830151610100806040850152614d91610120850183614d37565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614dd060a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e29575f80fd5b82356001600160401b0380821115614e3f575f80fd5b818501915085601f830112614e52575f80fd5b813581811115614e60575f80fd5b866020828501011115614e71575f80fd5b60209290920196919550909350505050565b600181811c90821680614e9757607f821691505b602082108103614b2e57634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614d01565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ef957614ef9614ec3565b60405290565b604080519081016001600160401b0381118282101715614ef957614ef9614ec3565b604051601f8201601f191681016001600160401b0381118282101715614f4957614f49614ec3565b604052919050565b5f6001600160401b03821115614f6957614f69614ec3565b50601f01601f191660200190565b5f82601f830112614f86575f80fd5b8151614f99614f9482614f51565b614f21565b818152846020838601011115614fad575f80fd5b612569826020830160208701614d15565b5f60208284031215614fce575f80fd5b81516001600160401b03811115614fe3575f80fd5b61256984828501614f77565b602081525f611a6d6020830184614d37565b5f60208284031215615011575f80fd5b5051919050565b5f60208284031215615028575f80fd5b8135611a6d81614ba3565b5f808335601e19843603018112615048575f80fd5b8301803591506001600160401b03821115615061575f80fd5b6020019150600581901b36038213156138f1575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126150a0575f80fd5b9190910192915050565b5f82601f8301126150b9575f80fd5b81356150c7614f9482614f51565b8181528460208386010111156150db575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615107575f80fd5b61510f614ed7565b82356001600160401b0380821115615125575f80fd5b615131368387016150aa565b83526020850135915080821115615146575f80fd5b50615153368286016150aa565b602083015250604083013561516781614c05565b604082015292915050565b5f82516150a0818460208701614d15565b601f82111561079e57805f5260205f20601f840160051c810160208510156151a85750805b601f840160051c820191505b81811015611161575f81556001016151b4565b81516001600160401b038111156151e0576151e0614ec3565b6151f4816151ee8454614e83565b84615183565b602080601f831160018114615227575f84156152105750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561525557888601518255948401946001909101908401615236565b508582101561527257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561268057612680615282565b604081525f6152c86040830185614d37565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152f8576152f8615282565b6001019392505050565b6001600160401b0381811683821602808216919082811461532557615325615282565b505092915050565b5f808335601e19843603018112615342575f80fd5b83016020810192503590506001600160401b03811115615360575f80fd5b8036038213156138f1575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561544b57848303601f19018952813536889003605e190181126153d2575f80fd5b870160606153e0828061532d565b8287526153f0838801828461536e565b925050506154008683018361532d565b8683038888015261541283828461536e565b92505050604080830135925061542783614c05565b6001600160401b0392909216949091019390935297830197908301906001016153ad565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561547c81614ba3565b6001600160a01b031660608381019190915283013536849003601e190181126154a3575f80fd5b83016020810190356001600160401b038111156154be575f80fd5b8060051b36038213156154cf575f80fd5b6080808501526154e360a085018284615396565b95945050505050565b5f8261550657634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061551f5761551f614ced565b91905290565b808202811582820484141761114f5761114f615282565b5f806040838503121561554d575f80fd5b825191506020830151614c5781614aab565b5f815461556b81614e83565b80855260206001838116801561558857600181146155a2576155cd565b60ff1985168884015283151560051b8801830195506155cd565b865f52825f205f5b858110156155c55781548a82018601529083019084016155aa565b890184019650505b505050505092915050565b604081525f6152c8604083018561555f565b602081525f611a6d602083018461555f565b5f805f6060848603121561560e575f80fd5b83519250602084015161562081614c05565b6040850151909250614ce281614c05565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561268057612680615282565b5f8060408385031215615671575f80fd5b82516001600160401b0380821115615687575f80fd5b908401906060828703121561569a575f80fd5b6156a2614ed7565b8251815260208301516156b481614ba3565b60208201526040830151828111156156ca575f80fd5b6156d688828601614f77565b6040830152508094505050506020830151614c5781614aab565b5f8060408385031215615701575f80fd5b825191506020830151614c5781614c05565b8082018082111561114f5761114f615282565b5f808335601e1984360301811261573b575f80fd5b8301803591506001600160401b03821115615754575f80fd5b6020019150368190038213156138f1575f80fd5b5f8235603e198336030181126150a0575f80fd5b5f6040823603121561578c575f80fd5b615794614eff565b61579d83614ab8565b81526020808401356001600160401b03808211156157b9575f80fd5b9085019036601f8301126157cb575f80fd5b8135818111156157dd576157dd614ec3565b8060051b91506157ee848301614f21565b8181529183018401918481019036841115615807575f80fd5b938501935b83851015615831578435925061582183614ba3565b828252938501939085019061580c565b94860194909452509295945050505050565b5f60208284031215615853575f80fd5b611a6d82614c7b565b5f6020828403121561586c575f80fd5b813560ff81168114611a6d575f80fd5b8181038181111561114f5761114f615282565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158ea5784516001600160a01b031682529383019360019290920191908301906158c1565b509695505050505050565b60208152815160208201525f602083015160e0604084015261591b610100840182614d37565b90506040840151601f19808584030160608601526159398383614d37565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615969838361588f565b925060a08601519150808584030160c086015250615987828261588f565b91505060c08401516159a460e08501826001600160401b03169052565b509392505050565b5f80604083850312156159bd575f80fd5b8251915060208301516001600160401b038111156159d9575f80fd5b6159e585828601614f77565b9150509250929050565b608081525f615a016080830187614d37565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152f8576152f861528256fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122032e00a14751b0034c1b69d5d0ba2dd6f78e80f8df210402d0408443de1157be764736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index 97a4df433..2cc8527c4 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -91,8 +91,8 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a2646970667358221220b37f5ae3966980f3bc7b9998c1945c46a812cf2d7258d40d5532ec3d29892e6a64736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a26469706673582212209da852e13a152d55575dba5a998adb81bdc0292e0ac4d3cb23e6150599276cb164736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index fe32865ab..36d28768d 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -324,6 +324,9 @@ abstract contract PoSValidatorManager is PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); _initiateValidatorRemoval(validationID); + + // The validator must be fetched after the removal has been initiated, since the above call modifies + // the validator's state. Validator memory validator = getValidator(validationID); // Non-PoS validators are required to boostrap the network, but are not eligible for rewards. @@ -439,7 +442,7 @@ abstract contract PoSValidatorManager is (bytes32 uptimeValidationID, uint64 uptime) = ValidatorMessages.unpackValidationUptimeMessage(warpMessage.payload); if (validationID != uptimeValidationID) { - revert InvalidValidationID(validationID); + revert UnexpectedValidationID(uptimeValidationID, validationID); } if (uptime > $._posValidatorInfo[validationID].uptimeSeconds) { @@ -613,8 +616,9 @@ abstract contract PoSValidatorManager is if (validator.receivedNonce < delegator.startingNonce) { (bytes32 messageValidationID, uint64 nonce) = completeValidatorWeightUpdate(messageIndex); + if (validationID != messageValidationID) { - revert InvalidValidationID(delegator.validationID); + revert UnexpectedValidationID(messageValidationID, validationID); } if (nonce < delegator.startingNonce) { revert InvalidNonce(nonce); @@ -875,7 +879,7 @@ abstract contract PoSValidatorManager is ) { (bytes32 validationID, uint64 nonce) = completeValidatorWeightUpdate(messageIndex); if (delegator.validationID != validationID) { - revert InvalidValidationID(validationID); + revert UnexpectedValidationID(validationID, delegator.validationID); } // The received nonce should be at least as high as the delegation's ending nonce. This allows a weight diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 40fbe58d2..b6b546e6a 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -83,6 +83,7 @@ abstract contract ValidatorManager is error InvalidNodeID(bytes nodeID); error InvalidConversionID(bytes32 encodedConversionID, bytes32 expectedConversionID); error InvalidTotalWeight(uint64 weight); + error UnexpectedValidationID(bytes32 validationID, bytes32 expectedValidationID); error InvalidValidationID(bytes32 validationID); error InvalidValidatorStatus(ValidatorStatus status); error InvalidNonce(uint64 nonce); diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index f8bc4c50d..c6203cf9c 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -219,7 +219,9 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.warp(DEFAULT_COMPLETION_TIMESTAMP); vm.expectRevert( - abi.encodeWithSelector(ValidatorManager.InvalidValidationID.selector, validationID) + abi.encodeWithSelector( + ValidatorManager.UnexpectedValidationID.selector, bytes32(0), validationID + ) ); posValidatorManager.initializeEndValidation(validationID, true, 0); } From 0f7039f33077091276dce6c2c8deb982af34e95d Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Fri, 24 Jan 2025 16:35:03 -0600 Subject: [PATCH 26/29] emit fixed length indexed node ID --- contracts/validator-manager/ACP99Manager.sol | 6 ++-- .../validator-manager/ValidatorManager.sol | 26 ++++++++++++--- .../tests/ValidatorManagerTests.t.sol | 33 ++++++++++++------- 3 files changed, 46 insertions(+), 19 deletions(-) diff --git a/contracts/validator-manager/ACP99Manager.sol b/contracts/validator-manager/ACP99Manager.sol index fd9895439..bb5360c3c 100644 --- a/contracts/validator-manager/ACP99Manager.sol +++ b/contracts/validator-manager/ACP99Manager.sol @@ -75,17 +75,17 @@ struct Validator { */ abstract contract ACP99Manager { /// @notice Emitted when an initial validator is registered. - event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight); + event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight); /// @notice Emitted when a validator registration to the L1 is initiated. event InitiatedValidatorRegistration( bytes32 indexed validationID, - bytes nodeID, + bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight ); /// @notice Emitted when a validator registration to the L1 is completed. - event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight); + event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight); /// @notice Emitted when removal of an L1 validator is initiated. event InitiatedValidatorRemoval( bytes32 indexed validationID, diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index b6b546e6a..0faa92f22 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -69,6 +69,7 @@ abstract contract ValidatorManager is uint8 public constant MAXIMUM_CHURN_PERCENTAGE_LIMIT = 20; uint64 public constant MAXIMUM_REGISTRATION_EXPIRY_LENGTH = 2 days; uint32 public constant ADDRESS_LENGTH = 20; // This is only used as a packed uint32 + uint32 public constant NODE_ID_LENGTH = 20; uint8 public constant BLS_PUBLIC_KEY_LENGTH = 48; bytes32 public constant P_CHAIN_BLOCKCHAIN_ID = bytes32(0); @@ -180,13 +181,15 @@ abstract contract ValidatorManager is if ($._registeredValidators[initialValidator.nodeID] != bytes32(0)) { revert NodeAlreadyRegistered(initialValidator.nodeID); } + if (initialValidator.nodeID.length != NODE_ID_LENGTH) { + revert InvalidNodeID(initialValidator.nodeID); + } // Validation ID of the initial validators is the sha256 hash of the // convert subnet to L1 tx ID and the index of the initial validator. bytes32 validationID = sha256(abi.encodePacked(conversionData.subnetID, i)); // Save the initial validator as an active validator. - $._registeredValidators[initialValidator.nodeID] = validationID; $._validationPeriods[validationID].status = ValidatorStatus.Active; $._validationPeriods[validationID].nodeID = initialValidator.nodeID; @@ -198,7 +201,7 @@ abstract contract ValidatorManager is totalWeight += initialValidator.weight; emit RegisteredInitialValidator( - validationID, initialValidator.nodeID, initialValidator.weight + validationID, _fixedNodeID(initialValidator.nodeID), initialValidator.weight ); } $._churnTracker.totalWeight = totalWeight; @@ -274,7 +277,7 @@ abstract contract ValidatorManager is if (blsPublicKey.length != BLS_PUBLIC_KEY_LENGTH) { revert InvalidBLSKeyLength(blsPublicKey.length); } - if (nodeID.length == 0) { + if (nodeID.length != NODE_ID_LENGTH) { revert InvalidNodeID(nodeID); } if ($._registeredValidators[nodeID] != bytes32(0)) { @@ -310,7 +313,7 @@ abstract contract ValidatorManager is $._validationPeriods[validationID].endTime = 0; emit InitiatedValidatorRegistration( - validationID, nodeID, messageID, registrationExpiry, weight + validationID, _fixedNodeID(nodeID), messageID, registrationExpiry, weight ); return validationID; @@ -362,7 +365,6 @@ abstract contract ValidatorManager is $._validationPeriods[validationID].startTime = uint64(block.timestamp); emit CompletedValidatorRegistration( validationID, - $._validationPeriods[validationID].nodeID, $._validationPeriods[validationID].weight ); @@ -648,4 +650,18 @@ abstract contract ValidatorManager is $._churnTracker = churnTracker; } + + /** + * @notice Converts a nodeID to a fixed length of 20 bytes. + * @param nodeID The nodeID to convert. + * @return The fixed length nodeID. + */ + function _fixedNodeID(bytes memory nodeID) private pure returns (bytes20) { + bytes20 fixedID; + // solhint-disable-next-line no-inline-assembly + assembly { + fixedID := mload(add(nodeID, 32)) + } + return fixedID; + } } diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 50fa88c30..9b5f3856b 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -21,18 +21,18 @@ abstract contract ValidatorManagerTest is Test { bytes32 public constant DEFAULT_SUBNET_ID = bytes32(hex"1234567812345678123456781234567812345678123456781234567812345678"); bytes public constant DEFAULT_NODE_ID = - bytes(hex"1234567812345678123456781234567812345678123456781234567812345678"); + bytes(hex"1234123412341234123412341234123412341234"); bytes public constant DEFAULT_INITIAL_VALIDATOR_NODE_ID_1 = - bytes(hex"2345678123456781234567812345678123456781234567812345678123456781"); + bytes(hex"2341234123412341234123412341234123412341"); bytes public constant DEFAULT_INITIAL_VALIDATOR_NODE_ID_2 = - bytes(hex"1345678123456781234567812345678123456781234567812345678123456781"); + bytes(hex"3412341234123412341234123412341234123412"); bytes public constant DEFAULT_BLS_PUBLIC_KEY = bytes( hex"123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678" ); bytes32 public constant DEFAULT_SOURCE_BLOCKCHAIN_ID = bytes32(hex"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd"); bytes32 public constant DEFAULT_SUBNET_CONVERSION_ID = - bytes32(hex"76a386628f079b7b00452f8cab0925740363fcd52b721a8cf91773e857327b36"); + bytes32(hex"4223c0d9f9d49acd29e1e3121d1399105c2bd7ff670874c6e71de373cdbb4463"); address public constant WARP_PRECOMPILE_ADDRESS = 0x0200000000000000000000000000000000000005; uint64 public constant DEFAULT_WEIGHT = 1e6; @@ -58,17 +58,17 @@ abstract contract ValidatorManagerTest is Test { // Used to create unique validator IDs in {_newNodeID} uint64 public nodeIDCounter = 0; - event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight); + event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight); event InitiatedValidatorRegistration( bytes32 indexed validationID, - bytes nodeID, + bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight ); - event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight); + event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight); event InitiatedValidatorRemoval( bytes32 indexed validationID, @@ -319,7 +319,7 @@ abstract contract ValidatorManagerTest is Test { _mockGetBlockchainID(); _mockGetPChainWarpMessage( ValidatorMessages.packSubnetToL1ConversionMessage( - bytes32(hex"1d72565851401e05d6351ebf5443d9bdc04953f3233da1345af126e7e4be7464") + bytes32(hex"0a2c50bd11652e39fadea9448d2d67fa27d5d8ef493600e9bbb9531bc7f12306") ), true ); @@ -411,9 +411,10 @@ abstract contract ValidatorManagerTest is Test { ); } + // Returns a 20-byte node ID function _newNodeID() internal returns (bytes memory) { nodeIDCounter++; - return abi.encodePacked(sha256(new bytes(nodeIDCounter))); + return abi.encodePacked(bytes20(sha256(new bytes(nodeIDCounter)))); } function _setUpInitializeValidatorRegistration( @@ -434,6 +435,7 @@ abstract contract ValidatorManagerTest is Test { weight: weight }) ); + bytes20 fixedID = _fixedNodeID(nodeID); (, bytes memory registerL1ValidatorMessage) = ValidatorMessages .packRegisterL1ValidatorMessage( ValidatorMessages.ValidationPeriod({ @@ -452,7 +454,7 @@ abstract contract ValidatorManagerTest is Test { _beforeSend(_weightToValue(weight), address(this)); vm.expectEmit(true, true, true, true, address(validatorManager)); emit InitiatedValidatorRegistration( - validationID, nodeID, bytes32(0), registrationExpiry, weight + validationID, fixedID, bytes32(0), registrationExpiry, weight ); _initializeValidatorRegistration( @@ -485,7 +487,7 @@ abstract contract ValidatorManagerTest is Test { vm.warp(registrationTimestamp); vm.expectEmit(true, true, true, true, address(validatorManager)); - emit CompletedValidatorRegistration(validationID, nodeID, weight); + emit CompletedValidatorRegistration(validationID, weight); validatorManager.completeValidatorRegistration(0); } @@ -729,5 +731,14 @@ abstract contract ValidatorManagerTest is Test { ) ) & ~bytes32(uint256(0xff)); } + + function _fixedNodeID(bytes memory nodeID) internal pure returns (bytes20) { + bytes20 fixedID; + // solhint-disable-next-line no-inline-assembly + assembly { + fixedID := mload(add(nodeID, 32)) + } + return fixedID; + } } // solhint-enable no-empty-blocks From 6ce06badf9c6c4196f6e2e5b85dc941a4066247d Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Fri, 24 Jan 2025 16:51:20 -0600 Subject: [PATCH 27/29] update bindings --- .../ACP99Manager/ACP99Manager.go | 75 +++++++----- .../ERC20TokenStakingManager.go | 110 +++++++++++++----- .../NativeTokenStakingManager.go | 110 +++++++++++++----- .../PoAValidatorManager.go | 110 +++++++++++++----- tests/utils/validator_manager.go | 8 +- 5 files changed, 283 insertions(+), 130 deletions(-) diff --git a/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go b/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go index 76590bca7..47d72abe8 100644 --- a/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go +++ b/abi-bindings/go/validator-manager/ACP99Manager/ACP99Manager.go @@ -58,7 +58,7 @@ type Validator struct { // ACP99ManagerMetaData contains all meta data concerning the ACP99Manager contract. var ACP99ManagerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"validator\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messsageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"validator\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messsageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", } // ACP99ManagerABI is the input ABI used to generate the binding from. @@ -454,14 +454,13 @@ func (it *ACP99ManagerCompletedValidatorRegistrationIterator) Close() error { // ACP99ManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the ACP99Manager contract. type ACP99ManagerCompletedValidatorRegistration struct { ValidationID [32]byte - NodeID []byte Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) func (_ACP99Manager *ACP99ManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerCompletedValidatorRegistrationIterator, error) { var validationIDRule []interface{} @@ -476,9 +475,9 @@ func (_ACP99Manager *ACP99ManagerFilterer) FilterCompletedValidatorRegistration( return &ACP99ManagerCompletedValidatorRegistrationIterator{contract: _ACP99Manager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) func (_ACP99Manager *ACP99ManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ACP99ManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} @@ -518,9 +517,9 @@ func (_ACP99Manager *ACP99ManagerFilterer) WatchCompletedValidatorRegistration(o }), nil } -// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) func (_ACP99Manager *ACP99ManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*ACP99ManagerCompletedValidatorRegistration, error) { event := new(ACP99ManagerCompletedValidatorRegistration) if err := _ACP99Manager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { @@ -890,41 +889,49 @@ func (it *ACP99ManagerInitiatedValidatorRegistrationIterator) Close() error { // ACP99ManagerInitiatedValidatorRegistration represents a InitiatedValidatorRegistration event raised by the ACP99Manager contract. type ACP99ManagerInitiatedValidatorRegistration struct { ValidationID [32]byte - NodeID []byte + NodeID [20]byte RegistrationMessageID [32]byte RegistrationExpiry uint64 Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) -func (_ACP99Manager *ACP99ManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerInitiatedValidatorRegistrationIterator, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*ACP99ManagerInitiatedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule) + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } return &ACP99ManagerInitiatedValidatorRegistrationIterator{contract: _ACP99Manager.contract, event: "InitiatedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) -func (_ACP99Manager *ACP99ManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ACP99ManagerInitiatedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ACP99ManagerInitiatedValidatorRegistration, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule) + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -956,9 +963,9 @@ func (_ACP99Manager *ACP99ManagerFilterer) WatchInitiatedValidatorRegistration(o }), nil } -// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) func (_ACP99Manager *ACP99ManagerFilterer) ParseInitiatedValidatorRegistration(log types.Log) (*ACP99ManagerInitiatedValidatorRegistration, error) { event := new(ACP99ManagerInitiatedValidatorRegistration) if err := _ACP99Manager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { @@ -1332,39 +1339,47 @@ func (it *ACP99ManagerRegisteredInitialValidatorIterator) Close() error { // ACP99ManagerRegisteredInitialValidator represents a RegisteredInitialValidator event raised by the ACP99Manager contract. type ACP99ManagerRegisteredInitialValidator struct { ValidationID [32]byte - NodeID []byte + NodeID [20]byte Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_ACP99Manager *ACP99ManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte) (*ACP99ManagerRegisteredInitialValidatorIterator, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*ACP99ManagerRegisteredInitialValidatorIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule) + logs, sub, err := _ACP99Manager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } return &ACP99ManagerRegisteredInitialValidatorIterator{contract: _ACP99Manager.contract, event: "RegisteredInitialValidator", logs: logs, sub: sub}, nil } -// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_ACP99Manager *ACP99ManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *ACP99ManagerRegisteredInitialValidator, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_ACP99Manager *ACP99ManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *ACP99ManagerRegisteredInitialValidator, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule) + logs, sub, err := _ACP99Manager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -1396,9 +1411,9 @@ func (_ACP99Manager *ACP99ManagerFilterer) WatchRegisteredInitialValidator(opts }), nil } -// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) func (_ACP99Manager *ACP99ManagerFilterer) ParseRegisteredInitialValidator(log types.Log) (*ACP99ManagerRegisteredInitialValidator, error) { event := new(ACP99ManagerRegisteredInitialValidator) if err := _ACP99Manager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 7ee18e4a1..ee172fd62 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -104,8 +104,8 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615e8d380380615e8d83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d408061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610260575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f1414610560578063d5f20ff614610590578063df93d8de146105b0578063e4a63c40146105ba578063fb8b11dd146105ce578063fd7ac5e7146105e1575f80fd5b8063ba3a4b9714610503578063bb0b193814610516578063bc5fbfec1461051e578063bee0a03f14610545578063c974d1b614610558575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104955780639e478eea146104a8578063a3a65e48146104bb578063a9778a7a1461030f578063afb98096146104ce578063b771b3bc146104f5575f80fd5b80638280a25a146104415780638ef34c981461044957806393e245981461045c5780639681d9401461046f5780639ae0644714610482575f80fd5b80634bee0040116101e257806362065856116101a757806362065856146103bd578063732214f8146103d057806376f78621146103d7578063785e9e86146103ea5780637d8d2f771461041b57806380dd672f1461042e575f80fd5b80634bee0040146103515780635dc1f535146103725780635dd6a6cb1461037a57806360305d621461038d57806360ad7784146103aa575f80fd5b806325e1c7761161022857806325e1c776146102d15780632e2194d8146102e457806335455ded1461030f57806337b9be8f1461032b5780633a1cfff61461033e575f80fd5b80630118acc4146102645780630322ed9814610279578063151d30d11461028c5780631ec44724146102ab57806320d91b7a146102be575b5f80fd5b610277610272366004614ce5565b6105f4565b005b610277610287366004614d20565b610605565b610294600a81565b60405160ff90911681526020015b60405180910390f35b6102776102b9366004614ce5565b610898565b6102776102cc366004614d37565b6108a4565b6102776102df366004614d85565b610e12565b6102f76102f2366004614d20565b610e86565b6040516001600160401b0390911681526020016102a2565b61031861271081565b60405161ffff90911681526020016102a2565b610277610339366004614dba565b610eda565b61027761034c366004614ce5565b610eed565b61036461035f366004614e2d565b610ef9565b6040519081526020016102a2565b610364610f2e565b610277610388366004614dba565b610f3d565b610395601481565b60405163ffffffff90911681526020016102a2565b6102776103b8366004614d85565b610f49565b6103646103cb366004614e94565b61119c565b6103645f81565b6102776103e5366004614ce5565b6111bc565b5f80516020615ccb833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b610277610429366004614dba565b6111c8565b61027761043c366004614d85565b6111d4565b610294603081565b610277610457366004614eaf565b6113d5565b61027761046a366004614d20565b611486565b61036461047d366004614edd565b61151a565b610277610490366004614dba565b6115f3565b6103646104a3366004614ef6565b6115ff565b6102776104b6366004614f16565b61162b565b6103646104c9366004614edd565b61170a565b6103647f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104036005600160991b0181565b610277610511366004614d20565b611905565b6102f7611b5e565b6103647fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b610277610553366004614d20565b611b80565b610294601481565b61057361056e366004614edd565b611c9c565b604080519283526001600160401b039091166020830152016102a2565b6105a361059e366004614d20565b611e1f565b6040516102a29190614fbe565b6102f76202a30081565b6103645f80516020615ccb83398151915281565b6102776105dc366004614eaf565b611f6e565b6103646105ef366004615074565b612005565b6106008383835f61203d565b505050565b5f61060e612069565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561064857610648614f49565b600581111561065957610659614f49565b815260200160018201805461066d906150df565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906150df565b80156106e45780601f106106bb576101008083540402835291602001916106e4565b820191905f5260205f20905b8154815290600101906020018083116106c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561075c5761075c614f49565b14610798575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615117565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561080f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108369190810190615220565b6040518263ffffffff1660e01b81526004016108529190615251565b6020604051808303815f875af115801561086e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108929190615263565b50505050565b6108928383835f61208d565b5f6108ad612069565b600781015490915060ff16156108d657604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093d9190615263565b836020013514610966576040516372b0a7e760e11b81526020840135600482015260240161078f565b30610977606085016040860161527a565b6001600160a01b0316146109ba57610995606084016040850161527a565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161078f565b5f6109c86060850185615295565b905090505f805b828163ffffffff161015610c08575f6109eb6060880188615295565b8363ffffffff16818110610a0157610a016152da565b9050602002810190610a1391906152ee565b610a1c90615359565b80516040519192505f916006880191610a34916153d4565b90815260200160405180910390205414610a6457805160405163a41f772f60e01b815261078f9190600401615251565b5f6002885f013584604051602001610a9392919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610aad916153d4565b602060405180830381855afa158015610ac8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aeb9190615263565b90508086600601835f0151604051610b0391906153d4565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b439082615429565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610bb290856154f8565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610bed929190615518565b60405180910390a2505080610c0190615542565b90506109cf565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c4b910460ff1683615564565b6001600160401b03161015610c7e57604051633e1a785160e01b81526001600160401b038216600482015260240161078f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ca2876123ba565b604001516040518263ffffffff1660e01b8152600401610cc29190615251565b602060405180830381865af4158015610cdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d019190615263565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d3b91906156ba565b5f60405180830381865af4158015610d55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190615220565b90505f600282604051610d8f91906153d4565b602060405180830381855afa158015610daa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dcd9190615263565b9050828114610df95760405163baaea89d60e01b8152600481018290526024810184905260440161078f565b5050506007909201805460ff1916600117905550505050565b610e1b826124d0565b610e3b576040516330efa98b60e01b81526004810183905260240161078f565b5f610e4583611e1f565b5190506002816005811115610e5c57610e5c614f49565b14610e7c578060405163170cc93360e21b815260040161078f9190615117565b61089283836124f9565b5f80610e9061279f565b60030154610e9e908461574e565b9050801580610eb357506001600160401b0381115b15610ed45760405163222d164360e21b81526004810184905260240161078f565b92915050565b610ee68484848461208d565b5050505050565b6108928383835f6127c3565b5f610f02612a0a565b610f0e85858585612a41565b9050610f2660015f80516020615ceb83398151915255565b949350505050565b5f610f37612069565b54919050565b61089284848484612c8e565b5f610f5261279f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f8b57610f8b614f49565b6003811115610f9c57610f9c614f49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61101282611e1f565b905060018351600381111561102957611029614f49565b1461104a578251604051633b0d540d60e21b815261078f919060040161576d565b60048151600581111561105f5761105f614f49565b036110755761106d86612cba565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611115575f806110a287611c9c565b915091508184146110d05760405163fee3144560e01b8152600481018390526024810185905260440161078f565b8460a001516001600160401b0316816001600160401b0316101561111257604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111a561279f565b60030154610ed4906001600160401b038416615787565b6106008383835f612c8e565b610ee6848484846127c3565b6111dc612a0a565b5f6111e561279f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561121e5761121e614f49565b600381111561122f5761122f614f49565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112a8576112a8614f49565b146112c9578051604051633b0d540d60e21b815261078f919060040161576d565b5f6112d78260400151611e1f565b905060046112e88360400151611e1f565b5160058111156112fa576112fa614f49565b1415801561132157508160c001516001600160401b031681608001516001600160401b0316105b156113af575f8061133186611c9c565b915091508184604001511461136a5781846040015160405163fee3144560e01b815260040161078f929190918252602082015260400190565b806001600160401b03168460c001516001600160401b031611156113ac57604051632e19bc2d60e11b81526001600160401b038216600482015260240161078f565b50505b6113b885612cba565b5050506113d160015f80516020615ceb83398151915255565b5050565b5f6113de61279f565b90506001600160a01b0382166114125760405163caa903f960e01b81526001600160a01b038316600482015260240161078f565b5f8381526006820160205260409020546001600160a01b0316331461145857335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161078f565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61148f61279f565b90505f61149b83611e1f565b51905060048160058111156114b2576114b2614f49565b146114d2578060405163170cc93360e21b815260040161078f9190615117565b5f8381526006830160205260409020546001600160a01b031633146114f75733611433565b5f838152600683016020526040902054610600906001600160a01b031684612e8b565b5f611523612a0a565b5f61152c61279f565b90505f8061153985612eb5565b91509150611546826124d0565b611554575091506115d89050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115965750805b6004835160058111156115ab576115ab614f49565b036115ba576115ba8185612e8b565b6115d0826115cb856040015161119c565b61326a565b509193505050505b6115ee60015f80516020615ceb83398151915255565b919050565b6108928484848461203d565b5f611608612a0a565b61161383338461328d565b9050610ed460015f80516020615ceb83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611674575080546001600160401b03808416911610155b156116925760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556116bd84846134d2565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611714612069565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61173b876123ba565b604001516040518263ffffffff1660e01b815260040161175b9190615251565b6040805180830381865af4158015611775573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611799919061579e565b91509150806117bf57604051632d07135360e01b8152811515600482015260240161078f565b5f828152600484016020526040902080546117d9906150df565b90505f036117fd5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580860160205260409091205460ff169081111561182457611824614f49565b14611857575f8281526005840160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615117565b5f828152600484016020526040812061186f91614c31565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62936118f593600190910192600160c01b909204169061583a565b60405180910390a2509392505050565b5f61190e61279f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561194757611947614f49565b600381111561195857611958614f49565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119d1576119d1614f49565b141580156119f257506003815160038111156119ef576119ef614f49565b14155b15611a13578051604051633b0d540d60e21b815261078f919060040161576d565b5f611a218260400151611e1f565b905080606001516001600160401b03165f03611a53576040516339b894f960e21b81526004810185905260240161078f565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611ac193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611adb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b029190810190615220565b6040518263ffffffff1660e01b8152600401611b1e9190615251565b6020604051808303815f875af1158015611b3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee69190615263565b5f611b67612069565b60030154600160401b90046001600160401b0316919050565b5f611b89612069565b5f8381526004820160205260409020805491925090611ba7906150df565b90505f03611bcb5760405163089938b360e11b81526004810183905260240161078f565b60015f838152600580840160205260409091205460ff1690811115611bf257611bf2614f49565b14611c25575f8281526005820160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615117565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c5c920161584c565b6020604051808303815f875af1158015611c78573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106009190615263565b5f805f611ca8846123ba565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611ce89190615251565b606060405180830381865af4158015611d03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d27919061585e565b9250925092505f611d36612069565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611d8a57604051632e19bc2d60e11b81526001600160401b038416600482015260240161078f565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611e0a90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e27614c68565b5f611e30612069565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611e6a57611e6a614f49565b6005811115611e7b57611e7b614f49565b8152602001600182018054611e8f906150df565b80601f0160208091040260200160405190810160405280929190818152602001828054611ebb906150df565b8015611f065780601f10611edd57610100808354040283529160200191611f06565b820191905f5260205f20905b815481529060010190602001808311611ee957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611fa05760405163caa903f960e01b81526001600160a01b038216600482015260240161078f565b5f611fa961279f565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611fd75733611433565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f8061200f612069565b905080600601848460405161202592919061589e565b90815260200160405180910390205491505092915050565b6120498484848461208d565b61089257604051631036cf9160e11b81526004810185905260240161078f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f8061209761279f565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120d0576120d0614f49565b60038111156120e1576120e1614f49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61215782611e1f565b905060028351600381111561216e5761216e614f49565b1461218f578251604051633b0d540d60e21b815261078f919060040161576d565b60208301516001600160a01b0316331461222b575f8281526006850160205260409020546001600160a01b031633146121c85733611433565b5f82815260068501602052604090205460c08201516121f791600160b01b90046001600160401b0316906154f8565b6001600160401b031642101561222b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b60028151600581111561224057612240614f49565b036123625760028401546080840151612262916001600160401b0316906154f8565b6001600160401b03164210156122965760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b87156122a8576122a682886124f9565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516122e19184916122dc91906158ad565b6134ec565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561232484888c6136b6565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f269350505050565b60048151600581111561237757612377614f49565b0361239e5761238783878b6136b6565b5061239189612cba565b6001945050505050610f26565b805160405163170cc93360e21b815261078f9190600401615117565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561241e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261244591908101906158cd565b915091508061246757604051636b2f19e960e01b815260040160405180910390fd5b81511561248d578151604051636ba589a560e01b8152600481019190915260240161078f565b60208201516001600160a01b0316156124c9576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5092915050565b5f806124da61279f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612544573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261256b91908101906158cd565b915091508061258d57604051636b2f19e960e01b815260040160405180910390fd5b5f61259661279f565b60058101548451919250146125c4578251604051636ba589a560e01b8152600481019190915260240161078f565b60208301516001600160a01b031615612600576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b60208301516001600160a01b03161561263c576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161078f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126799190615251565b6040805180830381865af4158015612693573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b7919061595d565b915091508188146126e55760405163fee3144560e01b8152600481018390526024810189905260440161078f565b5f8881526006840160205260409020600101546001600160401b039081169082161115612776575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612794565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127cd61279f565b90506127d8866138a4565b5f6127e287611e1f565b90506127ed876124d0565b6127fc57600192505050610f26565b5f8781526006830160205260409020546001600160a01b031633146128215733611433565b5f87815260068301602052604090205460c082015161285091600160b01b90046001600160401b0316906154f8565b6001600160401b03168160e001516001600160401b031610156128975760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161078f565b5f86156128af576128a888876124f9565b90506128cd565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128f29061119c565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa15801561295c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129809190615263565b90506001600160a01b0386166129ac575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906129cb908490615980565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615ceb833981519152805460011901612a3b57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a4b61279f565b600281015490915061ffff600160401b90910481169086161080612a74575061271061ffff8616115b15612a9857604051635f12e6c360e11b815261ffff8616600482015260240161078f565b60028101546001600160401b039081169085161015612ad4576040516202a06d60e11b81526001600160401b038516600482015260240161078f565b8054831080612ae65750806001015483115b15612b075760405163222d164360e21b81526004810184905260240161078f565b5f612b1184613b8f565b90505f612b1d82610e86565b90505f612be4612b2d8a80615993565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612b6e9250505060208c018c615993565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bb29250505060608d0160408e01614e94565b612bbf60608e018e6159d5565b612bc8906159e9565b612bd560808f018f6159d5565b612bde906159e9565b87613bb2565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615ceb83398151915255565b612c9a848484846127c3565b61089257604051635bff683f60e11b81526004810185905260240161078f565b5f612cc361279f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612cfc57612cfc614f49565b6003811115612d0d57612d0d614f49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d81613f6b565b8260800151612d9091906154f8565b6001600160401b0316421015612dc45760405163fb6ce63f60e01b81526001600160401b034216600482015260240161078f565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e1f575060208201515b5f80612e2c838886613f86565b91509150612e4585602001516115cb876060015161119c565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612e9461279f565b5f838152600a82016020526040812080549190559091506108928482614033565b5f612ebe614c68565b5f612ec7612069565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612eee886123ba565b604001516040518263ffffffff1660e01b8152600401612f0e9190615251565b6040805180830381865af4158015612f28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f4c919061579e565b915091508015612f7357604051632d07135360e01b8152811515600482015260240161078f565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612fab57612fab614f49565b6005811115612fbc57612fbc614f49565b8152602001600182018054612fd0906150df565b80601f0160208091040260200160405190810160405280929190818152602001828054612ffc906150df565b80156130475780601f1061301e57610100808354040283529160200191613047565b820191905f5260205f20905b81548152906001019060200180831161302a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156130bf576130bf614f49565b141580156130e057506001815160058111156130dd576130dd614f49565b14155b1561310157805160405163170cc93360e21b815261078f9190600401615117565b60038151600581111561311657613116614f49565b036131245760048152613129565b600581525b83600601816020015160405161313f91906153d4565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561318257613182614f49565b02179055506020820151600182019061319b9082615429565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615ccb833981519152546113d1906001600160a01b031683836140a9565b5f8061329761279f565b90505f6132a66102f285613b8f565b90505f6132b287611e1f565b90506132bd876124d0565b6132dd576040516330efa98b60e01b81526004810188905260240161078f565b6002815160058111156132f2576132f2614f49565b1461331357805160405163170cc93360e21b815261078f9190600401615117565b5f828260a0015161332491906154f8565b905083600201600a9054906101000a90046001600160401b0316826040015161334d9190615564565b6001600160401b0316816001600160401b0316111561338a57604051636d51fe0560e11b81526001600160401b038216600482015260240161078f565b5f806133968a846134ec565b915091505f8a836040516020016133c492919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6134da614108565b6134e382614153565b6113d1816141d0565b5f805f6134f7612069565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166135278582614238565b5f613531876144a5565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156135d5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135fc9190810190615220565b6040518263ffffffff1660e01b81526004016136189190615251565b6020604051808303815f875af1158015613634573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136589190615263565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806136c061279f565b90505f6136d08660400151611e1f565b90505f6003825160058111156136e8576136e8614f49565b1480613706575060048251600581111561370457613704614f49565b145b15613716575060e0810151613753565b60028251600581111561372b5761372b614f49565b03613737575042613753565b815160405163170cc93360e21b815261078f9190600401615117565b86608001516001600160401b0316816001600160401b03161161377b575f93505050506134cb565b600483015460608801515f916001600160a01b031690634f22429f906137a09061119c565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613821573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138459190615263565b90506001600160a01b03871661385d57876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f6138ad612069565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156138e7576138e7614f49565b60058111156138f8576138f8614f49565b815260200160018201805461390c906150df565b80601f0160208091040260200160405190810160405280929190818152602001828054613938906150df565b80156139835780601f1061395a57610100808354040283529160200191613983565b820191905f5260205f20905b81548152906001019060200180831161396657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c090910152909150815160058111156139fb576139fb614f49565b14613a2e575f8381526005830160205260409081902054905163170cc93360e21b815261078f9160ff1690600401615117565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613a7357613a73614f49565b021790555060208201516001820190613a8c9082615429565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b2c84826134ec565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613b81939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610ed4825f80516020615ccb833981519152546001600160a01b03169061450e565b5f613bbb612069565b6007015460ff16613bdf57604051637fab81e560e01b815260040160405180910390fd5b5f613be8612069565b905042866001600160401b0316111580613c175750613c0a6202a30042615980565b866001600160401b031610155b15613c4057604051635879da1360e11b81526001600160401b038716600482015260240161078f565b60038101546001600160401b0390613c6390600160401b90048216858316615980565b1115613c8d57604051633e1a785160e01b81526001600160401b038416600482015260240161078f565b613c968561451a565b613c9f8461451a565b8651603014613cc65786516040516326475b2f60e11b815260040161078f91815260200190565b87515f03613ce95787604051633e08a12560e11b815260040161078f9190615251565b5f801b8160060189604051613cfe91906153d4565b90815260200160405180910390205414613d2d578760405163a41f772f60e01b815260040161078f9190615251565b613d37835f614238565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613db79190615b16565b5f60405180830381865af4158015613dd1573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613df89190810190615bcd565b5f82815260048601602052604090209193509150613e168282615429565b5081836006018b604051613e2a91906153d4565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e66908590600401615251565b6020604051808303815f875af1158015613e82573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ea69190615263565b5f8481526005860160205260409020805460ff19166001908117825591925001613ed08c82615429565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf90613f54908e9085908e908c90615c10565b60405180910390a250909998505050505050505050565b5f613f74612069565b600101546001600160401b0316919050565b5f805f613f9161279f565b5f86815260088201602052604081208054908290559192509081908015614025575f87815260068501602052604090205461271090613fdb90600160a01b900461ffff1683615787565b613fe5919061574e565b91508184600a015f8981526020019081526020015f205f8282546140099190615980565b9091555061401990508282615c48565b92506140258984614033565b509097909650945050505050565b5f5f80516020615ccb83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b15801561408e575f80fd5b505af11580156140a0573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614639565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661415157604051631afcd79f60e31b815260040160405180910390fd5b565b61415b614108565b6141648161469a565b61416c6146b3565b6141cd6060820135608083013561418960c0850160a08601614e94565b61419960e0860160c08701615c5b565b6141aa610100870160e08801615c74565b6101008701356141c261014089016101208a0161527a565b8861014001356146c3565b50565b6141d8614108565b5f80516020615ccb8339815191526001600160a01b03821661421857604051637330680360e01b81526001600160a01b038316600482015260240161078f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f614241612069565b90505f826001600160401b0316846001600160401b0316111561426f5761426883856158ad565b905061427c565b61427984846158ad565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142e95750600184015481516142e5916001600160401b031690615980565b8210155b15614311576001600160401b0380841660608301528282526040820151166020820152614330565b828160600181815161432391906154f8565b6001600160401b03169052505b6060810151614340906064615564565b602082015160018601546001600160401b03929092169161436b9190600160401b900460ff16615564565b6001600160401b031610156143a457606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161078f565b85816040018181516143b691906154f8565b6001600160401b03169052506040810180518691906143d69083906158ad565b6001600160401b03169052506001840154604082015160649161440491600160401b90910460ff1690615564565b6001600160401b0316101561443d576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161078f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f806144af612069565b5f84815260058201602052604090206002018054919250906008906144e390600160401b90046001600160401b0316615c94565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6134cb833384614885565b805163ffffffff16158015614533575060208101515115155b1561456757805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b602081015151815163ffffffff1611156145aa57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161078f565b60015b8160200151518110156113d15760208201516145ca600183615c48565b815181106145da576145da6152da565b60200260200101516001600160a01b031682602001518281518110614601576146016152da565b60200260200101516001600160a01b0316101561463157604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145ad565b5f61464d6001600160a01b038416836149e8565b905080515f1415801561467157508080602001905181019061466f9190615caf565b155b1561060057604051635274afe760e01b81526001600160a01b038416600482015260240161078f565b6146a2614108565b6146aa6149f5565b6141cd816149fd565b6146bb614108565b614151614ae1565b6146cb614108565b5f6146d461279f565b905061ffff861615806146ec575061271061ffff8716115b1561471057604051635f12e6c360e11b815261ffff8716600482015260240161078f565b878911156147345760405163222d164360e21b8152600481018a905260240161078f565b60ff851615806147475750600a60ff8616115b1561476a5760405163170db35960e31b815260ff8616600482015260240161078f565b614772613f6b565b6001600160401b0316876001600160401b031610156147ae576040516202a06d60e11b81526001600160401b038816600482015260240161078f565b835f036147ce5760405163a733007160e01b815260040160405180910390fd5b816147ef57604051632f6bd1db60e01b81526004810183905260240161078f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148ef9190615263565b90506149066001600160a01b038616853086614ae9565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561494a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061496e9190615263565b90508181116149d45760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161078f565b6149de8282615c48565b9695505050505050565b60606134cb83835f614b22565b614151614108565b614a05614108565b5f614a0e612069565b8235815590506014614a266060840160408501615c74565b60ff161180614a455750614a406060830160408401615c74565b60ff16155b15614a7957614a5a6060830160408401615c74565b604051634a59bbff60e11b815260ff909116600482015260240161078f565b614a896060830160408401615c74565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aba6040830160208401614e94565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c7b614108565b6040516001600160a01b0384811660248301528381166044830152606482018390526108929186918216906323b872dd906084016140d6565b606081471015614b475760405163cd78605960e01b815230600482015260240161078f565b5f80856001600160a01b03168486604051614b6291906153d4565b5f6040518083038185875af1925050503d805f8114614b9c576040519150601f19603f3d011682016040523d82523d5f602084013e614ba1565b606091505b50915091506149de868383606082614bc157614bbc82614c08565b6134cb565b8151158015614bd857506001600160a01b0384163b155b15614c0157604051639996b31560e01b81526001600160a01b038516600482015260240161078f565b50806134cb565b805115614c185780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c3d906150df565b5f825580601f10614c4c575050565b601f0160209004905f5260205f20908101906141cd9190614cad565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614cc1575f8155600101614cae565b5090565b80151581146141cd575f80fd5b803563ffffffff811681146115ee575f80fd5b5f805f60608486031215614cf7575f80fd5b833592506020840135614d0981614cc5565b9150614d1760408501614cd2565b90509250925092565b5f60208284031215614d30575f80fd5b5035919050565b5f8060408385031215614d48575f80fd5b82356001600160401b03811115614d5d575f80fd5b830160808186031215614d6e575f80fd5b9150614d7c60208401614cd2565b90509250929050565b5f8060408385031215614d96575f80fd5b82359150614d7c60208401614cd2565b6001600160a01b03811681146141cd575f80fd5b5f805f8060808587031215614dcd575f80fd5b843593506020850135614ddf81614cc5565b9250614ded60408601614cd2565b91506060850135614dfd81614da6565b939692955090935050565b803561ffff811681146115ee575f80fd5b6001600160401b03811681146141cd575f80fd5b5f805f8060808587031215614e40575f80fd5b84356001600160401b03811115614e55575f80fd5b850160a08188031215614e66575f80fd5b9350614e7460208601614e08565b92506040850135614e8481614e19565b9396929550929360600135925050565b5f60208284031215614ea4575f80fd5b81356134cb81614e19565b5f8060408385031215614ec0575f80fd5b823591506020830135614ed281614da6565b809150509250929050565b5f60208284031215614eed575f80fd5b6134cb82614cd2565b5f8060408385031215614f07575f80fd5b50508035926020909101359150565b5f80828403610180811215614f29575f80fd5b61016080821215614f38575f80fd5b8493508301359050614ed281614da6565b634e487b7160e01b5f52602160045260245ffd5b60068110614f6d57614f6d614f49565b9052565b5f5b83811015614f8b578181015183820152602001614f73565b50505f910152565b5f8151808452614faa816020860160208601614f71565b601f01601f19169290920160200192915050565b60208152614fd0602082018351614f5d565b5f6020830151610100806040850152614fed610120850183614f93565b915060408501516001600160401b0380821660608701528060608801511660808701525050608085015161502c60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215615085575f80fd5b82356001600160401b038082111561509b575f80fd5b818501915085601f8301126150ae575f80fd5b8135818111156150bc575f80fd5b8660208285010111156150cd575f80fd5b60209290920196919550909350505050565b600181811c908216806150f357607f821691505b60208210810361511157634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ed48284614f5d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561515b5761515b615125565b60405290565b604080519081016001600160401b038111828210171561515b5761515b615125565b604051601f8201601f191681016001600160401b03811182821017156151ab576151ab615125565b604052919050565b5f6001600160401b038211156151cb576151cb615125565b50601f01601f191660200190565b5f82601f8301126151e8575f80fd5b81516151fb6151f6826151b3565b615183565b81815284602083860101111561520f575f80fd5b610f26826020830160208701614f71565b5f60208284031215615230575f80fd5b81516001600160401b03811115615245575f80fd5b610f26848285016151d9565b602081525f6134cb6020830184614f93565b5f60208284031215615273575f80fd5b5051919050565b5f6020828403121561528a575f80fd5b81356134cb81614da6565b5f808335601e198436030181126152aa575f80fd5b8301803591506001600160401b038211156152c3575f80fd5b6020019150600581901b36038213156136af575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615302575f80fd5b9190910192915050565b5f82601f83011261531b575f80fd5b81356153296151f6826151b3565b81815284602083860101111561533d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615369575f80fd5b615371615139565b82356001600160401b0380821115615387575f80fd5b6153933683870161530c565b835260208501359150808211156153a8575f80fd5b506153b53682860161530c565b60208301525060408301356153c981614e19565b604082015292915050565b5f8251615302818460208701614f71565b601f82111561060057805f5260205f20601f840160051c8101602085101561540a5750805b601f840160051c820191505b81811015610ee6575f8155600101615416565b81516001600160401b0381111561544257615442615125565b6154568161545084546150df565b846153e5565b602080601f831160018114615489575f84156154725750858301515b5f19600386901b1c1916600185901b17855561106d565b5f85815260208120601f198616915b828110156154b757888601518255948401946001909101908401615498565b50858210156154d457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156124c9576124c96154e4565b604081525f61552a6040830185614f93565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361555a5761555a6154e4565b6001019392505050565b6001600160401b03818116838216028082169190828114615587576155876154e4565b505092915050565b5f808335601e198436030181126155a4575f80fd5b83016020810192503590506001600160401b038111156155c2575f80fd5b8036038213156136af575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156ad57848303601f19018952813536889003605e19018112615634575f80fd5b87016060615642828061558f565b82875261565283880182846155d0565b925050506156628683018361558f565b868303888801526156748382846155d0565b92505050604080830135925061568983614e19565b6001600160401b03929092169490910193909352978301979083019060010161560f565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156de81614da6565b6001600160a01b031660608381019190915283013536849003601e19018112615705575f80fd5b83016020810190356001600160401b03811115615720575f80fd5b8060051b3603821315615731575f80fd5b60808085015261574560a0850182846155f8565b95945050505050565b5f8261576857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061578157615781614f49565b91905290565b8082028115828204841417610ed457610ed46154e4565b5f80604083850312156157af575f80fd5b825191506020830151614ed281614cc5565b5f81546157cd816150df565b8085526020600183811680156157ea57600181146158045761582f565b60ff1985168884015283151560051b88018301955061582f565b865f52825f205f5b858110156158275781548a820186015290830190840161580c565b890184019650505b505050505092915050565b604081525f61552a60408301856157c1565b602081525f6134cb60208301846157c1565b5f805f60608486031215615870575f80fd5b83519250602084015161588281614e19565b604085015190925061589381614e19565b809150509250925092565b818382375f9101908152919050565b6001600160401b038281168282160390808211156124c9576124c96154e4565b5f80604083850312156158de575f80fd5b82516001600160401b03808211156158f4575f80fd5b9084019060608287031215615907575f80fd5b61590f615139565b82518152602083015161592181614da6565b6020820152604083015182811115615937575f80fd5b615943888286016151d9565b6040830152508094505050506020830151614ed281614cc5565b5f806040838503121561596e575f80fd5b825191506020830151614ed281614e19565b80820180821115610ed457610ed46154e4565b5f808335601e198436030181126159a8575f80fd5b8301803591506001600160401b038211156159c1575f80fd5b6020019150368190038213156136af575f80fd5b5f8235603e19833603018112615302575f80fd5b5f604082360312156159f9575f80fd5b615a01615161565b615a0a83614cd2565b81526020808401356001600160401b0380821115615a26575f80fd5b9085019036601f830112615a38575f80fd5b813581811115615a4a57615a4a615125565b8060051b9150615a5b848301615183565b8181529183018401918481019036841115615a74575f80fd5b938501935b83851015615a9e5784359250615a8e83614da6565b8282529385019390850190615a79565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b0b5784516001600160a01b03168252938301936001929092019190830190615ae2565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b3c610100840182614f93565b90506040840151601f1980858403016060860152615b5a8383614f93565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b8a8383615ab0565b925060a08601519150808584030160c086015250615ba88282615ab0565b91505060c0840151615bc560e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bde575f80fd5b8251915060208301516001600160401b03811115615bfa575f80fd5b615c06858286016151d9565b9150509250929050565b608081525f615c226080830187614f93565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610ed457610ed46154e4565b5f60208284031215615c6b575f80fd5b6134cb82614e08565b5f60208284031215615c84575f80fd5b813560ff811681146134cb575f80fd5b5f6001600160401b0380831681810361555a5761555a6154e4565b5f60208284031215615cbf575f80fd5b81516134cb81614cc556fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122002dd2e18c15e62b76d660348b87fcc64fdd94d10b81ea11542034906fae8fd5764736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615e8e380380615e8e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d418061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061026b575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f141461056b578063d5f20ff61461059b578063df93d8de146105bb578063e4a63c40146105c5578063fb8b11dd146105d9578063fd7ac5e7146105ec575f80fd5b8063ba3a4b971461050e578063bb0b193814610521578063bc5fbfec14610529578063bee0a03f14610550578063c974d1b614610563575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104a05780639e478eea146104b3578063a3a65e48146104c6578063a9778a7a1461031a578063afb98096146104d9578063b771b3bc14610500575f80fd5b80638280a25a1461044c5780638ef34c981461045457806393e24598146104675780639681d9401461047a5780639ae064471461048d575f80fd5b80635dc1f535116101e257806363e2ca97116101a757806363e2ca9714610398578063732214f8146103db57806376f78621146103e2578063785e9e86146103f55780637d8d2f771461042657806380dd672f14610439575f80fd5b80635dc1f5351461037d5780635dd6a6cb1461038557806360305d621461039857806360ad7784146103b557806362065856146103c8575f80fd5b806325e1c7761161023357806325e1c776146102dc5780632e2194d8146102ef57806335455ded1461031a57806337b9be8f146103365780633a1cfff6146103495780634bee00401461035c575f80fd5b80630118acc41461026f5780630322ed9814610284578063151d30d1146102975780631ec44724146102b657806320d91b7a146102c9575b5f80fd5b61028261027d366004614d5b565b6105ff565b005b610282610292366004614d96565b610610565b61029f600a81565b60405160ff90911681526020015b60405180910390f35b6102826102c4366004614d5b565b6108a3565b6102826102d7366004614dad565b6108af565b6102826102ea366004614dfb565b610e63565b6103026102fd366004614d96565b610ed7565b6040516001600160401b0390911681526020016102ad565b61032361271081565b60405161ffff90911681526020016102ad565b610282610344366004614e30565b610f2b565b610282610357366004614d5b565b610f3e565b61036f61036a366004614ea3565b610f4a565b6040519081526020016102ad565b61036f610f7f565b610282610393366004614e30565b610f8e565b6103a0601481565b60405163ffffffff90911681526020016102ad565b6102826103c3366004614dfb565b610f9a565b61036f6103d6366004614f0a565b6111ed565b61036f5f81565b6102826103f0366004614d5b565b61120d565b5f80516020615ccc833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102ad565b610282610434366004614e30565b611219565b610282610447366004614dfb565b611225565b61029f603081565b610282610462366004614f25565b611426565b610282610475366004614d96565b6114d7565b61036f610488366004614f53565b61156b565b61028261049b366004614e30565b611644565b61036f6104ae366004614f6c565b611650565b6102826104c1366004614f8c565b61167c565b61036f6104d4366004614f53565b61175b565b61036f7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61040e6005600160991b0181565b61028261051c366004614d96565b61194a565b610302611ba3565b61036f7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b61028261055e366004614d96565b611bc5565b61029f601481565b61057e610579366004614f53565b611ce1565b604080519283526001600160401b039091166020830152016102ad565b6105ae6105a9366004614d96565b611e64565b6040516102ad9190615034565b6103026202a30081565b61036f5f80516020615ccc83398151915281565b6102826105e7366004614f25565b611fb3565b61036f6105fa3660046150ea565b61204a565b61060b8383835f612082565b505050565b5f6106196120ae565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561065357610653614fbf565b600581111561066457610664614fbf565b815260200160018201805461067890615155565b80601f01602080910402602001604051908101604052809291908181526020018280546106a490615155565b80156106ef5780601f106106c6576101008083540402835291602001916106ef565b820191905f5260205f20905b8154815290600101906020018083116106d257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561076757610767614fbf565b146107a3575f8381526005830160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561081a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108419190810190615296565b6040518263ffffffff1660e01b815260040161085d91906152c7565b6020604051808303815f875af1158015610879573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089d91906152d9565b50505050565b61089d8383835f6120d2565b5f6108b86120ae565b600781015490915060ff16156108e157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610924573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094891906152d9565b836020013514610971576040516372b0a7e760e11b81526020840135600482015260240161079a565b3061098260608501604086016152f0565b6001600160a01b0316146109c5576109a060608401604085016152f0565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161079a565b5f6109d3606085018561530b565b905090505f805b828163ffffffff161015610c59575f6109f6606088018861530b565b8363ffffffff16818110610a0c57610a0c615350565b9050602002810190610a1e9190615364565b610a27906153cf565b80516040519192505f916006880191610a3f9161544a565b90815260200160405180910390205414610a6f57805160405163a41f772f60e01b815261079a91906004016152c7565b805151601414610a95578051604051633e08a12560e11b815261079a91906004016152c7565b5f6002885f013584604051602001610ac492919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610ade9161544a565b602060405180830381855afa158015610af9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b1c91906152d9565b90508086600601835f0151604051610b34919061544a565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b74908261549f565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610be3908561556e565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610c3e91906001600160401b0391909116815260200190565b60405180910390a3505080610c529061558e565b90506109da565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c9c910460ff16836155b0565b6001600160401b03161015610ccf57604051633e1a785160e01b81526001600160401b038216600482015260240161079a565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610cf3876123ff565b604001516040518263ffffffff1660e01b8152600401610d1391906152c7565b602060405180830381865af4158015610d2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5291906152d9565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d8c9190615706565b5f60405180830381865af4158015610da6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dcd9190810190615296565b90505f600282604051610de0919061544a565b602060405180830381855afa158015610dfb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e1e91906152d9565b9050828114610e4a5760405163baaea89d60e01b8152600481018290526024810184905260440161079a565b5050506007909201805460ff1916600117905550505050565b610e6c82612515565b610e8c576040516330efa98b60e01b81526004810183905260240161079a565b5f610e9683611e64565b5190506002816005811115610ead57610ead614fbf565b14610ecd578060405163170cc93360e21b815260040161079a919061518d565b61089d838361253e565b5f80610ee16127e4565b60030154610eef908461579a565b9050801580610f0457506001600160401b0381115b15610f255760405163222d164360e21b81526004810184905260240161079a565b92915050565b610f37848484846120d2565b5050505050565b61089d8383835f612808565b5f610f53612a4f565b610f5f85858585612a86565b9050610f7760015f80516020615cec83398151915255565b949350505050565b5f610f886120ae565b54919050565b61089d84848484612cd3565b5f610fa36127e4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610fdc57610fdc614fbf565b6003811115610fed57610fed614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61106382611e64565b905060018351600381111561107a5761107a614fbf565b1461109b578251604051633b0d540d60e21b815261079a91906004016157b9565b6004815160058111156110b0576110b0614fbf565b036110c6576110be86612cff565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611166575f806110f387611ce1565b915091508184146111215760405163fee3144560e01b8152600481018390526024810185905260440161079a565b8460a001516001600160401b0316816001600160401b0316101561116357604051632e19bc2d60e11b81526001600160401b038216600482015260240161079a565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111f66127e4565b60030154610f25906001600160401b0384166157d3565b61060b8383835f612cd3565b610f3784848484612808565b61122d612a4f565b5f6112366127e4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561126f5761126f614fbf565b600381111561128057611280614fbf565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112f9576112f9614fbf565b1461131a578051604051633b0d540d60e21b815261079a91906004016157b9565b5f6113288260400151611e64565b905060046113398360400151611e64565b51600581111561134b5761134b614fbf565b1415801561137257508160c001516001600160401b031681608001516001600160401b0316105b15611400575f8061138286611ce1565b91509150818460400151146113bb5781846040015160405163fee3144560e01b815260040161079a929190918252602082015260400190565b806001600160401b03168460c001516001600160401b031611156113fd57604051632e19bc2d60e11b81526001600160401b038216600482015260240161079a565b50505b61140985612cff565b50505061142260015f80516020615cec83398151915255565b5050565b5f61142f6127e4565b90506001600160a01b0382166114635760405163caa903f960e01b81526001600160a01b038316600482015260240161079a565b5f8381526006820160205260409020546001600160a01b031633146114a957335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161079a565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6114e06127e4565b90505f6114ec83611e64565b519050600481600581111561150357611503614fbf565b14611523578060405163170cc93360e21b815260040161079a919061518d565b5f8381526006830160205260409020546001600160a01b031633146115485733611484565b5f83815260068301602052604090205461060b906001600160a01b031684612ed0565b5f611574612a4f565b5f61157d6127e4565b90505f8061158a85612efa565b9150915061159782612515565b6115a5575091506116299050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115e75750805b6004835160058111156115fc576115fc614fbf565b0361160b5761160b8185612ed0565b6116218261161c85604001516111ed565b6132af565b509193505050505b61163f60015f80516020615cec83398151915255565b919050565b61089d84848484612082565b5f611659612a4f565b6116648333846132d2565b9050610f2560015f80516020615cec83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806116c5575080546001600160401b03808416911610155b156116e35760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561170e8484613517565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f806117656120ae565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61178c876123ff565b604001516040518263ffffffff1660e01b81526004016117ac91906152c7565b6040805180830381865af41580156117c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ea91906157ea565b915091508061181057604051632d07135360e01b8152811515600482015260240161079a565b5f8281526004840160205260409020805461182a90615155565b90505f0361184e5760405163089938b360e11b81526004810183905260240161079a565b60015f838152600580860160205260409091205460ff169081111561187557611875614fbf565b146118a8575f8281526005840160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b5f82815260048401602052604081206118c091614ca7565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f6119536127e4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561198c5761198c614fbf565b600381111561199d5761199d614fbf565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a1657611a16614fbf565b14158015611a375750600381516003811115611a3457611a34614fbf565b14155b15611a58578051604051633b0d540d60e21b815261079a91906004016157b9565b5f611a668260400151611e64565b905080606001516001600160401b03165f03611a98576040516339b894f960e21b81526004810185905260240161079a565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b0693906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b479190810190615296565b6040518263ffffffff1660e01b8152600401611b6391906152c7565b6020604051808303815f875af1158015611b7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3791906152d9565b5f611bac6120ae565b60030154600160401b90046001600160401b0316919050565b5f611bce6120ae565b5f8381526004820160205260409020805491925090611bec90615155565b90505f03611c105760405163089938b360e11b81526004810183905260240161079a565b60015f838152600580840160205260409091205460ff1690811115611c3757611c37614fbf565b14611c6a575f8281526005820160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611ca1920161580d565b6020604051808303815f875af1158015611cbd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060b91906152d9565b5f805f611ced846123ff565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611d2d91906152c7565b606060405180830381865af4158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190615897565b9250925092505f611d7b6120ae565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611dcf57604051632e19bc2d60e11b81526001600160401b038416600482015260240161079a565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611e4f90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e6c614cde565b5f611e756120ae565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611eaf57611eaf614fbf565b6005811115611ec057611ec0614fbf565b8152602001600182018054611ed490615155565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0090615155565b8015611f4b5780601f10611f2257610100808354040283529160200191611f4b565b820191905f5260205f20905b815481529060010190602001808311611f2e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611fe55760405163caa903f960e01b81526001600160a01b038216600482015260240161079a565b5f611fee6127e4565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461201c5733611484565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806120546120ae565b905080600601848460405161206a9291906158d7565b90815260200160405180910390205491505092915050565b61208e848484846120d2565b61089d57604051631036cf9160e11b81526004810185905260240161079a565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f806120dc6127e4565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561211557612115614fbf565b600381111561212657612126614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61219c82611e64565b90506002835160038111156121b3576121b3614fbf565b146121d4578251604051633b0d540d60e21b815261079a91906004016157b9565b60208301516001600160a01b03163314612270575f8281526006850160205260409020546001600160a01b0316331461220d5733611484565b5f82815260068501602052604090205460c082015161223c91600160b01b90046001600160401b03169061556e565b6001600160401b03164210156122705760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b60028151600581111561228557612285614fbf565b036123a757600284015460808401516122a7916001600160401b03169061556e565b6001600160401b03164210156122db5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b87156122ed576122eb828861253e565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161232691849161232191906158e6565b613531565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561236984888c6136fb565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f779350505050565b6004815160058111156123bc576123bc614fbf565b036123e3576123cc83878b6136fb565b506123d689612cff565b6001945050505050610f77565b805160405163170cc93360e21b815261079a919060040161518d565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261248a9190810190615906565b91509150806124ac57604051636b2f19e960e01b815260040160405180910390fd5b8151156124d2578151604051636ba589a560e01b8152600481019190915260240161079a565b60208201516001600160a01b03161561250e576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b5092915050565b5f8061251f6127e4565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612589573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125b09190810190615906565b91509150806125d257604051636b2f19e960e01b815260040160405180910390fd5b5f6125db6127e4565b6005810154845191925014612609578251604051636ba589a560e01b8152600481019190915260240161079a565b60208301516001600160a01b031615612645576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b60208301516001600160a01b031615612681576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126be91906152c7565b6040805180830381865af41580156126d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126fc9190615996565b9150915081881461272a5760405163fee3144560e01b8152600481018390526024810189905260440161079a565b5f8881526006840160205260409020600101546001600160401b0390811690821611156127bb575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26127d9565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128126127e4565b905061281d866138e9565b5f61282787611e64565b905061283287612515565b61284157600192505050610f77565b5f8781526006830160205260409020546001600160a01b031633146128665733611484565b5f87815260068301602052604090205460c082015161289591600160b01b90046001600160401b03169061556e565b6001600160401b03168160e001516001600160401b031610156128dc5760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161079a565b5f86156128f4576128ed888761253e565b9050612912565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612937906111ed565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa1580156129a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c591906152d9565b90506001600160a01b0386166129f1575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a109084906159b9565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cec833981519152805460011901612a8057604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a906127e4565b600281015490915061ffff600160401b90910481169086161080612ab9575061271061ffff8616115b15612add57604051635f12e6c360e11b815261ffff8616600482015260240161079a565b60028101546001600160401b039081169085161015612b19576040516202a06d60e11b81526001600160401b038516600482015260240161079a565b8054831080612b2b5750806001015483115b15612b4c5760405163222d164360e21b81526004810184905260240161079a565b5f612b5684613bd4565b90505f612b6282610ed7565b90505f612c29612b728a806159cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bb39250505060208c018c6159cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bf79250505060608d0160408e01614f0a565b612c0460608e018e615a0e565b612c0d90615a22565b612c1a60808f018f615a0e565b612c2390615a22565b87613bf7565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cec83398151915255565b612cdf84848484612808565b61089d57604051635bff683f60e11b81526004810185905260240161079a565b5f612d086127e4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612d4157612d41614fbf565b6003811115612d5257612d52614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612dc6613fe1565b8260800151612dd5919061556e565b6001600160401b0316421015612e095760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e64575060208201515b5f80612e71838886613ffc565b91509150612e8a856020015161161c87606001516111ed565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612ed96127e4565b5f838152600a820160205260408120805491905590915061089d84826140a9565b5f612f03614cde565b5f612f0c6120ae565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612f33886123ff565b604001516040518263ffffffff1660e01b8152600401612f5391906152c7565b6040805180830381865af4158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906157ea565b915091508015612fb857604051632d07135360e01b8152811515600482015260240161079a565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612ff057612ff0614fbf565b600581111561300157613001614fbf565b815260200160018201805461301590615155565b80601f016020809104026020016040519081016040528092919081815260200182805461304190615155565b801561308c5780601f106130635761010080835404028352916020019161308c565b820191905f5260205f20905b81548152906001019060200180831161306f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561310457613104614fbf565b14158015613125575060018151600581111561312257613122614fbf565b14155b1561314657805160405163170cc93360e21b815261079a919060040161518d565b60038151600581111561315b5761315b614fbf565b03613169576004815261316e565b600581525b836006018160200151604051613184919061544a565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156131c7576131c7614fbf565b0217905550602082015160018201906131e0908261549f565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615ccc83398151915254611422906001600160a01b0316838361411f565b5f806132dc6127e4565b90505f6132eb6102fd85613bd4565b90505f6132f787611e64565b905061330287612515565b613322576040516330efa98b60e01b81526004810188905260240161079a565b60028151600581111561333757613337614fbf565b1461335857805160405163170cc93360e21b815261079a919060040161518d565b5f828260a00151613369919061556e565b905083600201600a9054906101000a90046001600160401b0316826040015161339291906155b0565b6001600160401b0316816001600160401b031611156133cf57604051636d51fe0560e11b81526001600160401b038216600482015260240161079a565b5f806133db8a84613531565b915091505f8a8360405160200161340992919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61351f61417e565b613528826141c9565b61142281614246565b5f805f61353c6120ae565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b031661356c85826142ae565b5f6135768761451b565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561361a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136419190810190615296565b6040518263ffffffff1660e01b815260040161365d91906152c7565b6020604051808303815f875af1158015613679573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061369d91906152d9565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806137056127e4565b90505f6137158660400151611e64565b90505f60038251600581111561372d5761372d614fbf565b148061374b575060048251600581111561374957613749614fbf565b145b1561375b575060e0810151613798565b60028251600581111561377057613770614fbf565b0361377c575042613798565b815160405163170cc93360e21b815261079a919060040161518d565b86608001516001600160401b0316816001600160401b0316116137c0575f9350505050613510565b600483015460608801515f916001600160a01b031690634f22429f906137e5906111ed565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613866573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061388a91906152d9565b90506001600160a01b0387166138a257876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f6138f26120ae565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561392c5761392c614fbf565b600581111561393d5761393d614fbf565b815260200160018201805461395190615155565b80601f016020809104026020016040519081016040528092919081815260200182805461397d90615155565b80156139c85780601f1061399f576101008083540402835291602001916139c8565b820191905f5260205f20905b8154815290600101906020018083116139ab57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613a4057613a40614fbf565b14613a73575f8381526005830160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613ab857613ab8614fbf565b021790555060208201516001820190613ad1908261549f565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b718482613531565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613bc6939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610f25825f80516020615ccc833981519152546001600160a01b031690614584565b5f613c006120ae565b6007015460ff16613c2457604051637fab81e560e01b815260040160405180910390fd5b5f613c2d6120ae565b905042866001600160401b0316111580613c5c5750613c4f6202a300426159b9565b866001600160401b031610155b15613c8557604051635879da1360e11b81526001600160401b038716600482015260240161079a565b60038101546001600160401b0390613ca890600160401b900482168583166159b9565b1115613cd257604051633e1a785160e01b81526001600160401b038416600482015260240161079a565b613cdb85614590565b613ce484614590565b8651603014613d0b5786516040516326475b2f60e11b815260040161079a91815260200190565b8751601414613d2f5787604051633e08a12560e11b815260040161079a91906152c7565b5f801b8160060189604051613d44919061544a565b90815260200160405180910390205414613d73578760405163a41f772f60e01b815260040161079a91906152c7565b613d7d835f6142ae565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613dfd9190615b4f565b5f60405180830381865af4158015613e17573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e3e9190810190615c06565b5f82815260048601602052604090209193509150613e5c828261549f565b5081836006018b604051613e70919061544a565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613eac9085906004016152c7565b6020604051808303815f875af1158015613ec8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eec91906152d9565b5f8481526005860160205260409020805460ff19166001908117825591925001613f168c8261549f565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b0319169055613f6d8b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a604051613fca939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b5f613fea6120ae565b600101546001600160401b0316919050565b5f805f6140076127e4565b5f8681526008820160205260408120805490829055919250908190801561409b575f8781526006850160205260409020546127109061405190600160a01b900461ffff16836157d3565b61405b919061579a565b91508184600a015f8981526020019081526020015f205f82825461407f91906159b9565b9091555061408f90508282615c49565b925061409b89846140a9565b509097909650945050505050565b5f5f80516020615ccc83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614104575f80fd5b505af1158015614116573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060b91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506146af565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166141c757604051631afcd79f60e31b815260040160405180910390fd5b565b6141d161417e565b6141da81614710565b6141e2614729565b614243606082013560808301356141ff60c0850160a08601614f0a565b61420f60e0860160c08701615c5c565b614220610100870160e08801615c75565b61010087013561423861014089016101208a016152f0565b886101400135614739565b50565b61424e61417e565b5f80516020615ccc8339815191526001600160a01b03821661428e57604051637330680360e01b81526001600160a01b038316600482015260240161079a565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6142b76120ae565b90505f826001600160401b0316846001600160401b031611156142e5576142de83856158e6565b90506142f2565b6142ef84846158e6565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061435f57506001840154815161435b916001600160401b0316906159b9565b8210155b15614387576001600160401b03808416606083015282825260408201511660208201526143a6565b8281606001818151614399919061556e565b6001600160401b03169052505b60608101516143b69060646155b0565b602082015160018601546001600160401b0392909216916143e19190600160401b900460ff166155b0565b6001600160401b0316101561441a57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161079a565b858160400181815161442c919061556e565b6001600160401b031690525060408101805186919061444c9083906158e6565b6001600160401b03169052506001840154604082015160649161447a91600160401b90910460ff16906155b0565b6001600160401b031610156144b3576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161079a565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f806145256120ae565b5f848152600582016020526040902060020180549192509060089061455990600160401b90046001600160401b0316615c95565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6135108333846148fb565b805163ffffffff161580156145a9575060208101515115155b156145dd57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161079a565b602081015151815163ffffffff16111561462057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161079a565b60015b816020015151811015611422576020820151614640600183615c49565b8151811061465057614650615350565b60200260200101516001600160a01b03168260200151828151811061467757614677615350565b60200260200101516001600160a01b031610156146a757604051630dbc8d5f60e31b815260040160405180910390fd5b600101614623565b5f6146c36001600160a01b03841683614a5e565b905080515f141580156146e75750808060200190518101906146e59190615cb0565b155b1561060b57604051635274afe760e01b81526001600160a01b038416600482015260240161079a565b61471861417e565b614720614a6b565b61424381614a73565b61473161417e565b6141c7614b57565b61474161417e565b5f61474a6127e4565b905061ffff86161580614762575061271061ffff8716115b1561478657604051635f12e6c360e11b815261ffff8716600482015260240161079a565b878911156147aa5760405163222d164360e21b8152600481018a905260240161079a565b60ff851615806147bd5750600a60ff8616115b156147e05760405163170db35960e31b815260ff8616600482015260240161079a565b6147e8613fe1565b6001600160401b0316876001600160401b03161015614824576040516202a06d60e11b81526001600160401b038816600482015260240161079a565b835f036148445760405163a733007160e01b815260040160405180910390fd5b8161486557604051632f6bd1db60e01b81526004810183905260240161079a565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614941573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061496591906152d9565b905061497c6001600160a01b038616853086614b5f565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156149c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149e491906152d9565b9050818111614a4a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161079a565b614a548282615c49565b9695505050505050565b606061351083835f614b98565b6141c761417e565b614a7b61417e565b5f614a846120ae565b8235815590506014614a9c6060840160408501615c75565b60ff161180614abb5750614ab66060830160408401615c75565b60ff16155b15614aef57614ad06060830160408401615c75565b604051634a59bbff60e11b815260ff909116600482015260240161079a565b614aff6060830160408401615c75565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b306040830160208401614f0a565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612cc061417e565b6040516001600160a01b03848116602483015283811660448301526064820183905261089d9186918216906323b872dd9060840161414c565b606081471015614bbd5760405163cd78605960e01b815230600482015260240161079a565b5f80856001600160a01b03168486604051614bd8919061544a565b5f6040518083038185875af1925050503d805f8114614c12576040519150601f19603f3d011682016040523d82523d5f602084013e614c17565b606091505b5091509150614a54868383606082614c3757614c3282614c7e565b613510565b8151158015614c4e57506001600160a01b0384163b155b15614c7757604051639996b31560e01b81526001600160a01b038516600482015260240161079a565b5080613510565b805115614c8e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614cb390615155565b5f825580601f10614cc2575050565b601f0160209004905f5260205f20908101906142439190614d23565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614d37575f8155600101614d24565b5090565b8015158114614243575f80fd5b803563ffffffff8116811461163f575f80fd5b5f805f60608486031215614d6d575f80fd5b833592506020840135614d7f81614d3b565b9150614d8d60408501614d48565b90509250925092565b5f60208284031215614da6575f80fd5b5035919050565b5f8060408385031215614dbe575f80fd5b82356001600160401b03811115614dd3575f80fd5b830160808186031215614de4575f80fd5b9150614df260208401614d48565b90509250929050565b5f8060408385031215614e0c575f80fd5b82359150614df260208401614d48565b6001600160a01b0381168114614243575f80fd5b5f805f8060808587031215614e43575f80fd5b843593506020850135614e5581614d3b565b9250614e6360408601614d48565b91506060850135614e7381614e1c565b939692955090935050565b803561ffff8116811461163f575f80fd5b6001600160401b0381168114614243575f80fd5b5f805f8060808587031215614eb6575f80fd5b84356001600160401b03811115614ecb575f80fd5b850160a08188031215614edc575f80fd5b9350614eea60208601614e7e565b92506040850135614efa81614e8f565b9396929550929360600135925050565b5f60208284031215614f1a575f80fd5b813561351081614e8f565b5f8060408385031215614f36575f80fd5b823591506020830135614f4881614e1c565b809150509250929050565b5f60208284031215614f63575f80fd5b61351082614d48565b5f8060408385031215614f7d575f80fd5b50508035926020909101359150565b5f80828403610180811215614f9f575f80fd5b61016080821215614fae575f80fd5b8493508301359050614f4881614e1c565b634e487b7160e01b5f52602160045260245ffd5b60068110614fe357614fe3614fbf565b9052565b5f5b83811015615001578181015183820152602001614fe9565b50505f910152565b5f8151808452615020816020860160208601614fe7565b601f01601f19169290920160200192915050565b60208152615046602082018351614fd3565b5f6020830151610100806040850152615063610120850183615009565b915060408501516001600160401b038082166060870152806060880151166080870152505060808501516150a260a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f80602083850312156150fb575f80fd5b82356001600160401b0380821115615111575f80fd5b818501915085601f830112615124575f80fd5b813581811115615132575f80fd5b866020828501011115615143575f80fd5b60209290920196919550909350505050565b600181811c9082168061516957607f821691505b60208210810361518757634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610f258284614fd3565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151d1576151d161519b565b60405290565b604080519081016001600160401b03811182821017156151d1576151d161519b565b604051601f8201601f191681016001600160401b03811182821017156152215761522161519b565b604052919050565b5f6001600160401b038211156152415761524161519b565b50601f01601f191660200190565b5f82601f83011261525e575f80fd5b815161527161526c82615229565b6151f9565b818152846020838601011115615285575f80fd5b610f77826020830160208701614fe7565b5f602082840312156152a6575f80fd5b81516001600160401b038111156152bb575f80fd5b610f778482850161524f565b602081525f6135106020830184615009565b5f602082840312156152e9575f80fd5b5051919050565b5f60208284031215615300575f80fd5b813561351081614e1c565b5f808335601e19843603018112615320575f80fd5b8301803591506001600160401b03821115615339575f80fd5b6020019150600581901b36038213156136f4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615378575f80fd5b9190910192915050565b5f82601f830112615391575f80fd5b813561539f61526c82615229565b8181528460208386010111156153b3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153df575f80fd5b6153e76151af565b82356001600160401b03808211156153fd575f80fd5b61540936838701615382565b8352602085013591508082111561541e575f80fd5b5061542b36828601615382565b602083015250604083013561543f81614e8f565b604082015292915050565b5f8251615378818460208701614fe7565b601f82111561060b57805f5260205f20601f840160051c810160208510156154805750805b601f840160051c820191505b81811015610f37575f815560010161548c565b81516001600160401b038111156154b8576154b861519b565b6154cc816154c68454615155565b8461545b565b602080601f8311600181146154ff575f84156154e85750858301515b5f19600386901b1c1916600185901b1785556110be565b5f85815260208120601f198616915b8281101561552d5788860151825594840194600190910190840161550e565b508582101561554a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561250e5761250e61555a565b5f63ffffffff8083168181036155a6576155a661555a565b6001019392505050565b6001600160401b038181168382160280821691908281146155d3576155d361555a565b505092915050565b5f808335601e198436030181126155f0575f80fd5b83016020810192503590506001600160401b0381111561560e575f80fd5b8036038213156136f4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156f957848303601f19018952813536889003605e19018112615680575f80fd5b8701606061568e82806155db565b82875261569e838801828461561c565b925050506156ae868301836155db565b868303888801526156c083828461561c565b9250505060408083013592506156d583614e8f565b6001600160401b03929092169490910193909352978301979083019060010161565b565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561572a81614e1c565b6001600160a01b031660608381019190915283013536849003601e19018112615751575f80fd5b83016020810190356001600160401b0381111561576c575f80fd5b8060051b360382131561577d575f80fd5b60808085015261579160a085018284615644565b95945050505050565b5f826157b457634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157cd576157cd614fbf565b91905290565b8082028115828204841417610f2557610f2561555a565b5f80604083850312156157fb575f80fd5b825191506020830151614f4881614d3b565b5f60208083525f845461581f81615155565b806020870152604060018084165f8114615840576001811461585c57615889565b60ff19851660408a0152604084151560051b8a01019550615889565b895f5260205f205f5b858110156158805781548b8201860152908301908801615865565b8a016040019650505b509398975050505050505050565b5f805f606084860312156158a9575f80fd5b8351925060208401516158bb81614e8f565b60408501519092506158cc81614e8f565b809150509250925092565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561250e5761250e61555a565b5f8060408385031215615917575f80fd5b82516001600160401b038082111561592d575f80fd5b9084019060608287031215615940575f80fd5b6159486151af565b82518152602083015161595a81614e1c565b6020820152604083015182811115615970575f80fd5b61597c8882860161524f565b6040830152508094505050506020830151614f4881614d3b565b5f80604083850312156159a7575f80fd5b825191506020830151614f4881614e8f565b80820180821115610f2557610f2561555a565b5f808335601e198436030181126159e1575f80fd5b8301803591506001600160401b038211156159fa575f80fd5b6020019150368190038213156136f4575f80fd5b5f8235603e19833603018112615378575f80fd5b5f60408236031215615a32575f80fd5b615a3a6151d7565b615a4383614d48565b81526020808401356001600160401b0380821115615a5f575f80fd5b9085019036601f830112615a71575f80fd5b813581811115615a8357615a8361519b565b8060051b9150615a948483016151f9565b8181529183018401918481019036841115615aad575f80fd5b938501935b83851015615ad75784359250615ac783614e1c565b8282529385019390850190615ab2565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b445784516001600160a01b03168252938301936001929092019190830190615b1b565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b75610100840182615009565b90506040840151601f1980858403016060860152615b938383615009565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615bc38383615ae9565b925060a08601519150808584030160c086015250615be18282615ae9565b91505060c0840151615bfe60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c17575f80fd5b8251915060208301516001600160401b03811115615c33575f80fd5b615c3f8582860161524f565b9150509250929050565b81810381811115610f2557610f2561555a565b5f60208284031215615c6c575f80fd5b61351082614e7e565b5f60208284031215615c85575f80fd5b813560ff81168114613510575f80fd5b5f6001600160401b038083168181036155a6576155a661555a565b5f60208284031215615cc0575f80fd5b815161351081614d3b56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220cfc3d93c6b7013d16bc111b26960ff50104ca9fda8ed586caad50be02a60534864736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -526,6 +526,37 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) MAXIMUMS return _ERC20TokenStakingManager.Contract.MAXIMUMSTAKEMULTIPLIERLIMIT(&_ERC20TokenStakingManager.CallOpts) } +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCaller) NODEIDLENGTH(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _ERC20TokenStakingManager.contract.Call(opts, &out, "NODE_ID_LENGTH") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) NODEIDLENGTH() (uint32, error) { + return _ERC20TokenStakingManager.Contract.NODEIDLENGTH(&_ERC20TokenStakingManager.CallOpts) +} + +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) NODEIDLENGTH() (uint32, error) { + return _ERC20TokenStakingManager.Contract.NODEIDLENGTH(&_ERC20TokenStakingManager.CallOpts) +} + // POSVALIDATORMANAGERSTORAGELOCATION is a free data retrieval call binding the contract method 0xafb98096. // // Solidity: function POS_VALIDATOR_MANAGER_STORAGE_LOCATION() view returns(bytes32) @@ -1441,14 +1472,13 @@ func (it *ERC20TokenStakingManagerCompletedValidatorRegistrationIterator) Close( // ERC20TokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the ERC20TokenStakingManager contract. type ERC20TokenStakingManagerCompletedValidatorRegistration struct { ValidationID [32]byte - NodeID []byte Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerCompletedValidatorRegistrationIterator, error) { var validationIDRule []interface{} @@ -1463,9 +1493,9 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterComplet return &ERC20TokenStakingManagerCompletedValidatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} @@ -1505,9 +1535,9 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchComplete }), nil } -// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*ERC20TokenStakingManagerCompletedValidatorRegistration, error) { event := new(ERC20TokenStakingManagerCompletedValidatorRegistration) if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { @@ -2639,41 +2669,49 @@ func (it *ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator) Close( // ERC20TokenStakingManagerInitiatedValidatorRegistration represents a InitiatedValidatorRegistration event raised by the ERC20TokenStakingManager contract. type ERC20TokenStakingManagerInitiatedValidatorRegistration struct { ValidationID [32]byte - NodeID []byte + NodeID [20]byte RegistrationMessageID [32]byte RegistrationExpiry uint64 Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } return &ERC20TokenStakingManagerInitiatedValidatorRegistrationIterator{contract: _ERC20TokenStakingManager.contract, event: "InitiatedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitiatedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerInitiatedValidatorRegistration, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -2705,9 +2743,9 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchInitiate }), nil } -// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseInitiatedValidatorRegistration(log types.Log) (*ERC20TokenStakingManagerInitiatedValidatorRegistration, error) { event := new(ERC20TokenStakingManagerInitiatedValidatorRegistration) if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { @@ -3081,39 +3119,47 @@ func (it *ERC20TokenStakingManagerRegisteredInitialValidatorIterator) Close() er // ERC20TokenStakingManagerRegisteredInitialValidator represents a RegisteredInitialValidator event raised by the ERC20TokenStakingManager contract. type ERC20TokenStakingManagerRegisteredInitialValidator struct { ValidationID [32]byte - NodeID []byte + NodeID [20]byte Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte) (*ERC20TokenStakingManagerRegisteredInitialValidatorIterator, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*ERC20TokenStakingManagerRegisteredInitialValidatorIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } return &ERC20TokenStakingManagerRegisteredInitialValidatorIterator{contract: _ERC20TokenStakingManager.contract, event: "RegisteredInitialValidator", logs: logs, sub: sub}, nil } -// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerRegisteredInitialValidator, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerRegisteredInitialValidator, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule) + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -3145,9 +3191,9 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchRegister }), nil } -// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseRegisteredInitialValidator(log types.Log) (*ERC20TokenStakingManagerRegisteredInitialValidator, error) { event := new(ERC20TokenStakingManagerRegisteredInitialValidator) if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { @@ -3305,7 +3351,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseUptimeUp // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220d0480ce8a92db2f68f39def88a3ded31f768999147bdb5eeb25933715298f87d64736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index d28c32101..31f240920 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -104,8 +104,8 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615be5380380615be583398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a988061014d5f395ff3fe608060405260043610610249575f3560e01c80638280a25a11610134578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106c2578063ce161f14146106d6578063d5f20ff614610712578063df93d8de1461073e578063fb8b11dd14610754578063fd7ac5e714610773575f80fd5b8063ba3a4b971461062a578063bb0b193814610649578063bc5fbfec1461065d578063bee0a03f14610690578063c599e24f146106af575f80fd5b8063a3a65e48116100f9578063a3a65e48146105ab578063a9778a7a1461039d578063af2f5feb146105ca578063afb98096146105dd578063b771b3bc14610610575f80fd5b80638280a25a1461051b5780638ef34c981461052f57806393e245981461054e5780639681d9401461056d5780639ae064471461058c575f80fd5b806337b9be8f116101cb57806360ad77841161019057806360ad77841461046d578063620658561461048c578063732214f8146104ab57806376f78621146104be5780637d8d2f77146104dd57806380dd672f146104fc575f80fd5b806337b9be8f146103c55780633a1cfff6146103e45780635dc1f535146104035780635dd6a6cb1461042557806360305d6214610444575f80fd5b806320d91b7a1161021157806320d91b7a146102f657806325e1c776146103155780632e2194d814610334578063329c3e121461036b57806335455ded1461039d575f80fd5b80630118acc41461024d5780630322ed981461026e5780630ba512d11461028d578063151d30d1146102ac5780631ec44724146102d7575b5f80fd5b348015610258575f80fd5b5061026c610267366004614acb565b610792565b005b348015610279575f80fd5b5061026c610288366004614b06565b6107a3565b348015610298575f80fd5b5061026c6102a7366004614b1d565b610a36565b3480156102b7575f80fd5b506102c0600a81565b60405160ff90911681526020015b60405180910390f35b3480156102e2575f80fd5b5061026c6102f1366004614acb565b610b13565b348015610301575f80fd5b5061026c610310366004614b34565b610b1f565b348015610320575f80fd5b5061026c61032f366004614b82565b61108d565b34801561033f575f80fd5b5061035361034e366004614b06565b611101565b6040516001600160401b0390911681526020016102ce565b348015610376575f80fd5b506103856001600160991b0181565b6040516001600160a01b0390911681526020016102ce565b3480156103a8575f80fd5b506103b261271081565b60405161ffff90911681526020016102ce565b3480156103d0575f80fd5b5061026c6103df366004614bb7565b611155565b3480156103ef575f80fd5b5061026c6103fe366004614acb565b611168565b34801561040e575f80fd5b50610417611174565b6040519081526020016102ce565b348015610430575f80fd5b5061026c61043f366004614bb7565b611183565b34801561044f575f80fd5b50610458601481565b60405163ffffffff90911681526020016102ce565b348015610478575f80fd5b5061026c610487366004614b82565b61118f565b348015610497575f80fd5b506104176104a6366004614c19565b6113e2565b3480156104b6575f80fd5b506104175f81565b3480156104c9575f80fd5b5061026c6104d8366004614acb565b611402565b3480156104e8575f80fd5b5061026c6104f7366004614bb7565b61140e565b348015610507575f80fd5b5061026c610516366004614b82565b61141a565b348015610526575f80fd5b506102c0603081565b34801561053a575f80fd5b5061026c610549366004614c34565b61161b565b348015610559575f80fd5b5061026c610568366004614b06565b6116cc565b348015610578575f80fd5b50610417610587366004614c62565b611760565b348015610597575f80fd5b5061026c6105a6366004614bb7565b611839565b3480156105b6575f80fd5b506104176105c5366004614c62565b611845565b6104176105d8366004614c8c565b611a40565b3480156105e8575f80fd5b506104177f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b34801561061b575f80fd5b506103856005600160991b0181565b348015610635575f80fd5b5061026c610644366004614b06565b611a74565b348015610654575f80fd5b50610353611ccd565b348015610668575f80fd5b506104177fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b34801561069b575f80fd5b5061026c6106aa366004614b06565b611cef565b6104176106bd366004614b06565b611e0b565b3480156106cd575f80fd5b506102c0601481565b3480156106e1575f80fd5b506106f56106f0366004614c62565b611e37565b604080519283526001600160401b039091166020830152016102ce565b34801561071d575f80fd5b5061073161072c366004614b06565b611fba565b6040516102ce9190614d62565b348015610749575f80fd5b506103536202a30081565b34801561075f575f80fd5b5061026c61076e366004614c34565b612109565b34801561077e575f80fd5b5061041761078d366004614e18565b6121a0565b61079e8383835f6121d8565b505050565b5f6107ac612204565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107e6576107e6614ced565b60058111156107f7576107f7614ced565b815260200160018201805461080b90614e83565b80601f016020809104026020016040519081016040528092919081815260200182805461083790614e83565b80156108825780601f1061085957610100808354040283529160200191610882565b820191905f5260205f20905b81548152906001019060200180831161086557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156108fa576108fa614ced565b14610936575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614eb5565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109ad573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190614fbe565b6040518263ffffffff1660e01b81526004016109f09190614fef565b6020604051808303815f875af1158015610a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190615001565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a7f575080546001600160401b03808416911610155b15610a9d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ac783612228565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a308383835f61223c565b5f610b28612204565b600781015490915060ff1615610b5157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190615001565b836020013514610be1576040516372b0a7e760e11b81526020840135600482015260240161092d565b30610bf26060850160408601615018565b6001600160a01b031614610c3557610c106060840160408501615018565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161092d565b5f610c436060850185615033565b905090505f805b828163ffffffff161015610e83575f610c666060880188615033565b8363ffffffff16818110610c7c57610c7c615078565b9050602002810190610c8e919061508c565b610c97906150f7565b80516040519192505f916006880191610caf91615172565b90815260200160405180910390205414610cdf57805160405163a41f772f60e01b815261092d9190600401614fef565b5f6002885f013584604051602001610d0e92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d2891615172565b602060405180830381855afa158015610d43573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d669190615001565b90508086600601835f0151604051610d7e9190615172565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610dbe90826151c7565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e2d9085615296565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f01518460400151604051610e689291906152b6565b60405180910390a2505080610e7c906152e0565b9050610c4a565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610ec6910460ff1683615302565b6001600160401b03161015610ef957604051633e1a785160e01b81526001600160401b038216600482015260240161092d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f1d87612571565b604001516040518263ffffffff1660e01b8152600401610f3d9190614fef565b602060405180830381865af4158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190615001565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610fb69190615458565b5f60405180830381865af4158015610fd0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ff79190810190614fbe565b90505f60028260405161100a9190615172565b602060405180830381855afa158015611025573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110489190615001565b90508281146110745760405163baaea89d60e01b8152600481018290526024810184905260440161092d565b5050506007909201805460ff1916600117905550505050565b61109682612687565b6110b6576040516330efa98b60e01b81526004810183905260240161092d565b5f6110c083611fba565b51905060028160058111156110d7576110d7614ced565b146110f7578060405163170cc93360e21b815260040161092d9190614eb5565b610a3083836126b0565b5f8061110b612956565b6003015461111990846154ec565b905080158061112e57506001600160401b0381115b1561114f5760405163222d164360e21b81526004810184905260240161092d565b92915050565b6111618484848461223c565b5050505050565b610a308383835f61297a565b5f61117d612204565b54919050565b610a3084848484612bc1565b5f611198612956565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111d1576111d1614ced565b60038111156111e2576111e2614ced565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61125882611fba565b905060018351600381111561126f5761126f614ced565b14611290578251604051633b0d540d60e21b815261092d919060040161550b565b6004815160058111156112a5576112a5614ced565b036112bb576112b386612bed565b505050505050565b8260a001516001600160401b031681608001516001600160401b0316101561135b575f806112e887611e37565b915091508184146113165760405163fee3144560e01b8152600481018390526024810185905260440161092d565b8460a001516001600160401b0316816001600160401b0316101561135857604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6113eb612956565b6003015461114f906001600160401b038416615525565b61079e8383835f612bc1565b6111618484848461297a565b611422612dbe565b5f61142b612956565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146457611464614ced565b600381111561147557611475614ced565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114ee576114ee614ced565b1461150f578051604051633b0d540d60e21b815261092d919060040161550b565b5f61151d8260400151611fba565b9050600461152e8360400151611fba565b51600581111561154057611540614ced565b1415801561156757508160c001516001600160401b031681608001516001600160401b0316105b156115f5575f8061157786611e37565b91509150818460400151146115b05781846040015160405163fee3144560e01b815260040161092d929190918252602082015260400190565b806001600160401b03168460c001516001600160401b031611156115f257604051632e19bc2d60e11b81526001600160401b038216600482015260240161092d565b50505b6115fe85612bed565b50505061161760015f80516020615a4383398151915255565b5050565b5f611624612956565b90506001600160a01b0382166116585760405163caa903f960e01b81526001600160a01b038316600482015260240161092d565b5f8381526006820160205260409020546001600160a01b0316331461169e57335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161092d565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116d5612956565b90505f6116e183611fba565b51905060048160058111156116f8576116f8614ced565b14611718578060405163170cc93360e21b815260040161092d9190614eb5565b5f8381526006830160205260409020546001600160a01b0316331461173d5733611679565b5f83815260068301602052604090205461079e906001600160a01b031684612e08565b5f611769612dbe565b5f611772612956565b90505f8061177f85612e32565b9150915061178c82612687565b61179a5750915061181e9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806117dc5750805b6004835160058111156117f1576117f1614ced565b03611800576118008185612e08565b6118168261181185604001516113e2565b6131e7565b509193505050505b61183460015f80516020615a4383398151915255565b919050565b610a30848484846121d8565b5f8061184f612204565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61187687612571565b604001516040518263ffffffff1660e01b81526004016118969190614fef565b6040805180830381865af41580156118b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118d4919061553c565b91509150806118fa57604051632d07135360e01b8152811515600482015260240161092d565b5f8281526004840160205260409020805461191490614e83565b90505f036119385760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580860160205260409091205460ff169081111561195f5761195f614ced565b14611992575f8281526005840160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614eb5565b5f82815260048401602052604081206119aa91614a17565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293611a3093600190910192600160c01b90920416906155d8565b60405180910390a2509392505050565b5f611a49612dbe565b611a55848484346131fa565b9050611a6d60015f80516020615a4383398151915255565b9392505050565b5f611a7d612956565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611ab657611ab6614ced565b6003811115611ac757611ac7614ced565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b4057611b40614ced565b14158015611b615750600381516003811115611b5e57611b5e614ced565b14155b15611b82578051604051633b0d540d60e21b815261092d919060040161550b565b5f611b908260400151611fba565b905080606001516001600160401b03165f03611bc2576040516339b894f960e21b81526004810185905260240161092d565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c3093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c4a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c719190810190614fbe565b6040518263ffffffff1660e01b8152600401611c8d9190614fef565b6020604051808303815f875af1158015611ca9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111619190615001565b5f611cd6612204565b60030154600160401b90046001600160401b0316919050565b5f611cf8612204565b5f8381526004820160205260409020805491925090611d1690614e83565b90505f03611d3a5760405163089938b360e11b81526004810183905260240161092d565b60015f838152600580840160205260409091205460ff1690811115611d6157611d61614ced565b14611d94575f8281526005820160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614eb5565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611dcb92016155ea565b6020604051808303815f875af1158015611de7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079e9190615001565b5f611e14612dbe565b611e1f823334613429565b905061183460015f80516020615a4383398151915255565b5f805f611e4384612571565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611e839190614fef565b606060405180830381865af4158015611e9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec291906155fc565b9250925092505f611ed1612204565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f2557604051632e19bc2d60e11b81526001600160401b038416600482015260240161092d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611fa590869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611fc2614a4e565b5f611fcb612204565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff9091169081111561200557612005614ced565b600581111561201657612016614ced565b815260200160018201805461202a90614e83565b80601f016020809104026020016040519081016040528092919081815260200182805461205690614e83565b80156120a15780601f10612078576101008083540402835291602001916120a1565b820191905f5260205f20905b81548152906001019060200180831161208457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b03811661213b5760405163caa903f960e01b81526001600160a01b038216600482015260240161092d565b5f612144612956565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121725733611679565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806121aa612204565b90508060060184846040516121c0929190615631565b90815260200160405180910390205491505092915050565b6121e48484848461223c565b610a3057604051631036cf9160e11b81526004810185905260240161092d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b612230613669565b612239816136b4565b50565b5f80612246612956565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561227f5761227f614ced565b600381111561229057612290614ced565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61230682611fba565b905060028351600381111561231d5761231d614ced565b1461233e578251604051633b0d540d60e21b815261092d919060040161550b565b60208301516001600160a01b031633146123da575f8281526006850160205260409020546001600160a01b031633146123775733611679565b5f82815260068501602052604090205460c08201516123a691600160b01b90046001600160401b031690615296565b6001600160401b03164210156123da5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b6002815160058111156123ef576123ef614ced565b036125115760028401546080840151612411916001600160401b031690615296565b6001600160401b03164210156124455760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b87156124575761245582886126b0565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161249091849161248b9190615640565b61372e565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124d384888c6138f8565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125699350505050565b60048151600581111561252657612526614ced565b0361254d5761253683878b6138f8565b5061254089612bed565b6001945050505050612569565b805160405163170cc93360e21b815261092d9190600401614eb5565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125d5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125fc9190810190615660565b915091508061261e57604051636b2f19e960e01b815260040160405180910390fd5b815115612644578151604051636ba589a560e01b8152600481019190915260240161092d565b60208201516001600160a01b031615612680576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5092915050565b5f80612691612956565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127229190810190615660565b915091508061274457604051636b2f19e960e01b815260040160405180910390fd5b5f61274d612956565b600581015484519192501461277b578251604051636ba589a560e01b8152600481019190915260240161092d565b60208301516001600160a01b0316156127b7576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b60208301516001600160a01b0316156127f3576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161092d565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128309190614fef565b6040805180830381865af415801561284a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061286e91906156f0565b9150915081881461289c5760405163fee3144560e01b8152600481018390526024810189905260440161092d565b5f8881526006840160205260409020600101546001600160401b03908116908216111561292d575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261294b565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612984612956565b905061298f86613ae6565b5f61299987611fba565b90506129a487612687565b6129b357600192505050612569565b5f8781526006830160205260409020546001600160a01b031633146129d85733611679565b5f87815260068301602052604090205460c0820151612a0791600160b01b90046001600160401b031690615296565b6001600160401b03168160e001516001600160401b03161015612a4e5760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161092d565b5f8615612a6657612a5f88876126b0565b9050612a84565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612aa9906113e2565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612b13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b379190615001565b90506001600160a01b038616612b63575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612b82908490615713565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612bcd8484848461297a565b610a3057604051635bff683f60e11b81526004810185905260240161092d565b5f612bf6612956565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c2f57612c2f614ced565b6003811115612c4057612c40614ced565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cb4613dd1565b8260800151612cc39190615296565b6001600160401b0316421015612cf75760405163fb6ce63f60e01b81526001600160401b034216600482015260240161092d565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d52575060208201515b5f80612d5f838886613dec565b91509150612d78856020015161181187606001516113e2565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a43833981519152805460011901612def57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a4383398151915255565b5f612e11612956565b5f838152600a8201602052604081208054919055909150610a308482613e99565b5f612e3b614a4e565b5f612e44612204565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612e6b88612571565b604001516040518263ffffffff1660e01b8152600401612e8b9190614fef565b6040805180830381865af4158015612ea5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ec9919061553c565b915091508015612ef057604051632d07135360e01b8152811515600482015260240161092d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f2857612f28614ced565b6005811115612f3957612f39614ced565b8152602001600182018054612f4d90614e83565b80601f0160208091040260200160405190810160405280929190818152602001828054612f7990614e83565b8015612fc45780601f10612f9b57610100808354040283529160200191612fc4565b820191905f5260205f20905b815481529060010190602001808311612fa757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561303c5761303c614ced565b1415801561305d575060018151600581111561305a5761305a614ced565b14155b1561307e57805160405163170cc93360e21b815261092d9190600401614eb5565b60038151600581111561309357613093614ced565b036130a157600481526130a6565b600581525b8360060181602001516040516130bc9190615172565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156130ff576130ff614ced565b02179055506020820151600182019061311890826151c7565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116176001600160a01b03831682613ef7565b5f80613204612956565b600281015490915061ffff600160401b9091048116908616108061322d575061271061ffff8616115b1561325157604051635f12e6c360e11b815261ffff8616600482015260240161092d565b60028101546001600160401b03908116908516101561328d576040516202a06d60e11b81526001600160401b038516600482015260240161092d565b805483108061329f5750806001015483115b156132c05760405163222d164360e21b81526004810184905260240161092d565b825f6132cb82611101565b90505f6133926132db8a80615726565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061331c9250505060208c018c615726565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133609250505060608d0160408e01614c19565b61336d60608e018e615768565b6133769061577c565b61338360808f018f615768565b61338c9061577c565b87613f8a565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f80613433612956565b90505f61343f84611101565b90505f61344b87611fba565b905061345687612687565b613476576040516330efa98b60e01b81526004810188905260240161092d565b60028151600581111561348b5761348b614ced565b146134ac57805160405163170cc93360e21b815261092d9190600401614eb5565b5f828260a001516134bd9190615296565b905083600201600a9054906101000a90046001600160401b031682604001516134e69190615302565b6001600160401b0316816001600160401b0316111561352357604051636d51fe0560e11b81526001600160401b038216600482015260240161092d565b5f8061352f8a8461372e565b915091505f8a8360405160200161355d92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166136b257604051631afcd79f60e31b815260040160405180910390fd5b565b6136bc613669565b6136c581614343565b6136cd61435c565b612239606082013560808301356136ea60c0850160a08601614c19565b6136fa60e0860160c08701615843565b61370b610100870160e0880161585c565b61010087013561372361014089016101208a01615018565b88610140013561436c565b5f805f613739612204565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b0316613769858261452e565b5f6137738761479b565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613817573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261383e9190810190614fbe565b6040518263ffffffff1660e01b815260040161385a9190614fef565b6020604051808303815f875af1158015613876573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061389a9190615001565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f80613902612956565b90505f6139128660400151611fba565b90505f60038251600581111561392a5761392a614ced565b1480613948575060048251600581111561394657613946614ced565b145b15613958575060e0810151613995565b60028251600581111561396d5761396d614ced565b03613979575042613995565b815160405163170cc93360e21b815261092d9190600401614eb5565b86608001516001600160401b0316816001600160401b0316116139bd575f9350505050611a6d565b600483015460608801515f916001600160a01b031690634f22429f906139e2906113e2565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613a63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a879190615001565b90506001600160a01b038716613a9f57876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613aef612204565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b2957613b29614ced565b6005811115613b3a57613b3a614ced565b8152602001600182018054613b4e90614e83565b80601f0160208091040260200160405190810160405280929190818152602001828054613b7a90614e83565b8015613bc55780601f10613b9c57610100808354040283529160200191613bc5565b820191905f5260205f20905b815481529060010190602001808311613ba857829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c3d57613c3d614ced565b14613c70575f8381526005830160205260409081902054905163170cc93360e21b815261092d9160ff1690600401614eb5565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613cb557613cb5614ced565b021790555060208201516001820190613cce90826151c7565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613d6e848261372e565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613dc3939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613dda612204565b600101546001600160401b0316919050565b5f805f613df7612956565b5f86815260088201602052604081208054908290559192509081908015613e8b575f87815260068501602052604090205461271090613e4190600160a01b900461ffff1683615525565b613e4b91906154ec565b91508184600a015f8981526020019081526020015f205f828254613e6f9190615713565b90915550613e7f9050828261587c565b9250613e8b8984613e99565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613ee5575f80fd5b505af11580156112b3573d5f803e3d5ffd5b80471015613f1a5760405163cd78605960e01b815230600482015260240161092d565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613f63576040519150601f19603f3d011682016040523d82523d5f602084013e613f68565b606091505b505090508061079e57604051630a12f52160e11b815260040160405180910390fd5b5f613f93612204565b6007015460ff16613fb757604051637fab81e560e01b815260040160405180910390fd5b5f613fc0612204565b905042866001600160401b0316111580613fef5750613fe26202a30042615713565b866001600160401b031610155b1561401857604051635879da1360e11b81526001600160401b038716600482015260240161092d565b60038101546001600160401b039061403b90600160401b90048216858316615713565b111561406557604051633e1a785160e01b81526001600160401b038416600482015260240161092d565b61406e85614804565b61407784614804565b865160301461409e5786516040516326475b2f60e11b815260040161092d91815260200190565b87515f036140c15787604051633e08a12560e11b815260040161092d9190614fef565b5f801b81600601896040516140d69190615172565b90815260200160405180910390205414614105578760405163a41f772f60e01b815260040161092d9190614fef565b61410f835f61452e565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161418f91906158f5565b5f60405180830381865af41580156141a9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141d091908101906159ac565b5f828152600486016020526040902091935091506141ee82826151c7565b5081836006018b6040516142029190615172565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061423e908590600401614fef565b6020604051808303815f875af115801561425a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061427e9190615001565b5f8481526005860160205260409020805460ff191660019081178255919250016142a88c826151c7565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf9061432c908e9085908e908c906159ef565b60405180910390a250909998505050505050505050565b61434b613669565b614353614923565b6122398161492b565b614364613669565b6136b2614a0f565b614374613669565b5f61437d612956565b905061ffff86161580614395575061271061ffff8716115b156143b957604051635f12e6c360e11b815261ffff8716600482015260240161092d565b878911156143dd5760405163222d164360e21b8152600481018a905260240161092d565b60ff851615806143f05750600a60ff8616115b156144135760405163170db35960e31b815260ff8616600482015260240161092d565b61441b613dd1565b6001600160401b0316876001600160401b03161015614457576040516202a06d60e11b81526001600160401b038816600482015260240161092d565b835f036144775760405163a733007160e01b815260040160405180910390fd5b8161449857604051632f6bd1db60e01b81526004810183905260240161092d565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f614537612204565b90505f826001600160401b0316846001600160401b031611156145655761455e8385615640565b9050614572565b61456f8484615640565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145df5750600184015481516145db916001600160401b031690615713565b8210155b15614607576001600160401b0380841660608301528282526040820151166020820152614626565b82816060018181516146199190615296565b6001600160401b03169052505b6060810151614636906064615302565b602082015160018601546001600160401b0392909216916146619190600160401b900460ff16615302565b6001600160401b0316101561469a57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161092d565b85816040018181516146ac9190615296565b6001600160401b03169052506040810180518691906146cc908390615640565b6001600160401b0316905250600184015460408201516064916146fa91600160401b90910460ff1690615302565b6001600160401b03161015614733576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161092d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f806147a5612204565b5f84815260058201602052604090206002018054919250906008906147d990600160401b90046001600160401b0316615a27565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff1615801561481d575060208101515115155b1561485157805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b602081015151815163ffffffff16111561489457805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161092d565b60015b8160200151518110156116175760208201516148b460018361587c565b815181106148c4576148c4615078565b60200260200101516001600160a01b0316826020015182815181106148eb576148eb615078565b60200260200101516001600160a01b0316101561491b57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614897565b6136b2613669565b614933613669565b5f61493c612204565b8235815590506014614954606084016040850161585c565b60ff161180614973575061496e606083016040840161585c565b60ff16155b156149a757614988606083016040840161585c565b604051634a59bbff60e11b815260ff909116600482015260240161092d565b6149b7606083016040840161585c565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149e86040830160208401614c19565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612df5613669565b508054614a2390614e83565b5f825580601f10614a32575050565b601f0160209004905f5260205f20908101906122399190614a93565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614aa7575f8155600101614a94565b5090565b8015158114612239575f80fd5b803563ffffffff81168114611834575f80fd5b5f805f60608486031215614add575f80fd5b833592506020840135614aef81614aab565b9150614afd60408501614ab8565b90509250925092565b5f60208284031215614b16575f80fd5b5035919050565b5f6101608284031215614b2e575f80fd5b50919050565b5f8060408385031215614b45575f80fd5b82356001600160401b03811115614b5a575f80fd5b830160808186031215614b6b575f80fd5b9150614b7960208401614ab8565b90509250929050565b5f8060408385031215614b93575f80fd5b82359150614b7960208401614ab8565b6001600160a01b0381168114612239575f80fd5b5f805f8060808587031215614bca575f80fd5b843593506020850135614bdc81614aab565b9250614bea60408601614ab8565b91506060850135614bfa81614ba3565b939692955090935050565b6001600160401b0381168114612239575f80fd5b5f60208284031215614c29575f80fd5b8135611a6d81614c05565b5f8060408385031215614c45575f80fd5b823591506020830135614c5781614ba3565b809150509250929050565b5f60208284031215614c72575f80fd5b611a6d82614ab8565b803561ffff81168114611834575f80fd5b5f805f60608486031215614c9e575f80fd5b83356001600160401b03811115614cb3575f80fd5b840160a08187031215614cc4575f80fd5b9250614cd260208501614c7b565b91506040840135614ce281614c05565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d1157614d11614ced565b9052565b5f5b83811015614d2f578181015183820152602001614d17565b50505f910152565b5f8151808452614d4e816020860160208601614d15565b601f01601f19169290920160200192915050565b60208152614d74602082018351614d01565b5f6020830151610100806040850152614d91610120850183614d37565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614dd060a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e29575f80fd5b82356001600160401b0380821115614e3f575f80fd5b818501915085601f830112614e52575f80fd5b813581811115614e60575f80fd5b866020828501011115614e71575f80fd5b60209290920196919550909350505050565b600181811c90821680614e9757607f821691505b602082108103614b2e57634e487b7160e01b5f52602260045260245ffd5b6020810161114f8284614d01565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ef957614ef9614ec3565b60405290565b604080519081016001600160401b0381118282101715614ef957614ef9614ec3565b604051601f8201601f191681016001600160401b0381118282101715614f4957614f49614ec3565b604052919050565b5f6001600160401b03821115614f6957614f69614ec3565b50601f01601f191660200190565b5f82601f830112614f86575f80fd5b8151614f99614f9482614f51565b614f21565b818152846020838601011115614fad575f80fd5b612569826020830160208701614d15565b5f60208284031215614fce575f80fd5b81516001600160401b03811115614fe3575f80fd5b61256984828501614f77565b602081525f611a6d6020830184614d37565b5f60208284031215615011575f80fd5b5051919050565b5f60208284031215615028575f80fd5b8135611a6d81614ba3565b5f808335601e19843603018112615048575f80fd5b8301803591506001600160401b03821115615061575f80fd5b6020019150600581901b36038213156138f1575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126150a0575f80fd5b9190910192915050565b5f82601f8301126150b9575f80fd5b81356150c7614f9482614f51565b8181528460208386010111156150db575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615107575f80fd5b61510f614ed7565b82356001600160401b0380821115615125575f80fd5b615131368387016150aa565b83526020850135915080821115615146575f80fd5b50615153368286016150aa565b602083015250604083013561516781614c05565b604082015292915050565b5f82516150a0818460208701614d15565b601f82111561079e57805f5260205f20601f840160051c810160208510156151a85750805b601f840160051c820191505b81811015611161575f81556001016151b4565b81516001600160401b038111156151e0576151e0614ec3565b6151f4816151ee8454614e83565b84615183565b602080601f831160018114615227575f84156152105750858301515b5f19600386901b1c1916600185901b1785556112b3565b5f85815260208120601f198616915b8281101561525557888601518255948401946001909101908401615236565b508582101561527257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561268057612680615282565b604081525f6152c86040830185614d37565b90506001600160401b03831660208301529392505050565b5f63ffffffff8083168181036152f8576152f8615282565b6001019392505050565b6001600160401b0381811683821602808216919082811461532557615325615282565b505092915050565b5f808335601e19843603018112615342575f80fd5b83016020810192503590506001600160401b03811115615360575f80fd5b8036038213156138f1575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561544b57848303601f19018952813536889003605e190181126153d2575f80fd5b870160606153e0828061532d565b8287526153f0838801828461536e565b925050506154008683018361532d565b8683038888015261541283828461536e565b92505050604080830135925061542783614c05565b6001600160401b0392909216949091019390935297830197908301906001016153ad565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561547c81614ba3565b6001600160a01b031660608381019190915283013536849003601e190181126154a3575f80fd5b83016020810190356001600160401b038111156154be575f80fd5b8060051b36038213156154cf575f80fd5b6080808501526154e360a085018284615396565b95945050505050565b5f8261550657634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061551f5761551f614ced565b91905290565b808202811582820484141761114f5761114f615282565b5f806040838503121561554d575f80fd5b825191506020830151614c5781614aab565b5f815461556b81614e83565b80855260206001838116801561558857600181146155a2576155cd565b60ff1985168884015283151560051b8801830195506155cd565b865f52825f205f5b858110156155c55781548a82018601529083019084016155aa565b890184019650505b505050505092915050565b604081525f6152c8604083018561555f565b602081525f611a6d602083018461555f565b5f805f6060848603121561560e575f80fd5b83519250602084015161562081614c05565b6040850151909250614ce281614c05565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561268057612680615282565b5f8060408385031215615671575f80fd5b82516001600160401b0380821115615687575f80fd5b908401906060828703121561569a575f80fd5b6156a2614ed7565b8251815260208301516156b481614ba3565b60208201526040830151828111156156ca575f80fd5b6156d688828601614f77565b6040830152508094505050506020830151614c5781614aab565b5f8060408385031215615701575f80fd5b825191506020830151614c5781614c05565b8082018082111561114f5761114f615282565b5f808335601e1984360301811261573b575f80fd5b8301803591506001600160401b03821115615754575f80fd5b6020019150368190038213156138f1575f80fd5b5f8235603e198336030181126150a0575f80fd5b5f6040823603121561578c575f80fd5b615794614eff565b61579d83614ab8565b81526020808401356001600160401b03808211156157b9575f80fd5b9085019036601f8301126157cb575f80fd5b8135818111156157dd576157dd614ec3565b8060051b91506157ee848301614f21565b8181529183018401918481019036841115615807575f80fd5b938501935b83851015615831578435925061582183614ba3565b828252938501939085019061580c565b94860194909452509295945050505050565b5f60208284031215615853575f80fd5b611a6d82614c7b565b5f6020828403121561586c575f80fd5b813560ff81168114611a6d575f80fd5b8181038181111561114f5761114f615282565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158ea5784516001600160a01b031682529383019360019290920191908301906158c1565b509695505050505050565b60208152815160208201525f602083015160e0604084015261591b610100840182614d37565b90506040840151601f19808584030160608601526159398383614d37565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615969838361588f565b925060a08601519150808584030160c086015250615987828261588f565b91505060c08401516159a460e08501826001600160401b03169052565b509392505050565b5f80604083850312156159bd575f80fd5b8251915060208301516001600160401b038111156159d9575f80fd5b6159e585828601614f77565b9150509250929050565b608081525f615a016080830187614d37565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b5f6001600160401b038083168181036152f8576152f861528256fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122032e00a14751b0034c1b69d5d0ba2dd6f78e80f8df210402d0408443de1157be764736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615be6380380615be683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a998061014d5f395ff3fe608060405260043610610254575f3560e01c806380dd672f1161013f578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106cd578063ce161f14146106e1578063d5f20ff61461071d578063df93d8de14610749578063fb8b11dd1461075f578063fd7ac5e71461077e575f80fd5b8063ba3a4b9714610635578063bb0b193814610654578063bc5fbfec14610668578063bee0a03f1461069b578063c599e24f146106ba575f80fd5b80639ae06447116101045780639ae0644714610597578063a3a65e48146105b6578063a9778a7a146103a8578063af2f5feb146105d5578063afb98096146105e8578063b771b3bc1461061b575f80fd5b806380dd672f146105075780638280a25a146105265780638ef34c981461053a57806393e24598146105595780639681d94014610578575f80fd5b806337b9be8f116101d657806360ad77841161019b57806360ad778414610478578063620658561461049757806363e2ca971461044f578063732214f8146104b657806376f78621146104c95780637d8d2f77146104e8575f80fd5b806337b9be8f146103d05780633a1cfff6146103ef5780635dc1f5351461040e5780635dd6a6cb1461043057806360305d621461044f575f80fd5b806320d91b7a1161021c57806320d91b7a1461030157806325e1c776146103205780632e2194d81461033f578063329c3e121461037657806335455ded146103a8575f80fd5b80630118acc4146102585780630322ed98146102795780630ba512d114610298578063151d30d1146102b75780631ec44724146102e2575b5f80fd5b348015610263575f80fd5b50610277610272366004614b41565b61079d565b005b348015610284575f80fd5b50610277610293366004614b7c565b6107ae565b3480156102a3575f80fd5b506102776102b2366004614b93565b610a41565b3480156102c2575f80fd5b506102cb600a81565b60405160ff90911681526020015b60405180910390f35b3480156102ed575f80fd5b506102776102fc366004614b41565b610b1e565b34801561030c575f80fd5b5061027761031b366004614baa565b610b2a565b34801561032b575f80fd5b5061027761033a366004614bf8565b6110de565b34801561034a575f80fd5b5061035e610359366004614b7c565b611152565b6040516001600160401b0390911681526020016102d9565b348015610381575f80fd5b506103906001600160991b0181565b6040516001600160a01b0390911681526020016102d9565b3480156103b3575f80fd5b506103bd61271081565b60405161ffff90911681526020016102d9565b3480156103db575f80fd5b506102776103ea366004614c2d565b6111a6565b3480156103fa575f80fd5b50610277610409366004614b41565b6111b9565b348015610419575f80fd5b506104226111c5565b6040519081526020016102d9565b34801561043b575f80fd5b5061027761044a366004614c2d565b6111d4565b34801561045a575f80fd5b50610463601481565b60405163ffffffff90911681526020016102d9565b348015610483575f80fd5b50610277610492366004614bf8565b6111e0565b3480156104a2575f80fd5b506104226104b1366004614c8f565b611433565b3480156104c1575f80fd5b506104225f81565b3480156104d4575f80fd5b506102776104e3366004614b41565b611453565b3480156104f3575f80fd5b50610277610502366004614c2d565b61145f565b348015610512575f80fd5b50610277610521366004614bf8565b61146b565b348015610531575f80fd5b506102cb603081565b348015610545575f80fd5b50610277610554366004614caa565b61166c565b348015610564575f80fd5b50610277610573366004614b7c565b61171d565b348015610583575f80fd5b50610422610592366004614cd8565b6117b1565b3480156105a2575f80fd5b506102776105b1366004614c2d565b61188a565b3480156105c1575f80fd5b506104226105d0366004614cd8565b611896565b6104226105e3366004614d02565b611a85565b3480156105f3575f80fd5b506104227f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610626575f80fd5b506103906005600160991b0181565b348015610640575f80fd5b5061027761064f366004614b7c565b611ab9565b34801561065f575f80fd5b5061035e611d12565b348015610673575f80fd5b506104227fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b3480156106a6575f80fd5b506102776106b5366004614b7c565b611d34565b6104226106c8366004614b7c565b611e50565b3480156106d8575f80fd5b506102cb601481565b3480156106ec575f80fd5b506107006106fb366004614cd8565b611e7c565b604080519283526001600160401b039091166020830152016102d9565b348015610728575f80fd5b5061073c610737366004614b7c565b611fff565b6040516102d99190614dd8565b348015610754575f80fd5b5061035e6202a30081565b34801561076a575f80fd5b50610277610779366004614caa565b61214e565b348015610789575f80fd5b50610422610798366004614e8e565b6121e5565b6107a98383835f61221d565b505050565b5f6107b7612249565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107f1576107f1614d63565b600581111561080257610802614d63565b815260200160018201805461081690614ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461084290614ef9565b801561088d5780601f106108645761010080835404028352916020019161088d565b820191905f5260205f20905b81548152906001019060200180831161087057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561090557610905614d63565b14610941575f8381526005830160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109df9190810190615034565b6040518263ffffffff1660e01b81526004016109fb9190615065565b6020604051808303815f875af1158015610a17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3b9190615077565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a8a575080546001600160401b03808416911610155b15610aa85760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ad28361226d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a3b8383835f612281565b5f610b33612249565b600781015490915060ff1615610b5c57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc39190615077565b836020013514610bec576040516372b0a7e760e11b815260208401356004820152602401610938565b30610bfd606085016040860161508e565b6001600160a01b031614610c4057610c1b606084016040850161508e565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610938565b5f610c4e60608501856150a9565b905090505f805b828163ffffffff161015610ed4575f610c7160608801886150a9565b8363ffffffff16818110610c8757610c876150ee565b9050602002810190610c999190615102565b610ca29061516d565b80516040519192505f916006880191610cba916151e8565b90815260200160405180910390205414610cea57805160405163a41f772f60e01b81526109389190600401615065565b805151601414610d10578051604051633e08a12560e11b81526109389190600401615065565b5f6002885f013584604051602001610d3f92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d59916151e8565b602060405180830381855afa158015610d74573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d979190615077565b90508086600601835f0151604051610daf91906151e8565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610def908261523d565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e5e908561530c565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610eb991906001600160401b0391909116815260200190565b60405180910390a3505080610ecd9061532c565b9050610c55565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610f17910460ff168361534e565b6001600160401b03161015610f4a57604051633e1a785160e01b81526001600160401b0382166004820152602401610938565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f6e876125b6565b604001516040518263ffffffff1660e01b8152600401610f8e9190615065565b602060405180830381865af4158015610fa9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fcd9190615077565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b815260040161100791906154a4565b5f60405180830381865af4158015611021573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110489190810190615034565b90505f60028260405161105b91906151e8565b602060405180830381855afa158015611076573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110999190615077565b90508281146110c55760405163baaea89d60e01b81526004810182905260248101849052604401610938565b5050506007909201805460ff1916600117905550505050565b6110e7826126cc565b611107576040516330efa98b60e01b815260048101839052602401610938565b5f61111183611fff565b519050600281600581111561112857611128614d63565b14611148578060405163170cc93360e21b81526004016109389190614f2b565b610a3b83836126f5565b5f8061115c61299b565b6003015461116a9084615538565b905080158061117f57506001600160401b0381115b156111a05760405163222d164360e21b815260048101849052602401610938565b92915050565b6111b284848484612281565b5050505050565b610a3b8383835f6129bf565b5f6111ce612249565b54919050565b610a3b84848484612c06565b5f6111e961299b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561122257611222614d63565b600381111561123357611233614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112a982611fff565b90506001835160038111156112c0576112c0614d63565b146112e1578251604051633b0d540d60e21b81526109389190600401615557565b6004815160058111156112f6576112f6614d63565b0361130c5761130486612c32565b505050505050565b8260a001516001600160401b031681608001516001600160401b031610156113ac575f8061133987611e7c565b915091508184146113675760405163fee3144560e01b81526004810183905260248101859052604401610938565b8460a001516001600160401b0316816001600160401b031610156113a957604051632e19bc2d60e11b81526001600160401b0382166004820152602401610938565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f61143c61299b565b600301546111a0906001600160401b038416615571565b6107a98383835f612c06565b6111b2848484846129bf565b611473612e03565b5f61147c61299b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156114b5576114b5614d63565b60038111156114c6576114c6614d63565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561153f5761153f614d63565b14611560578051604051633b0d540d60e21b81526109389190600401615557565b5f61156e8260400151611fff565b9050600461157f8360400151611fff565b51600581111561159157611591614d63565b141580156115b857508160c001516001600160401b031681608001516001600160401b0316105b15611646575f806115c886611e7c565b91509150818460400151146116015781846040015160405163fee3144560e01b8152600401610938929190918252602082015260400190565b806001600160401b03168460c001516001600160401b0316111561164357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610938565b50505b61164f85612c32565b50505061166860015f80516020615a4483398151915255565b5050565b5f61167561299b565b90506001600160a01b0382166116a95760405163caa903f960e01b81526001600160a01b0383166004820152602401610938565b5f8381526006820160205260409020546001600160a01b031633146116ef57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610938565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61172661299b565b90505f61173283611fff565b519050600481600581111561174957611749614d63565b14611769578060405163170cc93360e21b81526004016109389190614f2b565b5f8381526006830160205260409020546001600160a01b0316331461178e57336116ca565b5f8381526006830160205260409020546107a9906001600160a01b031684612e4d565b5f6117ba612e03565b5f6117c361299b565b90505f806117d085612e77565b915091506117dd826126cc565b6117eb5750915061186f9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b0391821691168061182d5750805b60048351600581111561184257611842614d63565b03611851576118518185612e4d565b611867826118628560400151611433565b61322c565b509193505050505b61188560015f80516020615a4483398151915255565b919050565b610a3b8484848461221d565b5f806118a0612249565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118c7876125b6565b604001516040518263ffffffff1660e01b81526004016118e79190615065565b6040805180830381865af4158015611901573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119259190615588565b915091508061194b57604051632d07135360e01b81528115156004820152602401610938565b5f8281526004840160205260409020805461196590614ef9565b90505f036119895760405163089938b360e11b815260048101839052602401610938565b60015f838152600580860160205260409091205460ff16908111156119b0576119b0614d63565b146119e3575f8281526005840160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b5f82815260048401602052604081206119fb91614a8d565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f611a8e612e03565b611a9a8484843461323f565b9050611ab260015f80516020615a4483398151915255565b9392505050565b5f611ac261299b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611afb57611afb614d63565b6003811115611b0c57611b0c614d63565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b8557611b85614d63565b14158015611ba65750600381516003811115611ba357611ba3614d63565b14155b15611bc7578051604051633b0d540d60e21b81526109389190600401615557565b5f611bd58260400151611fff565b905080606001516001600160401b03165f03611c07576040516339b894f960e21b815260048101859052602401610938565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c7593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c8f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cb69190810190615034565b6040518263ffffffff1660e01b8152600401611cd29190615065565b6020604051808303815f875af1158015611cee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b29190615077565b5f611d1b612249565b60030154600160401b90046001600160401b0316919050565b5f611d3d612249565b5f8381526004820160205260409020805491925090611d5b90614ef9565b90505f03611d7f5760405163089938b360e11b815260048101839052602401610938565b60015f838152600580840160205260409091205460ff1690811115611da657611da6614d63565b14611dd9575f8281526005820160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e1092016155ab565b6020604051808303815f875af1158015611e2c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a99190615077565b5f611e59612e03565b611e6482333461346e565b905061188560015f80516020615a4483398151915255565b5f805f611e88846125b6565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611ec89190615065565b606060405180830381865af4158015611ee3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f079190615635565b9250925092505f611f16612249565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f6a57604051632e19bc2d60e11b81526001600160401b0384166004820152602401610938565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611fea90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b612007614ac4565b5f612010612249565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff9091169081111561204a5761204a614d63565b600581111561205b5761205b614d63565b815260200160018201805461206f90614ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461209b90614ef9565b80156120e65780601f106120bd576101008083540402835291602001916120e6565b820191905f5260205f20905b8154815290600101906020018083116120c957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b0381166121805760405163caa903f960e01b81526001600160a01b0382166004820152602401610938565b5f61218961299b565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121b757336116ca565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806121ef612249565b905080600601848460405161220592919061566a565b90815260200160405180910390205491505092915050565b61222984848484612281565b610a3b57604051631036cf9160e11b815260048101859052602401610938565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b6122756136ae565b61227e816136f9565b50565b5f8061228b61299b565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156122c4576122c4614d63565b60038111156122d5576122d5614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61234b82611fff565b905060028351600381111561236257612362614d63565b14612383578251604051633b0d540d60e21b81526109389190600401615557565b60208301516001600160a01b0316331461241f575f8281526006850160205260409020546001600160a01b031633146123bc57336116ca565b5f82815260068501602052604090205460c08201516123eb91600160b01b90046001600160401b03169061530c565b6001600160401b031642101561241f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b60028151600581111561243457612434614d63565b036125565760028401546080840151612456916001600160401b03169061530c565b6001600160401b031642101561248a5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b871561249c5761249a82886126f5565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516124d59184916124d09190615679565b613773565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561251884888c61393d565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125ae9350505050565b60048151600581111561256b5761256b614d63565b036125925761257b83878b61393d565b5061258589612c32565b60019450505050506125ae565b805160405163170cc93360e21b81526109389190600401614f2b565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561261a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126419190810190615699565b915091508061266357604051636b2f19e960e01b815260040160405180910390fd5b815115612689578151604051636ba589a560e01b81526004810191909152602401610938565b60208201516001600160a01b0316156126c5576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b5092915050565b5f806126d661299b565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612740573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127679190810190615699565b915091508061278957604051636b2f19e960e01b815260040160405180910390fd5b5f61279261299b565b60058101548451919250146127c0578251604051636ba589a560e01b81526004810191909152602401610938565b60208301516001600160a01b0316156127fc576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b60208301516001600160a01b031615612838576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128759190615065565b6040805180830381865af415801561288f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b39190615729565b915091508188146128e15760405163fee3144560e01b81526004810183905260248101899052604401610938565b5f8881526006840160205260409020600101546001600160401b039081169082161115612972575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612990565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806129c961299b565b90506129d486613b2b565b5f6129de87611fff565b90506129e9876126cc565b6129f8576001925050506125ae565b5f8781526006830160205260409020546001600160a01b03163314612a1d57336116ca565b5f87815260068301602052604090205460c0820151612a4c91600160b01b90046001600160401b03169061530c565b6001600160401b03168160e001516001600160401b03161015612a935760e081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610938565b5f8615612aab57612aa488876126f5565b9050612ac9565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612aee90611433565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612b58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b7c9190615077565b90506001600160a01b038616612ba8575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612bc790849061574c565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612c12848484846129bf565b610a3b57604051635bff683f60e11b815260048101859052602401610938565b5f612c3b61299b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c7457612c74614d63565b6003811115612c8557612c85614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cf9613e16565b8260800151612d08919061530c565b6001600160401b0316421015612d3c5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d97575060208201515b5f80612da4838886613e31565b91509150612dbd85602001516118628760600151611433565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a44833981519152805460011901612e3457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a4483398151915255565b5f612e5661299b565b5f838152600a8201602052604081208054919055909150610a3b8482613ede565b5f612e80614ac4565b5f612e89612249565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612eb0886125b6565b604001516040518263ffffffff1660e01b8152600401612ed09190615065565b6040805180830381865af4158015612eea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0e9190615588565b915091508015612f3557604051632d07135360e01b81528115156004820152602401610938565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f6d57612f6d614d63565b6005811115612f7e57612f7e614d63565b8152602001600182018054612f9290614ef9565b80601f0160208091040260200160405190810160405280929190818152602001828054612fbe90614ef9565b80156130095780601f10612fe057610100808354040283529160200191613009565b820191905f5260205f20905b815481529060010190602001808311612fec57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561308157613081614d63565b141580156130a2575060018151600581111561309f5761309f614d63565b14155b156130c357805160405163170cc93360e21b81526109389190600401614f2b565b6003815160058111156130d8576130d8614d63565b036130e657600481526130eb565b600581525b83600601816020015160405161310191906151e8565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561314457613144614d63565b02179055506020820151600182019061315d908261523d565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116686001600160a01b03831682613f3c565b5f8061324961299b565b600281015490915061ffff600160401b90910481169086161080613272575061271061ffff8616115b1561329657604051635f12e6c360e11b815261ffff86166004820152602401610938565b60028101546001600160401b0390811690851610156132d2576040516202a06d60e11b81526001600160401b0385166004820152602401610938565b80548310806132e45750806001015483115b156133055760405163222d164360e21b815260048101849052602401610938565b825f61331082611152565b90505f6133d76133208a8061575f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133619250505060208c018c61575f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133a59250505060608d0160408e01614c8f565b6133b260608e018e6157a1565b6133bb906157b5565b6133c860808f018f6157a1565b6133d1906157b5565b87613fcf565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061347861299b565b90505f61348484611152565b90505f61349087611fff565b905061349b876126cc565b6134bb576040516330efa98b60e01b815260048101889052602401610938565b6002815160058111156134d0576134d0614d63565b146134f157805160405163170cc93360e21b81526109389190600401614f2b565b5f828260a00151613502919061530c565b905083600201600a9054906101000a90046001600160401b0316826040015161352b919061534e565b6001600160401b0316816001600160401b0316111561356857604051636d51fe0560e11b81526001600160401b0382166004820152602401610938565b5f806135748a84613773565b915091505f8a836040516020016135a292919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166136f757604051631afcd79f60e31b815260040160405180910390fd5b565b6137016136ae565b61370a816143b9565b6137126143d2565b61227e6060820135608083013561372f60c0850160a08601614c8f565b61373f60e0860160c0870161587c565b613750610100870160e08801615895565b61010087013561376861014089016101208a0161508e565b8861014001356143e2565b5f805f61377e612249565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137ae85826145a4565b5f6137b887614811565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561385c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138839190810190615034565b6040518263ffffffff1660e01b815260040161389f9190615065565b6020604051808303815f875af11580156138bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138df9190615077565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f8061394761299b565b90505f6139578660400151611fff565b90505f60038251600581111561396f5761396f614d63565b148061398d575060048251600581111561398b5761398b614d63565b145b1561399d575060e08101516139da565b6002825160058111156139b2576139b2614d63565b036139be5750426139da565b815160405163170cc93360e21b81526109389190600401614f2b565b86608001516001600160401b0316816001600160401b031611613a02575f9350505050611ab2565b600483015460608801515f916001600160a01b031690634f22429f90613a2790611433565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613aa8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613acc9190615077565b90506001600160a01b038716613ae457876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613b34612249565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b6e57613b6e614d63565b6005811115613b7f57613b7f614d63565b8152602001600182018054613b9390614ef9565b80601f0160208091040260200160405190810160405280929190818152602001828054613bbf90614ef9565b8015613c0a5780601f10613be157610100808354040283529160200191613c0a565b820191905f5260205f20905b815481529060010190602001808311613bed57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c8257613c82614d63565b14613cb5575f8381526005830160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613cfa57613cfa614d63565b021790555060208201516001820190613d13908261523d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613db38482613773565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613e08939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613e1f612249565b600101546001600160401b0316919050565b5f805f613e3c61299b565b5f86815260088201602052604081208054908290559192509081908015613ed0575f87815260068501602052604090205461271090613e8690600160a01b900461ffff1683615571565b613e909190615538565b91508184600a015f8981526020019081526020015f205f828254613eb4919061574c565b90915550613ec4905082826158b5565b9250613ed08984613ede565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613f2a575f80fd5b505af1158015611304573d5f803e3d5ffd5b80471015613f5f5760405163cd78605960e01b8152306004820152602401610938565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613fa8576040519150601f19603f3d011682016040523d82523d5f602084013e613fad565b606091505b50509050806107a957604051630a12f52160e11b815260040160405180910390fd5b5f613fd8612249565b6007015460ff16613ffc57604051637fab81e560e01b815260040160405180910390fd5b5f614005612249565b905042866001600160401b031611158061403457506140276202a3004261574c565b866001600160401b031610155b1561405d57604051635879da1360e11b81526001600160401b0387166004820152602401610938565b60038101546001600160401b039061408090600160401b9004821685831661574c565b11156140aa57604051633e1a785160e01b81526001600160401b0384166004820152602401610938565b6140b38561487a565b6140bc8461487a565b86516030146140e35786516040516326475b2f60e11b815260040161093891815260200190565b87516014146141075787604051633e08a12560e11b81526004016109389190615065565b5f801b816006018960405161411c91906151e8565b9081526020016040518091039020541461414b578760405163a41f772f60e01b81526004016109389190615065565b614155835f6145a4565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016141d5919061592e565b5f60405180830381865af41580156141ef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261421691908101906159e5565b5f82815260048601602052604090209193509150614234828261523d565b5081836006018b60405161424891906151e8565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614284908590600401615065565b6020604051808303815f875af11580156142a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142c49190615077565b5f8481526005860160205260409020805460ff191660019081178255919250016142ee8c8261523d565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690556143458b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a6040516143a2939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b6143c16136ae565b6143c9614999565b61227e816149a1565b6143da6136ae565b6136f7614a85565b6143ea6136ae565b5f6143f361299b565b905061ffff8616158061440b575061271061ffff8716115b1561442f57604051635f12e6c360e11b815261ffff87166004820152602401610938565b878911156144535760405163222d164360e21b8152600481018a9052602401610938565b60ff851615806144665750600a60ff8616115b156144895760405163170db35960e31b815260ff86166004820152602401610938565b614491613e16565b6001600160401b0316876001600160401b031610156144cd576040516202a06d60e11b81526001600160401b0388166004820152602401610938565b835f036144ed5760405163a733007160e01b815260040160405180910390fd5b8161450e57604051632f6bd1db60e01b815260048101839052602401610938565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145ad612249565b90505f826001600160401b0316846001600160401b031611156145db576145d48385615679565b90506145e8565b6145e58484615679565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580614655575060018401548151614651916001600160401b03169061574c565b8210155b1561467d576001600160401b038084166060830152828252604082015116602082015261469c565b828160600181815161468f919061530c565b6001600160401b03169052505b60608101516146ac90606461534e565b602082015160018601546001600160401b0392909216916146d79190600160401b900460ff1661534e565b6001600160401b0316101561471057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610938565b8581604001818151614722919061530c565b6001600160401b0316905250604081018051869190614742908390615679565b6001600160401b03169052506001840154604082015160649161477091600160401b90910460ff169061534e565b6001600160401b031610156147a9576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610938565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061481b612249565b5f848152600582016020526040902060020180549192509060089061484f90600160401b90046001600160401b0316615a28565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614893575060208101515115155b156148c757805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610938565b602081015151815163ffffffff16111561490a57805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610938565b60015b81602001515181101561166857602082015161492a6001836158b5565b8151811061493a5761493a6150ee565b60200260200101516001600160a01b031682602001518281518110614961576149616150ee565b60200260200101516001600160a01b0316101561499157604051630dbc8d5f60e31b815260040160405180910390fd5b60010161490d565b6136f76136ae565b6149a96136ae565b5f6149b2612249565b82358155905060146149ca6060840160408501615895565b60ff1611806149e957506149e46060830160408401615895565b60ff16155b15614a1d576149fe6060830160408401615895565b604051634a59bbff60e11b815260ff9091166004820152602401610938565b614a2d6060830160408401615895565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a5e6040830160208401614c8f565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612e3a6136ae565b508054614a9990614ef9565b5f825580601f10614aa8575050565b601f0160209004905f5260205f209081019061227e9190614b09565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614b1d575f8155600101614b0a565b5090565b801515811461227e575f80fd5b803563ffffffff81168114611885575f80fd5b5f805f60608486031215614b53575f80fd5b833592506020840135614b6581614b21565b9150614b7360408501614b2e565b90509250925092565b5f60208284031215614b8c575f80fd5b5035919050565b5f6101608284031215614ba4575f80fd5b50919050565b5f8060408385031215614bbb575f80fd5b82356001600160401b03811115614bd0575f80fd5b830160808186031215614be1575f80fd5b9150614bef60208401614b2e565b90509250929050565b5f8060408385031215614c09575f80fd5b82359150614bef60208401614b2e565b6001600160a01b038116811461227e575f80fd5b5f805f8060808587031215614c40575f80fd5b843593506020850135614c5281614b21565b9250614c6060408601614b2e565b91506060850135614c7081614c19565b939692955090935050565b6001600160401b038116811461227e575f80fd5b5f60208284031215614c9f575f80fd5b8135611ab281614c7b565b5f8060408385031215614cbb575f80fd5b823591506020830135614ccd81614c19565b809150509250929050565b5f60208284031215614ce8575f80fd5b611ab282614b2e565b803561ffff81168114611885575f80fd5b5f805f60608486031215614d14575f80fd5b83356001600160401b03811115614d29575f80fd5b840160a08187031215614d3a575f80fd5b9250614d4860208501614cf1565b91506040840135614d5881614c7b565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d8757614d87614d63565b9052565b5f5b83811015614da5578181015183820152602001614d8d565b50505f910152565b5f8151808452614dc4816020860160208601614d8b565b601f01601f19169290920160200192915050565b60208152614dea602082018351614d77565b5f6020830151610100806040850152614e07610120850183614dad565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614e4660a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e9f575f80fd5b82356001600160401b0380821115614eb5575f80fd5b818501915085601f830112614ec8575f80fd5b813581811115614ed6575f80fd5b866020828501011115614ee7575f80fd5b60209290920196919550909350505050565b600181811c90821680614f0d57607f821691505b602082108103614ba457634e487b7160e01b5f52602260045260245ffd5b602081016111a08284614d77565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f6f57614f6f614f39565b60405290565b604080519081016001600160401b0381118282101715614f6f57614f6f614f39565b604051601f8201601f191681016001600160401b0381118282101715614fbf57614fbf614f39565b604052919050565b5f6001600160401b03821115614fdf57614fdf614f39565b50601f01601f191660200190565b5f82601f830112614ffc575f80fd5b815161500f61500a82614fc7565b614f97565b818152846020838601011115615023575f80fd5b6125ae826020830160208701614d8b565b5f60208284031215615044575f80fd5b81516001600160401b03811115615059575f80fd5b6125ae84828501614fed565b602081525f611ab26020830184614dad565b5f60208284031215615087575f80fd5b5051919050565b5f6020828403121561509e575f80fd5b8135611ab281614c19565b5f808335601e198436030181126150be575f80fd5b8301803591506001600160401b038211156150d7575f80fd5b6020019150600581901b3603821315613936575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615116575f80fd5b9190910192915050565b5f82601f83011261512f575f80fd5b813561513d61500a82614fc7565b818152846020838601011115615151575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561517d575f80fd5b615185614f4d565b82356001600160401b038082111561519b575f80fd5b6151a736838701615120565b835260208501359150808211156151bc575f80fd5b506151c936828601615120565b60208301525060408301356151dd81614c7b565b604082015292915050565b5f8251615116818460208701614d8b565b601f8211156107a957805f5260205f20601f840160051c8101602085101561521e5750805b601f840160051c820191505b818110156111b2575f815560010161522a565b81516001600160401b0381111561525657615256614f39565b61526a816152648454614ef9565b846151f9565b602080601f83116001811461529d575f84156152865750858301515b5f19600386901b1c1916600185901b178555611304565b5f85815260208120601f198616915b828110156152cb578886015182559484019460019091019084016152ac565b50858210156152e857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126c5576126c56152f8565b5f63ffffffff808316818103615344576153446152f8565b6001019392505050565b6001600160401b03818116838216028082169190828114615371576153716152f8565b505092915050565b5f808335601e1984360301811261538e575f80fd5b83016020810192503590506001600160401b038111156153ac575f80fd5b803603821315613936575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561549757848303601f19018952813536889003605e1901811261541e575f80fd5b8701606061542c8280615379565b82875261543c83880182846153ba565b9250505061544c86830183615379565b8683038888015261545e8382846153ba565b92505050604080830135925061547383614c7b565b6001600160401b0392909216949091019390935297830197908301906001016153f9565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356154c881614c19565b6001600160a01b031660608381019190915283013536849003601e190181126154ef575f80fd5b83016020810190356001600160401b0381111561550a575f80fd5b8060051b360382131561551b575f80fd5b60808085015261552f60a0850182846153e2565b95945050505050565b5f8261555257634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061556b5761556b614d63565b91905290565b80820281158282048414176111a0576111a06152f8565b5f8060408385031215615599575f80fd5b825191506020830151614ccd81614b21565b5f60208083525f84546155bd81614ef9565b806020870152604060018084165f81146155de57600181146155fa57615627565b60ff19851660408a0152604084151560051b8a01019550615627565b895f5260205f205f5b8581101561561e5781548b8201860152908301908801615603565b8a016040019650505b509398975050505050505050565b5f805f60608486031215615647575f80fd5b83519250602084015161565981614c7b565b6040850151909250614d5881614c7b565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126c5576126c56152f8565b5f80604083850312156156aa575f80fd5b82516001600160401b03808211156156c0575f80fd5b90840190606082870312156156d3575f80fd5b6156db614f4d565b8251815260208301516156ed81614c19565b6020820152604083015182811115615703575f80fd5b61570f88828601614fed565b6040830152508094505050506020830151614ccd81614b21565b5f806040838503121561573a575f80fd5b825191506020830151614ccd81614c7b565b808201808211156111a0576111a06152f8565b5f808335601e19843603018112615774575f80fd5b8301803591506001600160401b0382111561578d575f80fd5b602001915036819003821315613936575f80fd5b5f8235603e19833603018112615116575f80fd5b5f604082360312156157c5575f80fd5b6157cd614f75565b6157d683614b2e565b81526020808401356001600160401b03808211156157f2575f80fd5b9085019036601f830112615804575f80fd5b81358181111561581657615816614f39565b8060051b9150615827848301614f97565b8181529183018401918481019036841115615840575f80fd5b938501935b8385101561586a578435925061585a83614c19565b8282529385019390850190615845565b94860194909452509295945050505050565b5f6020828403121561588c575f80fd5b611ab282614cf1565b5f602082840312156158a5575f80fd5b813560ff81168114611ab2575f80fd5b818103818111156111a0576111a06152f8565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156159235784516001600160a01b031682529383019360019290920191908301906158fa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615954610100840182614dad565b90506040840151601f19808584030160608601526159728383614dad565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159a283836158c8565b925060a08601519150808584030160c0860152506159c082826158c8565b91505060c08401516159dd60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159f6575f80fd5b8251915060208301516001600160401b03811115615a12575f80fd5b615a1e85828601614fed565b9150509250929050565b5f6001600160401b03808316818103615344576153446152f856fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212206fa28e4f995a90cc05a02003024843121454cc58a737bcbbe840f4e9942b364864736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -526,6 +526,37 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) NATIVE return _NativeTokenStakingManager.Contract.NATIVEMINTER(&_NativeTokenStakingManager.CallOpts) } +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCaller) NODEIDLENGTH(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _NativeTokenStakingManager.contract.Call(opts, &out, "NODE_ID_LENGTH") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) NODEIDLENGTH() (uint32, error) { + return _NativeTokenStakingManager.Contract.NODEIDLENGTH(&_NativeTokenStakingManager.CallOpts) +} + +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) NODEIDLENGTH() (uint32, error) { + return _NativeTokenStakingManager.Contract.NODEIDLENGTH(&_NativeTokenStakingManager.CallOpts) +} + // POSVALIDATORMANAGERSTORAGELOCATION is a free data retrieval call binding the contract method 0xafb98096. // // Solidity: function POS_VALIDATOR_MANAGER_STORAGE_LOCATION() view returns(bytes32) @@ -1410,14 +1441,13 @@ func (it *NativeTokenStakingManagerCompletedValidatorRegistrationIterator) Close // NativeTokenStakingManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the NativeTokenStakingManager contract. type NativeTokenStakingManagerCompletedValidatorRegistration struct { ValidationID [32]byte - NodeID []byte Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerCompletedValidatorRegistrationIterator, error) { var validationIDRule []interface{} @@ -1432,9 +1462,9 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterCompl return &NativeTokenStakingManagerCompletedValidatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} @@ -1474,9 +1504,9 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchComple }), nil } -// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*NativeTokenStakingManagerCompletedValidatorRegistration, error) { event := new(NativeTokenStakingManagerCompletedValidatorRegistration) if err := _NativeTokenStakingManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { @@ -2608,41 +2638,49 @@ func (it *NativeTokenStakingManagerInitiatedValidatorRegistrationIterator) Close // NativeTokenStakingManagerInitiatedValidatorRegistration represents a InitiatedValidatorRegistration event raised by the NativeTokenStakingManager contract. type NativeTokenStakingManagerInitiatedValidatorRegistration struct { ValidationID [32]byte - NodeID []byte + NodeID [20]byte RegistrationMessageID [32]byte RegistrationExpiry uint64 Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerInitiatedValidatorRegistrationIterator, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*NativeTokenStakingManagerInitiatedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } return &NativeTokenStakingManagerInitiatedValidatorRegistrationIterator{contract: _NativeTokenStakingManager.contract, event: "InitiatedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitiatedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerInitiatedValidatorRegistration, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -2674,9 +2712,9 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchInitia }), nil } -// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseInitiatedValidatorRegistration(log types.Log) (*NativeTokenStakingManagerInitiatedValidatorRegistration, error) { event := new(NativeTokenStakingManagerInitiatedValidatorRegistration) if err := _NativeTokenStakingManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { @@ -3050,39 +3088,47 @@ func (it *NativeTokenStakingManagerRegisteredInitialValidatorIterator) Close() e // NativeTokenStakingManagerRegisteredInitialValidator represents a RegisteredInitialValidator event raised by the NativeTokenStakingManager contract. type NativeTokenStakingManagerRegisteredInitialValidator struct { ValidationID [32]byte - NodeID []byte + NodeID [20]byte Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte) (*NativeTokenStakingManagerRegisteredInitialValidatorIterator, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*NativeTokenStakingManagerRegisteredInitialValidatorIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } return &NativeTokenStakingManagerRegisteredInitialValidatorIterator{contract: _NativeTokenStakingManager.contract, event: "RegisteredInitialValidator", logs: logs, sub: sub}, nil } -// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerRegisteredInitialValidator, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerRegisteredInitialValidator, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule) + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -3114,9 +3160,9 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchRegist }), nil } -// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseRegisteredInitialValidator(log types.Log) (*NativeTokenStakingManagerRegisteredInitialValidator, error) { event := new(NativeTokenStakingManagerRegisteredInitialValidator) if err := _NativeTokenStakingManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { @@ -3274,7 +3320,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseUptime // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220d0480ce8a92db2f68f39def88a3ded31f768999147bdb5eeb25933715298f87d64736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index 2cc8527c4..7909bd934 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -91,8 +91,8 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161390938038061390983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bc8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f14146102f5578063d588c18f14610325578063d5f20ff614610338578063df93d8de14610358578063f2fde38b14610362578063fd7ac5e714610375575f80fd5b8063a3a65e481461025a578063b771b3bc1461026d578063bb0b19381461027b578063bc5fbfec146102c6578063bee0a03f146102da578063c974d1b6146102ed575f80fd5b8063732214f811610110578063732214f8146101bc5780638280a25a146101c35780638da5cb5b146101dd5780639681d9401461022157806397fb70d4146102345780639ba96b8614610247575f80fd5b80630322ed981461014c57806320d91b7a146101615780635dc1f5351461017457806360305d6214610197578063715018a6146101b4575b5f80fd5b61015f61015a3660046128e8565b610388565b005b61015f61016f366004612917565b610626565b5f80516020613747833981519152545b6040519081526020015b60405180910390f35b61019f601481565b60405163ffffffff909116815260200161018e565b61015f610bb9565b6101845f81565b6101cb603081565b60405160ff909116815260200161018e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461022f366004612965565b610bcc565b61015f6102423660046128e8565b610bdf565b610184610255366004612992565b610bf3565b610184610268366004612965565b610cc9565b6102096005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b03909116815260200161018e565b6101845f8051602061374783398151915281565b61015f6102e83660046128e8565b610ec7565b6101cb601481565b610308610303366004612965565b611008565b604080519283526001600160401b0390911660208301520161018e565b61015f6103333660046129f8565b611197565b61034b6103463660046128e8565b6112a5565b60405161018e9190612aaa565b6102ae6202a30081565b61015f610370366004612b60565b6113ff565b610184610383366004612b82565b611439565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff1660058111156103d6576103d6612a29565b60058111156103e7576103e7612a29565b81526020016001820180546103fb90612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461042790612bed565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104ea576104ea612a29565b14610526575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561059d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105c49190810190612d36565b6040518263ffffffff1660e01b81526004016105e09190612d67565b6020604051808303815f875af11580156105fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106209190612d79565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137478339815191529060ff161561067857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106df9190612d79565b836020013514610708576040516372b0a7e760e11b81526020840135600482015260240161051d565b306107196060850160408601612b60565b6001600160a01b03161461075c576107376060840160408501612b60565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161051d565b5f61076a6060850185612d90565b905090505f805b828163ffffffff1610156109aa575f61078d6060880188612d90565b8363ffffffff168181106107a3576107a3612dd5565b90506020028101906107b59190612de9565b6107be90612e54565b80516040519192505f9160068801916107d691612ecf565b9081526020016040518091039020541461080657805160405163a41f772f60e01b815261051d9190600401612d67565b5f6002885f01358460405160200161083592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261084f91612ecf565b602060405180830381855afa15801561086a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061088d9190612d79565b90508086600601835f01516040516108a59190612ecf565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906108e59082612f2b565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109549085612ffe565b9350807fbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2835f0151846040015160405161098f92919061301e565b60405180910390a25050806109a390613048565b9050610771565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b03841681029190911790915560018401546064916109f2910460ff168361306a565b6001600160401b03161015610a2557604051633e1a785160e01b81526001600160401b038216600482015260240161051d565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a4987611494565b604001516040518263ffffffff1660e01b8152600401610a699190612d67565b602060405180830381865af4158015610a84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa89190612d79565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610ae291906131c0565b5f60405180830381865af4158015610afc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b239190810190612d36565b90505f600282604051610b369190612ecf565b602060405180830381855afa158015610b51573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b749190612d79565b9050828114610ba05760405163baaea89d60e01b8152600481018290526024810184905260440161051d565b5050506007909201805460ff1916600117905550505050565b610bc16115aa565b610bca5f611605565b565b5f80610bd783611675565b509392505050565b610be76115aa565b610bf081611a2d565b50565b5f610bfc6115aa565b610cc0610c098480613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c4a925050506020860186613254565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c8e925050506060870160408801613296565b610c9b60608801886132b1565b610ca4906132c5565b610cb160808901896132b1565b610cba906132c5565b87611d23565b90505b92915050565b5f5f80516020613747833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610cfd87611494565b604001516040518263ffffffff1660e01b8152600401610d1d9190612d67565b6040805180830381865af4158015610d37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061339b565b9150915080610d8157604051632d07135360e01b8152811515600482015260240161051d565b5f82815260048401602052604090208054610d9b90612bed565b90505f03610dbf5760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580860160205260409091205460ff1690811115610de657610de6612a29565b14610e19575f8281526005840160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004840160205260408120610e3191612854565b5f82815260058401602052604090819020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff199092169190911790915590820154925185937f77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db6293610eb793600190910192600160c01b9092041690613435565b60405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137478339815191529190610f0e90612bed565b90505f03610f325760405163089938b360e11b81526004810183905260240161051d565b60015f838152600580840160205260409091205460ff1690811115610f5957610f59612a29565b14610f8c575f8281526005820160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92610fc39201613447565b6020604051808303815f875af1158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190612d79565b505050565b5f805f61101484611494565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110549190612d67565b606060405180830381865af415801561106f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110939190613459565b9250925092505f6110ae5f8051602061374783398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561110257604051632e19bc2d60e11b81526001600160401b038416600482015260240161051d565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff99061118290869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111db5750825b90505f826001600160401b031660011480156111f65750303b155b905081158015611204575080155b156112225760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561124c57845460ff60401b1916600160401b1785555b61125687876120f6565b831561129c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112ad61288b565b5f8281525f805160206137678339815191526020526040908190208151610100810190925280545f80516020613747833981519152929190829060ff1660058111156112fb576112fb612a29565b600581111561130c5761130c612a29565b815260200160018201805461132090612bed565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90612bed565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6114076115aa565b6001600160a01b03811661143057604051631e4fbdf760e01b81525f600482015260240161051d565b610bf081611605565b6040515f905f80516020613747833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb069061147c9086908690613499565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156114f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151f91908101906134a8565b915091508061154157604051636b2f19e960e01b815260040160405180910390fd5b815115611567578151604051636ba589a560e01b8152600481019190915260240161051d565b60208201516001600160a01b0316156115a3576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161051d565b5092915050565b336115dc7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bca5760405163118cdaa760e01b815233600482015260240161051d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61167e61288b565b5f805160206137478339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116b188611494565b604001516040518263ffffffff1660e01b81526004016116d19190612d67565b6040805180830381865af41580156116eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f919061339b565b91509150801561173657604051632d07135360e01b8152811515600482015260240161051d565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff9091169081111561176e5761176e612a29565b600581111561177f5761177f612a29565b815260200160018201805461179390612bed565b80601f01602080910402602001604051908101604052809291908181526020018280546117bf90612bed565b801561180a5780601f106117e15761010080835404028352916020019161180a565b820191905f5260205f20905b8154815290600101906020018083116117ed57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561188257611882612a29565b141580156118a357506001815160058111156118a0576118a0612a29565b14155b156118c457805160405163170cc93360e21b815261051d9190600401612c25565b6003815160058111156118d9576118d9612a29565b036118e757600481526118ec565b600581525b8360060181602001516040516119029190612ecf565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561194557611945612a29565b02179055506020820151600182019061195e9082612f2b565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376783398151915260205260408082208151610100810190925280545f8051602061374783398151915293929190829060ff166005811115611a7b57611a7b612a29565b6005811115611a8c57611a8c612a29565b8152602001600182018054611aa090612bed565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90612bed565b8015611b175780601f10611aee57610100808354040283529160200191611b17565b820191905f5260205f20905b815481529060010190602001808311611afa57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611b8f57611b8f612a29565b14611bc2575f8381526005830160205260409081902054905163170cc93360e21b815261051d9160ff1690600401612c25565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c0757611c07612a29565b021790555060208201516001820190611c209082612f2b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611cc08482612114565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d15939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611d6757604051637fab81e560e01b815260040160405180910390fd5b5f80516020613747833981519152426001600160401b038716111580611da25750611d956202a30042613535565b866001600160401b031610155b15611dcb57604051635879da1360e11b81526001600160401b038716600482015260240161051d565b60038101546001600160401b0390611dee90600160401b90048216858316613535565b1115611e1857604051633e1a785160e01b81526001600160401b038416600482015260240161051d565b611e21856122eb565b611e2a846122eb565b8651603014611e515786516040516326475b2f60e11b815260040161051d91815260200190565b87515f03611e745787604051633e08a12560e11b815260040161051d9190612d67565b5f801b8160060189604051611e899190612ecf565b90815260200160405180910390205414611eb8578760405163a41f772f60e01b815260040161051d9190612d67565b611ec2835f61240a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f4291906135ae565b5f60405180830381865af4158015611f5c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f83919081019061365d565b5f82815260048601602052604090209193509150611fa18282612f2b565b5081836006018b604051611fb59190612ecf565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611ff1908590600401612d67565b6020604051808303815f875af115801561200d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120319190612d79565b5f8481526005860160205260409020805460ff1916600190811782559192500161205b8c82612f2b565b505f83815260058501602052604090819020600281018054600160c01b6001600160401b038b1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690555183907f6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf906120df908e9085908e908c906136a0565b60405180910390a250909998505050505050505050565b6120fe612674565b612107826126bd565b612110816126d6565b5050565b5f8281525f80516020613767833981519152602052604081206002015481905f8051602061374783398151915290600160c01b90046001600160401b031661215c858261240a565b5f612166876126e7565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561220a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122319190810190612d36565b6040518263ffffffff1660e01b815260040161224d9190612d67565b6020604051808303815f875af1158015612269573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228d9190612d79565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff16158015612304575060208101515115155b1561233857805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b602081015151815163ffffffff16111561237b57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161051d565b60015b81602001515181101561211057602082015161239b6001836136d8565b815181106123ab576123ab612dd5565b60200260200101516001600160a01b0316826020015182815181106123d2576123d2612dd5565b60200260200101516001600160a01b0316101561240257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161237e565b5f805160206137478339815191525f6001600160401b03808416908516111561243e5761243783856136eb565b905061244b565b61244884846136eb565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806124b85750600184015481516124b4916001600160401b031690613535565b8210155b156124e0576001600160401b03808416606083015282825260408201511660208201526124ff565b82816060018181516124f29190612ffe565b6001600160401b03169052505b606081015161250f90606461306a565b602082015160018601546001600160401b03929092169161253a9190600160401b900460ff1661306a565b6001600160401b0316101561257357606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161051d565b85816040018181516125859190612ffe565b6001600160401b03169052506040810180518691906125a59083906136eb565b6001600160401b0316905250600184015460408201516064916125d391600160401b90910460ff169061306a565b6001600160401b0316101561260c576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161051d565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bca57604051631afcd79f60e31b815260040160405180910390fd5b6126c5612674565b6126cd61275c565b610bf081612764565b6126de612674565b610bf08161284c565b5f8181525f805160206137678339815191526020526040812060020180545f80516020613747833981519152919060089061273190600160401b90046001600160401b031661370b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610bca612674565b61276c612674565b80355f8051602061374783398151915290815560146127916060840160408501613726565b60ff1611806127b057506127ab6060830160408401613726565b60ff16155b156127e4576127c56060830160408401613726565b604051634a59bbff60e11b815260ff909116600482015260240161051d565b6127f46060830160408401613726565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556128256040830160208401613296565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b611407612674565b50805461286090612bed565b5f825580601f1061286f575050565b601f0160209004905f5260205f2090810190610bf091906128d0565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b808211156128e4575f81556001016128d1565b5090565b5f602082840312156128f8575f80fd5b5035919050565b803563ffffffff81168114612912575f80fd5b919050565b5f8060408385031215612928575f80fd5b82356001600160401b0381111561293d575f80fd5b83016080818603121561294e575f80fd5b915061295c602084016128ff565b90509250929050565b5f60208284031215612975575f80fd5b610cc0826128ff565b6001600160401b0381168114610bf0575f80fd5b5f80604083850312156129a3575f80fd5b82356001600160401b038111156129b8575f80fd5b830160a081860312156129c9575f80fd5b915060208301356129d98161297e565b809150509250929050565b6001600160a01b0381168114610bf0575f80fd5b5f808284036080811215612a0a575f80fd5b6060811215612a17575f80fd5b5082915060608301356129d9816129e4565b634e487b7160e01b5f52602160045260245ffd5b60068110612a5957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612a77578181015183820152602001612a5f565b50505f910152565b5f8151808452612a96816020860160208601612a5d565b601f01601f19169290920160200192915050565b60208152612abc602082018351612a3d565b5f6020830151610100806040850152612ad9610120850183612a7f565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b1860a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612b70575f80fd5b8135612b7b816129e4565b9392505050565b5f8060208385031215612b93575f80fd5b82356001600160401b0380821115612ba9575f80fd5b818501915085601f830112612bbc575f80fd5b813581811115612bca575f80fd5b866020828501011115612bdb575f80fd5b60209290920196919550909350505050565b600181811c90821680612c0157607f821691505b602082108103612c1f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610cc38284612a3d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612c6957612c69612c33565b60405290565b604080519081016001600160401b0381118282101715612c6957612c69612c33565b604051601f8201601f191681016001600160401b0381118282101715612cb957612cb9612c33565b604052919050565b5f6001600160401b03821115612cd957612cd9612c33565b50601f01601f191660200190565b5f82601f830112612cf6575f80fd5b8151612d09612d0482612cc1565b612c91565b818152846020838601011115612d1d575f80fd5b612d2e826020830160208701612a5d565b949350505050565b5f60208284031215612d46575f80fd5b81516001600160401b03811115612d5b575f80fd5b612d2e84828501612ce7565b602081525f610cc06020830184612a7f565b5f60208284031215612d89575f80fd5b5051919050565b5f808335601e19843603018112612da5575f80fd5b8301803591506001600160401b03821115612dbe575f80fd5b6020019150600581901b36038213156122e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612dfd575f80fd5b9190910192915050565b5f82601f830112612e16575f80fd5b8135612e24612d0482612cc1565b818152846020838601011115612e38575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612e64575f80fd5b612e6c612c47565b82356001600160401b0380821115612e82575f80fd5b612e8e36838701612e07565b83526020850135915080821115612ea3575f80fd5b50612eb036828601612e07565b6020830152506040830135612ec48161297e565b604082015292915050565b5f8251612dfd818460208701612a5d565b601f82111561100357805f5260205f20601f840160051c81016020851015612f055750805b601f840160051c820191505b81811015612f24575f8155600101612f11565b5050505050565b81516001600160401b03811115612f4457612f44612c33565b612f5881612f528454612bed565b84612ee0565b602080601f831160018114612f8b575f8415612f745750858301515b5f19600386901b1c1916600185901b178555612fe2565b5f85815260208120601f198616915b82811015612fb957888601518255948401946001909101908401612f9a565b5085821015612fd657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115a3576115a3612fea565b604081525f6130306040830185612a7f565b90506001600160401b03831660208301529392505050565b5f63ffffffff80831681810361306057613060612fea565b6001019392505050565b6001600160401b0381811683821602808216919082811461308d5761308d612fea565b505092915050565b5f808335601e198436030181126130aa575f80fd5b83016020810192503590506001600160401b038111156130c8575f80fd5b8036038213156122e4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131b357848303601f19018952813536889003605e1901811261313a575f80fd5b870160606131488280613095565b82875261315883880182846130d6565b9250505061316886830183613095565b8683038888015261317a8382846130d6565b92505050604080830135925061318f8361297e565b6001600160401b039290921694909101939093529783019790830190600101613115565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356131e4816129e4565b6001600160a01b031660608381019190915283013536849003601e1901811261320b575f80fd5b83016020810190356001600160401b03811115613226575f80fd5b8060051b3603821315613237575f80fd5b60808085015261324b60a0850182846130fe565b95945050505050565b5f808335601e19843603018112613269575f80fd5b8301803591506001600160401b03821115613282575f80fd5b6020019150368190038213156122e4575f80fd5b5f602082840312156132a6575f80fd5b8135612b7b8161297e565b5f8235603e19833603018112612dfd575f80fd5b5f604082360312156132d5575f80fd5b6132dd612c6f565b6132e6836128ff565b81526020808401356001600160401b0380821115613302575f80fd5b9085019036601f830112613314575f80fd5b81358181111561332657613326612c33565b8060051b9150613337848301612c91565b8181529183018401918481019036841115613350575f80fd5b938501935b8385101561337a578435925061336a836129e4565b8282529385019390850190613355565b94860194909452509295945050505050565b80518015158114612912575f80fd5b5f80604083850312156133ac575f80fd5b8251915061295c6020840161338c565b5f81546133c881612bed565b8085526020600183811680156133e557600181146133ff5761342a565b60ff1985168884015283151560051b88018301955061342a565b865f52825f205f5b858110156134225781548a8201860152908301908401613407565b890184019650505b505050505092915050565b604081525f61303060408301856133bc565b602081525f610cc060208301846133bc565b5f805f6060848603121561346b575f80fd5b83519250602084015161347d8161297e565b604085015190925061348e8161297e565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134b9575f80fd5b82516001600160401b03808211156134cf575f80fd5b90840190606082870312156134e2575f80fd5b6134ea612c47565b8251815260208301516134fc816129e4565b6020820152604083015182811115613512575f80fd5b61351e88828601612ce7565b604083015250935061295c9150506020840161338c565b80820180821115610cc357610cc3612fea565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135a35784516001600160a01b0316825293830193600192909201919083019061357a565b509695505050505050565b60208152815160208201525f602083015160e060408401526135d4610100840182612a7f565b90506040840151601f19808584030160608601526135f28383612a7f565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526136228383613548565b925060a08601519150808584030160c0860152506136408282613548565b91505060c0840151610bd760e08501826001600160401b03169052565b5f806040838503121561366e575f80fd5b8251915060208301516001600160401b0381111561368a575f80fd5b61369685828601612ce7565b9150509250929050565b608081525f6136b26080830187612a7f565b6020830195909552506001600160401b0392831660408201529116606090910152919050565b81810381811115610cc357610cc3612fea565b6001600160401b038281168282160390808211156115a3576115a3612fea565b5f6001600160401b0380831681810361306057613060612fea565b5f60208284031215613736575f80fd5b813560ff81168114612b7b575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a26469706673582212209da852e13a152d55575dba5a998adb81bdc0292e0ac4d3cb23e6150599276cb164736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b5060405161390a38038061390a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bd8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610153575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f1414610300578063d588c18f14610330578063d5f20ff614610343578063df93d8de14610363578063f2fde38b1461036d578063fd7ac5e714610380575f80fd5b8063a3a65e4814610265578063b771b3bc14610278578063bb0b193814610286578063bc5fbfec146102d1578063bee0a03f146102e5578063c974d1b6146102f8575f80fd5b8063732214f811610110578063732214f8146101c75780638280a25a146101ce5780638da5cb5b146101e85780639681d9401461022c57806397fb70d41461023f5780639ba96b8614610252575f80fd5b80630322ed981461015757806320d91b7a1461016c5780635dc1f5351461017f57806360305d62146101a257806363e2ca97146101a2578063715018a6146101bf575b5f80fd5b61016a61016536600461295e565b610393565b005b61016a61017a36600461298d565b610631565b5f80516020613748833981519152545b6040519081526020015b60405180910390f35b6101aa601481565b60405163ffffffff9091168152602001610199565b61016a610c0a565b61018f5f81565b6101d6603081565b60405160ff9091168152602001610199565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b039091168152602001610199565b61018f61023a3660046129db565b610c1d565b61016a61024d36600461295e565b610c30565b61018f610260366004612a08565b610c44565b61018f6102733660046129db565b610d1a565b6102146005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b039091168152602001610199565b61018f5f8051602061374883398151915281565b61016a6102f336600461295e565b610f0c565b6101d6601481565b61031361030e3660046129db565b61104d565b604080519283526001600160401b03909116602083015201610199565b61016a61033e366004612a6e565b6111dc565b61035661035136600461295e565b6112ea565b6040516101999190612b20565b6102b96202a30081565b61016a61037b366004612bd6565b611444565b61018f61038e366004612bf8565b61147e565b5f8181525f8051602061376883398151915260205260408082208151610100810190925280545f8051602061374883398151915293929190829060ff1660058111156103e1576103e1612a9f565b60058111156103f2576103f2612a9f565b815260200160018201805461040690612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461043290612c63565b801561047d5780601f106104545761010080835404028352916020019161047d565b820191905f5260205f20905b81548152906001019060200180831161046057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104f5576104f5612a9f565b14610531575f8381526005830160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156105a8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105cf9190810190612dac565b6040518263ffffffff1660e01b81526004016105eb9190612ddd565b6020604051808303815f875af1158015610607573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062b9190612def565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137488339815191529060ff161561068357604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ea9190612def565b836020013514610713576040516372b0a7e760e11b815260208401356004820152602401610528565b306107246060850160408601612bd6565b6001600160a01b031614610767576107426060840160408501612bd6565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610528565b5f6107756060850185612e06565b905090505f805b828163ffffffff1610156109fb575f6107986060880188612e06565b8363ffffffff168181106107ae576107ae612e4b565b90506020028101906107c09190612e5f565b6107c990612eca565b80516040519192505f9160068801916107e191612f45565b9081526020016040518091039020541461081157805160405163a41f772f60e01b81526105289190600401612ddd565b805151601414610837578051604051633e08a12560e11b81526105289190600401612ddd565b5f6002885f01358460405160200161086692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261088091612f45565b602060405180830381855afa15801561089b573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108be9190612def565b90508086600601835f01516040516108d69190612f45565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906109169082612fa1565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109859085613074565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d784604001516040516109e091906001600160401b0391909116815260200190565b60405180910390a35050806109f490613094565b905061077c565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610a43910460ff16836130b6565b6001600160401b03161015610a7657604051633e1a785160e01b81526001600160401b0382166004820152602401610528565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a9a876114d9565b604001516040518263ffffffff1660e01b8152600401610aba9190612ddd565b602060405180830381865af4158015610ad5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af99190612def565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610b33919061320c565b5f60405180830381865af4158015610b4d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b749190810190612dac565b90505f600282604051610b879190612f45565b602060405180830381855afa158015610ba2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610bc59190612def565b9050828114610bf15760405163baaea89d60e01b81526004810182905260248101849052604401610528565b5050506007909201805460ff1916600117905550505050565b610c126115ef565b610c1b5f61164a565b565b5f80610c28836116ba565b509392505050565b610c386115ef565b610c4181611a72565b50565b5f610c4d6115ef565b610d11610c5a84806132a0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9b9250505060208601866132a0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610cdf9250505060608701604088016132e2565b610cec60608801886132fd565b610cf590613311565b610d0260808901896132fd565b610d0b90613311565b87611d68565b90505b92915050565b5f5f80516020613748833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610d4e876114d9565b604001516040518263ffffffff1660e01b8152600401610d6e9190612ddd565b6040805180830381865af4158015610d88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dac91906133e7565b9150915080610dd257604051632d07135360e01b81528115156004820152602401610528565b5f82815260048401602052604090208054610dec90612c63565b90505f03610e105760405163089938b360e11b815260048101839052602401610528565b60015f838152600580860160205260409091205460ff1690811115610e3757610e37612a9f565b14610e6a575f8281526005840160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b5f8281526004840160205260408120610e82916128ca565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137488339815191529190610f5390612c63565b90505f03610f775760405163089938b360e11b815260048101839052602401610528565b60015f838152600580840160205260409091205460ff1690811115610f9e57610f9e612a9f565b14610fd1575f8281526005820160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb926110089201613408565b6020604051808303815f875af1158015611024573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110489190612def565b505050565b5f805f611059846114d9565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110999190612ddd565b606060405180830381865af41580156110b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d89190613492565b9250925092505f6110f35f8051602061374883398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561114757604051632e19bc2d60e11b81526001600160401b0384166004820152602401610528565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9906111c790869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112205750825b90505f826001600160401b0316600114801561123b5750303b155b905081158015611249575080155b156112675760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561129157845460ff60401b1916600160401b1785555b61129b878761216c565b83156112e157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112f2612901565b5f8281525f805160206137688339815191526020526040908190208151610100810190925280545f80516020613748833981519152929190829060ff16600581111561134057611340612a9f565b600581111561135157611351612a9f565b815260200160018201805461136590612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461139190612c63565b80156113dc5780601f106113b3576101008083540402835291602001916113dc565b820191905f5260205f20905b8154815290600101906020018083116113bf57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b61144c6115ef565b6001600160a01b03811661147557604051631e4fbdf760e01b81525f6004820152602401610528565b610c418161164a565b6040515f905f80516020613748833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906114c190869086906134d2565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561153d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261156491908101906134e1565b915091508061158657604051636b2f19e960e01b815260040160405180910390fd5b8151156115ac578151604051636ba589a560e01b81526004810191909152602401610528565b60208201516001600160a01b0316156115e8576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610528565b5092915050565b336116217f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c1b5760405163118cdaa760e01b8152336004820152602401610528565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f6116c3612901565b5f805160206137488339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116f6886114d9565b604001516040518263ffffffff1660e01b81526004016117169190612ddd565b6040805180830381865af4158015611730573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175491906133e7565b91509150801561177b57604051632d07135360e01b81528115156004820152602401610528565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff909116908111156117b3576117b3612a9f565b60058111156117c4576117c4612a9f565b81526020016001820180546117d890612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461180490612c63565b801561184f5780601f106118265761010080835404028352916020019161184f565b820191905f5260205f20905b81548152906001019060200180831161183257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156118c7576118c7612a9f565b141580156118e857506001815160058111156118e5576118e5612a9f565b14155b1561190957805160405163170cc93360e21b81526105289190600401612c9b565b60038151600581111561191e5761191e612a9f565b0361192c5760048152611931565b600581525b8360060181602001516040516119479190612f45565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561198a5761198a612a9f565b0217905550602082015160018201906119a39082612fa1565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376883398151915260205260408082208151610100810190925280545f8051602061374883398151915293929190829060ff166005811115611ac057611ac0612a9f565b6005811115611ad157611ad1612a9f565b8152602001600182018054611ae590612c63565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1190612c63565b8015611b5c5780601f10611b3357610100808354040283529160200191611b5c565b820191905f5260205f20905b815481529060010190602001808311611b3f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611bd457611bd4612a9f565b14611c07575f8381526005830160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c4c57611c4c612a9f565b021790555060208201516001820190611c659082612fa1565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611d05848261218a565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d5a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611dac57604051637fab81e560e01b815260040160405180910390fd5b5f80516020613748833981519152426001600160401b038716111580611de75750611dda6202a3004261356e565b866001600160401b031610155b15611e1057604051635879da1360e11b81526001600160401b0387166004820152602401610528565b60038101546001600160401b0390611e3390600160401b9004821685831661356e565b1115611e5d57604051633e1a785160e01b81526001600160401b0384166004820152602401610528565b611e6685612361565b611e6f84612361565b8651603014611e965786516040516326475b2f60e11b815260040161052891815260200190565b8751601414611eba5787604051633e08a12560e11b81526004016105289190612ddd565b5f801b8160060189604051611ecf9190612f45565b90815260200160405180910390205414611efe578760405163a41f772f60e01b81526004016105289190612ddd565b611f08835f612480565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f8891906135e7565b5f60405180830381865af4158015611fa2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611fc99190810190613696565b5f82815260048601602052604090209193509150611fe78282612fa1565b5081836006018b604051611ffb9190612f45565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612037908590600401612ddd565b6020604051808303815f875af1158015612053573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120779190612def565b5f8481526005860160205260409020805460ff191660019081178255919250016120a18c82612fa1565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690556120f88b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a604051612155939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b6121746126ea565b61217d82612733565b6121868161274c565b5050565b5f8281525f80516020613768833981519152602052604081206002015481905f8051602061374883398151915290600160c01b90046001600160401b03166121d28582612480565b5f6121dc8761275d565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612280573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122a79190810190612dac565b6040518263ffffffff1660e01b81526004016122c39190612ddd565b6020604051808303815f875af11580156122df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123039190612def565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff1615801561237a575060208101515115155b156123ae57805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610528565b602081015151815163ffffffff1611156123f157805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610528565b60015b8160200151518110156121865760208201516124116001836136d9565b8151811061242157612421612e4b565b60200260200101516001600160a01b03168260200151828151811061244857612448612e4b565b60200260200101516001600160a01b0316101561247857604051630dbc8d5f60e31b815260040160405180910390fd5b6001016123f4565b5f805160206137488339815191525f6001600160401b0380841690851611156124b4576124ad83856136ec565b90506124c1565b6124be84846136ec565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061252e57506001840154815161252a916001600160401b03169061356e565b8210155b15612556576001600160401b0380841660608301528282526040820151166020820152612575565b82816060018181516125689190613074565b6001600160401b03169052505b60608101516125859060646130b6565b602082015160018601546001600160401b0392909216916125b09190600160401b900460ff166130b6565b6001600160401b031610156125e957606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610528565b85816040018181516125fb9190613074565b6001600160401b031690525060408101805186919061261b9083906136ec565b6001600160401b03169052506001840154604082015160649161264991600160401b90910460ff16906130b6565b6001600160401b03161015612682576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610528565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c1b57604051631afcd79f60e31b815260040160405180910390fd5b61273b6126ea565b6127436127d2565b610c41816127da565b6127546126ea565b610c41816128c2565b5f8181525f805160206137688339815191526020526040812060020180545f8051602061374883398151915291906008906127a790600160401b90046001600160401b031661370c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610c1b6126ea565b6127e26126ea565b80355f8051602061374883398151915290815560146128076060840160408501613727565b60ff16118061282657506128216060830160408401613727565b60ff16155b1561285a5761283b6060830160408401613727565b604051634a59bbff60e11b815260ff9091166004820152602401610528565b61286a6060830160408401613727565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561289b60408301602084016132e2565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b61144c6126ea565b5080546128d690612c63565b5f825580601f106128e5575050565b601f0160209004905f5260205f2090810190610c419190612946565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561295a575f8155600101612947565b5090565b5f6020828403121561296e575f80fd5b5035919050565b803563ffffffff81168114612988575f80fd5b919050565b5f806040838503121561299e575f80fd5b82356001600160401b038111156129b3575f80fd5b8301608081860312156129c4575f80fd5b91506129d260208401612975565b90509250929050565b5f602082840312156129eb575f80fd5b610d1182612975565b6001600160401b0381168114610c41575f80fd5b5f8060408385031215612a19575f80fd5b82356001600160401b03811115612a2e575f80fd5b830160a08186031215612a3f575f80fd5b91506020830135612a4f816129f4565b809150509250929050565b6001600160a01b0381168114610c41575f80fd5b5f808284036080811215612a80575f80fd5b6060811215612a8d575f80fd5b508291506060830135612a4f81612a5a565b634e487b7160e01b5f52602160045260245ffd5b60068110612acf57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612aed578181015183820152602001612ad5565b50505f910152565b5f8151808452612b0c816020860160208601612ad3565b601f01601f19169290920160200192915050565b60208152612b32602082018351612ab3565b5f6020830151610100806040850152612b4f610120850183612af5565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b8e60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612be6575f80fd5b8135612bf181612a5a565b9392505050565b5f8060208385031215612c09575f80fd5b82356001600160401b0380821115612c1f575f80fd5b818501915085601f830112612c32575f80fd5b813581811115612c40575f80fd5b866020828501011115612c51575f80fd5b60209290920196919550909350505050565b600181811c90821680612c7757607f821691505b602082108103612c9557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610d148284612ab3565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612cdf57612cdf612ca9565b60405290565b604080519081016001600160401b0381118282101715612cdf57612cdf612ca9565b604051601f8201601f191681016001600160401b0381118282101715612d2f57612d2f612ca9565b604052919050565b5f6001600160401b03821115612d4f57612d4f612ca9565b50601f01601f191660200190565b5f82601f830112612d6c575f80fd5b8151612d7f612d7a82612d37565b612d07565b818152846020838601011115612d93575f80fd5b612da4826020830160208701612ad3565b949350505050565b5f60208284031215612dbc575f80fd5b81516001600160401b03811115612dd1575f80fd5b612da484828501612d5d565b602081525f610d116020830184612af5565b5f60208284031215612dff575f80fd5b5051919050565b5f808335601e19843603018112612e1b575f80fd5b8301803591506001600160401b03821115612e34575f80fd5b6020019150600581901b360382131561235a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612e73575f80fd5b9190910192915050565b5f82601f830112612e8c575f80fd5b8135612e9a612d7a82612d37565b818152846020838601011115612eae575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612eda575f80fd5b612ee2612cbd565b82356001600160401b0380821115612ef8575f80fd5b612f0436838701612e7d565b83526020850135915080821115612f19575f80fd5b50612f2636828601612e7d565b6020830152506040830135612f3a816129f4565b604082015292915050565b5f8251612e73818460208701612ad3565b601f82111561104857805f5260205f20601f840160051c81016020851015612f7b5750805b601f840160051c820191505b81811015612f9a575f8155600101612f87565b5050505050565b81516001600160401b03811115612fba57612fba612ca9565b612fce81612fc88454612c63565b84612f56565b602080601f831160018114613001575f8415612fea5750858301515b5f19600386901b1c1916600185901b178555613058565b5f85815260208120601f198616915b8281101561302f57888601518255948401946001909101908401613010565b508582101561304c57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115e8576115e8613060565b5f63ffffffff8083168181036130ac576130ac613060565b6001019392505050565b6001600160401b038181168382160280821691908281146130d9576130d9613060565b505092915050565b5f808335601e198436030181126130f6575f80fd5b83016020810192503590506001600160401b03811115613114575f80fd5b80360382131561235a575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131ff57848303601f19018952813536889003605e19018112613186575f80fd5b8701606061319482806130e1565b8287526131a48388018284613122565b925050506131b4868301836130e1565b868303888801526131c6838284613122565b9250505060408083013592506131db836129f4565b6001600160401b039290921694909101939093529783019790830190600101613161565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561323081612a5a565b6001600160a01b031660608381019190915283013536849003601e19018112613257575f80fd5b83016020810190356001600160401b03811115613272575f80fd5b8060051b3603821315613283575f80fd5b60808085015261329760a08501828461314a565b95945050505050565b5f808335601e198436030181126132b5575f80fd5b8301803591506001600160401b038211156132ce575f80fd5b60200191503681900382131561235a575f80fd5b5f602082840312156132f2575f80fd5b8135612bf1816129f4565b5f8235603e19833603018112612e73575f80fd5b5f60408236031215613321575f80fd5b613329612ce5565b61333283612975565b81526020808401356001600160401b038082111561334e575f80fd5b9085019036601f830112613360575f80fd5b81358181111561337257613372612ca9565b8060051b9150613383848301612d07565b818152918301840191848101903684111561339c575f80fd5b938501935b838510156133c657843592506133b683612a5a565b82825293850193908501906133a1565b94860194909452509295945050505050565b80518015158114612988575f80fd5b5f80604083850312156133f8575f80fd5b825191506129d2602084016133d8565b5f60208083525f845461341a81612c63565b806020870152604060018084165f811461343b576001811461345757613484565b60ff19851660408a0152604084151560051b8a01019550613484565b895f5260205f205f5b8581101561347b5781548b8201860152908301908801613460565b8a016040019650505b509398975050505050505050565b5f805f606084860312156134a4575f80fd5b8351925060208401516134b6816129f4565b60408501519092506134c7816129f4565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134f2575f80fd5b82516001600160401b0380821115613508575f80fd5b908401906060828703121561351b575f80fd5b613523612cbd565b82518152602083015161353581612a5a565b602082015260408301518281111561354b575f80fd5b61355788828601612d5d565b60408301525093506129d2915050602084016133d8565b80820180821115610d1457610d14613060565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135dc5784516001600160a01b031682529383019360019290920191908301906135b3565b509695505050505050565b60208152815160208201525f602083015160e0604084015261360d610100840182612af5565b90506040840151601f198085840301606086015261362b8383612af5565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261365b8383613581565b925060a08601519150808584030160c0860152506136798282613581565b91505060c0840151610c2860e08501826001600160401b03169052565b5f80604083850312156136a7575f80fd5b8251915060208301516001600160401b038111156136c3575f80fd5b6136cf85828601612d5d565b9150509250929050565b81810381811115610d1457610d14613060565b6001600160401b038281168282160390808211156115e8576115e8613060565b5f6001600160401b038083168181036130ac576130ac613060565b5f60208284031215613737575f80fd5b813560ff81168114612bf1575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a2646970667358221220900d036a7a05e5fb37337d2262013b02033c0a1714df827944de4ba50bc8aeb564736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. @@ -389,6 +389,37 @@ func (_PoAValidatorManager *PoAValidatorManagerCallerSession) MAXIMUMREGISTRATIO return _PoAValidatorManager.Contract.MAXIMUMREGISTRATIONEXPIRYLENGTH(&_PoAValidatorManager.CallOpts) } +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_PoAValidatorManager *PoAValidatorManagerCaller) NODEIDLENGTH(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _PoAValidatorManager.contract.Call(opts, &out, "NODE_ID_LENGTH") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_PoAValidatorManager *PoAValidatorManagerSession) NODEIDLENGTH() (uint32, error) { + return _PoAValidatorManager.Contract.NODEIDLENGTH(&_PoAValidatorManager.CallOpts) +} + +// NODEIDLENGTH is a free data retrieval call binding the contract method 0x63e2ca97. +// +// Solidity: function NODE_ID_LENGTH() view returns(uint32) +func (_PoAValidatorManager *PoAValidatorManagerCallerSession) NODEIDLENGTH() (uint32, error) { + return _PoAValidatorManager.Contract.NODEIDLENGTH(&_PoAValidatorManager.CallOpts) +} + // PCHAINBLOCKCHAINID is a free data retrieval call binding the contract method 0x732214f8. // // Solidity: function P_CHAIN_BLOCKCHAIN_ID() view returns(bytes32) @@ -938,14 +969,13 @@ func (it *PoAValidatorManagerCompletedValidatorRegistrationIterator) Close() err // PoAValidatorManagerCompletedValidatorRegistration represents a CompletedValidatorRegistration event raised by the PoAValidatorManager contract. type PoAValidatorManagerCompletedValidatorRegistration struct { ValidationID [32]byte - NodeID []byte Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// FilterCompletedValidatorRegistration is a free log retrieval operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterCompletedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerCompletedValidatorRegistrationIterator, error) { var validationIDRule []interface{} @@ -960,9 +990,9 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterCompletedValidato return &PoAValidatorManagerCompletedValidatorRegistrationIterator{contract: _PoAValidatorManager.contract, event: "CompletedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// WatchCompletedValidatorRegistration is a free log subscription operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchCompletedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerCompletedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { var validationIDRule []interface{} @@ -1002,9 +1032,9 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchCompletedValidator }), nil } -// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x77db78281b26839241ace5413ded40b79d347f4862aadef5b975516b9111db62. +// ParseCompletedValidatorRegistration is a log parse operation binding the contract event 0x967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06. // -// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event CompletedValidatorRegistration(bytes32 indexed validationID, uint64 weight) func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseCompletedValidatorRegistration(log types.Log) (*PoAValidatorManagerCompletedValidatorRegistration, error) { event := new(PoAValidatorManagerCompletedValidatorRegistration) if err := _PoAValidatorManager.contract.UnpackLog(event, "CompletedValidatorRegistration", log); err != nil { @@ -1508,41 +1538,49 @@ func (it *PoAValidatorManagerInitiatedValidatorRegistrationIterator) Close() err // PoAValidatorManagerInitiatedValidatorRegistration represents a InitiatedValidatorRegistration event raised by the PoAValidatorManager contract. type PoAValidatorManagerInitiatedValidatorRegistration struct { ValidationID [32]byte - NodeID []byte + NodeID [20]byte RegistrationMessageID [32]byte RegistrationExpiry uint64 Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// FilterInitiatedValidatorRegistration is a free log retrieval operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerInitiatedValidatorRegistrationIterator, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterInitiatedValidatorRegistration(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*PoAValidatorManagerInitiatedValidatorRegistrationIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } return &PoAValidatorManagerInitiatedValidatorRegistrationIterator{contract: _PoAValidatorManager.contract, event: "InitiatedValidatorRegistration", logs: logs, sub: sub}, nil } -// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// WatchInitiatedValidatorRegistration is a free log subscription operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitiatedValidatorRegistration, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitiatedValidatorRegistration(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerInitiatedValidatorRegistration, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "InitiatedValidatorRegistration", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -1574,9 +1612,9 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchInitiatedValidator }), nil } -// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x6444121f9363bfb7959b7aeb4e0770f929069e868013c3d1d807647d6ab9adaf. +// ParseInitiatedValidatorRegistration is a log parse operation binding the contract event 0x5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d. // -// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) +// Solidity: event InitiatedValidatorRegistration(bytes32 indexed validationID, bytes20 indexed nodeID, bytes32 registrationMessageID, uint64 registrationExpiry, uint64 weight) func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseInitiatedValidatorRegistration(log types.Log) (*PoAValidatorManagerInitiatedValidatorRegistration, error) { event := new(PoAValidatorManagerInitiatedValidatorRegistration) if err := _PoAValidatorManager.contract.UnpackLog(event, "InitiatedValidatorRegistration", log); err != nil { @@ -2103,39 +2141,47 @@ func (it *PoAValidatorManagerRegisteredInitialValidatorIterator) Close() error { // PoAValidatorManagerRegisteredInitialValidator represents a RegisteredInitialValidator event raised by the PoAValidatorManager contract. type PoAValidatorManagerRegisteredInitialValidator struct { ValidationID [32]byte - NodeID []byte + NodeID [20]byte Weight uint64 Raw types.Log // Blockchain specific contextual infos } -// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// FilterRegisteredInitialValidator is a free log retrieval operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte) (*PoAValidatorManagerRegisteredInitialValidatorIterator, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) FilterRegisteredInitialValidator(opts *bind.FilterOpts, validationID [][32]byte, nodeID [][20]byte) (*PoAValidatorManagerRegisteredInitialValidatorIterator, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule) + logs, sub, err := _PoAValidatorManager.contract.FilterLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } return &PoAValidatorManagerRegisteredInitialValidatorIterator{contract: _PoAValidatorManager.contract, event: "RegisteredInitialValidator", logs: logs, sub: sub}, nil } -// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// WatchRegisteredInitialValidator is a free log subscription operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) -func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerRegisteredInitialValidator, validationID [][32]byte) (event.Subscription, error) { +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) +func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchRegisteredInitialValidator(opts *bind.WatchOpts, sink chan<- *PoAValidatorManagerRegisteredInitialValidator, validationID [][32]byte, nodeID [][20]byte) (event.Subscription, error) { var validationIDRule []interface{} for _, validationIDItem := range validationID { validationIDRule = append(validationIDRule, validationIDItem) } + var nodeIDRule []interface{} + for _, nodeIDItem := range nodeID { + nodeIDRule = append(nodeIDRule, nodeIDItem) + } - logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule) + logs, sub, err := _PoAValidatorManager.contract.WatchLogs(opts, "RegisteredInitialValidator", validationIDRule, nodeIDRule) if err != nil { return nil, err } @@ -2167,9 +2213,9 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) WatchRegisteredInitialV }), nil } -// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0xbfde2b10dd8e49db1d84164b7468fa64c5c67a02b148fee0473a9b71b9b981f2. +// ParseRegisteredInitialValidator is a log parse operation binding the contract event 0x9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d7. // -// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes nodeID, uint64 weight) +// Solidity: event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight) func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseRegisteredInitialValidator(log types.Log) (*PoAValidatorManagerRegisteredInitialValidator, error) { event := new(PoAValidatorManagerRegisteredInitialValidator) if err := _PoAValidatorManager.contract.UnpackLog(event, "RegisteredInitialValidator", log); err != nil { @@ -2182,7 +2228,7 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseRegisteredInitialV // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea264697066735822122035799fac4e11be2fcb3cdba37f7a8a37c8c59a5adeda1ec64b9806d0974aec9564736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220d0480ce8a92db2f68f39def88a3ded31f768999147bdb5eeb25933715298f87d64736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go index 854ece5ab..e693ae1fb 100644 --- a/tests/utils/validator_manager.go +++ b/tests/utils/validator_manager.go @@ -331,7 +331,7 @@ func InitializeValidatorSet( manager.ParseRegisteredInitialValidator, ) Expect(err).Should(BeNil()) - Expect(initialValidatorCreatedEvent.NodeID).Should(Equal(nodes[0].NodeID.Bytes())) + Expect(ids.NodeID(initialValidatorCreatedEvent.NodeID)).Should(Equal(nodes[0].NodeID)) var validationIDs []ids.ID for i := range nodes { validationIDs = append(validationIDs, l1Info.SubnetID.Append(uint32(i))) @@ -404,7 +404,7 @@ func InitializeNativeValidatorRegistration( acp99Manager.ParseInitiatedValidatorRegistration, ) Expect(err).Should(BeNil()) - Expect(registrationInitiatedEvent.NodeID).Should(Equal(node.NodeID.Bytes())) + Expect(ids.NodeID(registrationInitiatedEvent.NodeID)).Should(Equal(node.NodeID)) return receipt, ids.ID(registrationInitiatedEvent.ValidationID) } @@ -451,7 +451,7 @@ func InitializeERC20ValidatorRegistration( acp99Manager.ParseInitiatedValidatorRegistration, ) Expect(err).Should(BeNil()) - Expect(registrationInitiatedEvent.NodeID).Should(Equal(node.NodeID.Bytes())) + Expect(ids.NodeID(registrationInitiatedEvent.NodeID)).Should(Equal(node.NodeID)) return receipt, ids.ID(registrationInitiatedEvent.ValidationID) } @@ -485,7 +485,7 @@ func InitializePoAValidatorRegistration( acp99Manager.ParseInitiatedValidatorRegistration, ) Expect(err).Should(BeNil()) - Expect(registrationInitiatedEvent.NodeID).Should(Equal(node.NodeID.Bytes())) + Expect(ids.NodeID(registrationInitiatedEvent.NodeID)).Should(Equal(node.NodeID)) return receipt, ids.ID(registrationInitiatedEvent.ValidationID) } From cc3956bf11bf44137133ebe13c108015f8e77d92 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Fri, 24 Jan 2025 17:11:14 -0600 Subject: [PATCH 28/29] nits --- .../ERC20TokenStakingManager/ERC20TokenStakingManager.go | 4 ++-- .../NativeTokenStakingManager/NativeTokenStakingManager.go | 4 ++-- .../PoAValidatorManager/PoAValidatorManager.go | 4 ++-- contracts/validator-manager/ACP99Manager.sol | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index ee172fd62..749e285cd 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615e8e380380615e8e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d418061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061026b575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f141461056b578063d5f20ff61461059b578063df93d8de146105bb578063e4a63c40146105c5578063fb8b11dd146105d9578063fd7ac5e7146105ec575f80fd5b8063ba3a4b971461050e578063bb0b193814610521578063bc5fbfec14610529578063bee0a03f14610550578063c974d1b614610563575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104a05780639e478eea146104b3578063a3a65e48146104c6578063a9778a7a1461031a578063afb98096146104d9578063b771b3bc14610500575f80fd5b80638280a25a1461044c5780638ef34c981461045457806393e24598146104675780639681d9401461047a5780639ae064471461048d575f80fd5b80635dc1f535116101e257806363e2ca97116101a757806363e2ca9714610398578063732214f8146103db57806376f78621146103e2578063785e9e86146103f55780637d8d2f771461042657806380dd672f14610439575f80fd5b80635dc1f5351461037d5780635dd6a6cb1461038557806360305d621461039857806360ad7784146103b557806362065856146103c8575f80fd5b806325e1c7761161023357806325e1c776146102dc5780632e2194d8146102ef57806335455ded1461031a57806337b9be8f146103365780633a1cfff6146103495780634bee00401461035c575f80fd5b80630118acc41461026f5780630322ed9814610284578063151d30d1146102975780631ec44724146102b657806320d91b7a146102c9575b5f80fd5b61028261027d366004614d5b565b6105ff565b005b610282610292366004614d96565b610610565b61029f600a81565b60405160ff90911681526020015b60405180910390f35b6102826102c4366004614d5b565b6108a3565b6102826102d7366004614dad565b6108af565b6102826102ea366004614dfb565b610e63565b6103026102fd366004614d96565b610ed7565b6040516001600160401b0390911681526020016102ad565b61032361271081565b60405161ffff90911681526020016102ad565b610282610344366004614e30565b610f2b565b610282610357366004614d5b565b610f3e565b61036f61036a366004614ea3565b610f4a565b6040519081526020016102ad565b61036f610f7f565b610282610393366004614e30565b610f8e565b6103a0601481565b60405163ffffffff90911681526020016102ad565b6102826103c3366004614dfb565b610f9a565b61036f6103d6366004614f0a565b6111ed565b61036f5f81565b6102826103f0366004614d5b565b61120d565b5f80516020615ccc833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102ad565b610282610434366004614e30565b611219565b610282610447366004614dfb565b611225565b61029f603081565b610282610462366004614f25565b611426565b610282610475366004614d96565b6114d7565b61036f610488366004614f53565b61156b565b61028261049b366004614e30565b611644565b61036f6104ae366004614f6c565b611650565b6102826104c1366004614f8c565b61167c565b61036f6104d4366004614f53565b61175b565b61036f7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61040e6005600160991b0181565b61028261051c366004614d96565b61194a565b610302611ba3565b61036f7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b61028261055e366004614d96565b611bc5565b61029f601481565b61057e610579366004614f53565b611ce1565b604080519283526001600160401b039091166020830152016102ad565b6105ae6105a9366004614d96565b611e64565b6040516102ad9190615034565b6103026202a30081565b61036f5f80516020615ccc83398151915281565b6102826105e7366004614f25565b611fb3565b61036f6105fa3660046150ea565b61204a565b61060b8383835f612082565b505050565b5f6106196120ae565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561065357610653614fbf565b600581111561066457610664614fbf565b815260200160018201805461067890615155565b80601f01602080910402602001604051908101604052809291908181526020018280546106a490615155565b80156106ef5780601f106106c6576101008083540402835291602001916106ef565b820191905f5260205f20905b8154815290600101906020018083116106d257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561076757610767614fbf565b146107a3575f8381526005830160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561081a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108419190810190615296565b6040518263ffffffff1660e01b815260040161085d91906152c7565b6020604051808303815f875af1158015610879573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089d91906152d9565b50505050565b61089d8383835f6120d2565b5f6108b86120ae565b600781015490915060ff16156108e157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610924573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094891906152d9565b836020013514610971576040516372b0a7e760e11b81526020840135600482015260240161079a565b3061098260608501604086016152f0565b6001600160a01b0316146109c5576109a060608401604085016152f0565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161079a565b5f6109d3606085018561530b565b905090505f805b828163ffffffff161015610c59575f6109f6606088018861530b565b8363ffffffff16818110610a0c57610a0c615350565b9050602002810190610a1e9190615364565b610a27906153cf565b80516040519192505f916006880191610a3f9161544a565b90815260200160405180910390205414610a6f57805160405163a41f772f60e01b815261079a91906004016152c7565b805151601414610a95578051604051633e08a12560e11b815261079a91906004016152c7565b5f6002885f013584604051602001610ac492919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610ade9161544a565b602060405180830381855afa158015610af9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b1c91906152d9565b90508086600601835f0151604051610b34919061544a565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b74908261549f565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610be3908561556e565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610c3e91906001600160401b0391909116815260200190565b60405180910390a3505080610c529061558e565b90506109da565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c9c910460ff16836155b0565b6001600160401b03161015610ccf57604051633e1a785160e01b81526001600160401b038216600482015260240161079a565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610cf3876123ff565b604001516040518263ffffffff1660e01b8152600401610d1391906152c7565b602060405180830381865af4158015610d2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5291906152d9565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d8c9190615706565b5f60405180830381865af4158015610da6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dcd9190810190615296565b90505f600282604051610de0919061544a565b602060405180830381855afa158015610dfb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e1e91906152d9565b9050828114610e4a5760405163baaea89d60e01b8152600481018290526024810184905260440161079a565b5050506007909201805460ff1916600117905550505050565b610e6c82612515565b610e8c576040516330efa98b60e01b81526004810183905260240161079a565b5f610e9683611e64565b5190506002816005811115610ead57610ead614fbf565b14610ecd578060405163170cc93360e21b815260040161079a919061518d565b61089d838361253e565b5f80610ee16127e4565b60030154610eef908461579a565b9050801580610f0457506001600160401b0381115b15610f255760405163222d164360e21b81526004810184905260240161079a565b92915050565b610f37848484846120d2565b5050505050565b61089d8383835f612808565b5f610f53612a4f565b610f5f85858585612a86565b9050610f7760015f80516020615cec83398151915255565b949350505050565b5f610f886120ae565b54919050565b61089d84848484612cd3565b5f610fa36127e4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610fdc57610fdc614fbf565b6003811115610fed57610fed614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61106382611e64565b905060018351600381111561107a5761107a614fbf565b1461109b578251604051633b0d540d60e21b815261079a91906004016157b9565b6004815160058111156110b0576110b0614fbf565b036110c6576110be86612cff565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611166575f806110f387611ce1565b915091508184146111215760405163fee3144560e01b8152600481018390526024810185905260440161079a565b8460a001516001600160401b0316816001600160401b0316101561116357604051632e19bc2d60e11b81526001600160401b038216600482015260240161079a565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111f66127e4565b60030154610f25906001600160401b0384166157d3565b61060b8383835f612cd3565b610f3784848484612808565b61122d612a4f565b5f6112366127e4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561126f5761126f614fbf565b600381111561128057611280614fbf565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112f9576112f9614fbf565b1461131a578051604051633b0d540d60e21b815261079a91906004016157b9565b5f6113288260400151611e64565b905060046113398360400151611e64565b51600581111561134b5761134b614fbf565b1415801561137257508160c001516001600160401b031681608001516001600160401b0316105b15611400575f8061138286611ce1565b91509150818460400151146113bb5781846040015160405163fee3144560e01b815260040161079a929190918252602082015260400190565b806001600160401b03168460c001516001600160401b031611156113fd57604051632e19bc2d60e11b81526001600160401b038216600482015260240161079a565b50505b61140985612cff565b50505061142260015f80516020615cec83398151915255565b5050565b5f61142f6127e4565b90506001600160a01b0382166114635760405163caa903f960e01b81526001600160a01b038316600482015260240161079a565b5f8381526006820160205260409020546001600160a01b031633146114a957335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161079a565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6114e06127e4565b90505f6114ec83611e64565b519050600481600581111561150357611503614fbf565b14611523578060405163170cc93360e21b815260040161079a919061518d565b5f8381526006830160205260409020546001600160a01b031633146115485733611484565b5f83815260068301602052604090205461060b906001600160a01b031684612ed0565b5f611574612a4f565b5f61157d6127e4565b90505f8061158a85612efa565b9150915061159782612515565b6115a5575091506116299050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115e75750805b6004835160058111156115fc576115fc614fbf565b0361160b5761160b8185612ed0565b6116218261161c85604001516111ed565b6132af565b509193505050505b61163f60015f80516020615cec83398151915255565b919050565b61089d84848484612082565b5f611659612a4f565b6116648333846132d2565b9050610f2560015f80516020615cec83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806116c5575080546001600160401b03808416911610155b156116e35760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561170e8484613517565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f806117656120ae565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61178c876123ff565b604001516040518263ffffffff1660e01b81526004016117ac91906152c7565b6040805180830381865af41580156117c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ea91906157ea565b915091508061181057604051632d07135360e01b8152811515600482015260240161079a565b5f8281526004840160205260409020805461182a90615155565b90505f0361184e5760405163089938b360e11b81526004810183905260240161079a565b60015f838152600580860160205260409091205460ff169081111561187557611875614fbf565b146118a8575f8281526005840160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b5f82815260048401602052604081206118c091614ca7565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f6119536127e4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561198c5761198c614fbf565b600381111561199d5761199d614fbf565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a1657611a16614fbf565b14158015611a375750600381516003811115611a3457611a34614fbf565b14155b15611a58578051604051633b0d540d60e21b815261079a91906004016157b9565b5f611a668260400151611e64565b905080606001516001600160401b03165f03611a98576040516339b894f960e21b81526004810185905260240161079a565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b0693906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b479190810190615296565b6040518263ffffffff1660e01b8152600401611b6391906152c7565b6020604051808303815f875af1158015611b7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3791906152d9565b5f611bac6120ae565b60030154600160401b90046001600160401b0316919050565b5f611bce6120ae565b5f8381526004820160205260409020805491925090611bec90615155565b90505f03611c105760405163089938b360e11b81526004810183905260240161079a565b60015f838152600580840160205260409091205460ff1690811115611c3757611c37614fbf565b14611c6a575f8281526005820160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611ca1920161580d565b6020604051808303815f875af1158015611cbd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060b91906152d9565b5f805f611ced846123ff565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611d2d91906152c7565b606060405180830381865af4158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190615897565b9250925092505f611d7b6120ae565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611dcf57604051632e19bc2d60e11b81526001600160401b038416600482015260240161079a565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611e4f90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e6c614cde565b5f611e756120ae565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611eaf57611eaf614fbf565b6005811115611ec057611ec0614fbf565b8152602001600182018054611ed490615155565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0090615155565b8015611f4b5780601f10611f2257610100808354040283529160200191611f4b565b820191905f5260205f20905b815481529060010190602001808311611f2e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611fe55760405163caa903f960e01b81526001600160a01b038216600482015260240161079a565b5f611fee6127e4565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461201c5733611484565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806120546120ae565b905080600601848460405161206a9291906158d7565b90815260200160405180910390205491505092915050565b61208e848484846120d2565b61089d57604051631036cf9160e11b81526004810185905260240161079a565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f806120dc6127e4565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561211557612115614fbf565b600381111561212657612126614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61219c82611e64565b90506002835160038111156121b3576121b3614fbf565b146121d4578251604051633b0d540d60e21b815261079a91906004016157b9565b60208301516001600160a01b03163314612270575f8281526006850160205260409020546001600160a01b0316331461220d5733611484565b5f82815260068501602052604090205460c082015161223c91600160b01b90046001600160401b03169061556e565b6001600160401b03164210156122705760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b60028151600581111561228557612285614fbf565b036123a757600284015460808401516122a7916001600160401b03169061556e565b6001600160401b03164210156122db5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b87156122ed576122eb828861253e565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161232691849161232191906158e6565b613531565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561236984888c6136fb565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f779350505050565b6004815160058111156123bc576123bc614fbf565b036123e3576123cc83878b6136fb565b506123d689612cff565b6001945050505050610f77565b805160405163170cc93360e21b815261079a919060040161518d565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261248a9190810190615906565b91509150806124ac57604051636b2f19e960e01b815260040160405180910390fd5b8151156124d2578151604051636ba589a560e01b8152600481019190915260240161079a565b60208201516001600160a01b03161561250e576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b5092915050565b5f8061251f6127e4565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612589573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125b09190810190615906565b91509150806125d257604051636b2f19e960e01b815260040160405180910390fd5b5f6125db6127e4565b6005810154845191925014612609578251604051636ba589a560e01b8152600481019190915260240161079a565b60208301516001600160a01b031615612645576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b60208301516001600160a01b031615612681576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126be91906152c7565b6040805180830381865af41580156126d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126fc9190615996565b9150915081881461272a5760405163fee3144560e01b8152600481018390526024810189905260440161079a565b5f8881526006840160205260409020600101546001600160401b0390811690821611156127bb575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26127d9565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128126127e4565b905061281d866138e9565b5f61282787611e64565b905061283287612515565b61284157600192505050610f77565b5f8781526006830160205260409020546001600160a01b031633146128665733611484565b5f87815260068301602052604090205460c082015161289591600160b01b90046001600160401b03169061556e565b6001600160401b03168160e001516001600160401b031610156128dc5760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161079a565b5f86156128f4576128ed888761253e565b9050612912565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612937906111ed565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa1580156129a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c591906152d9565b90506001600160a01b0386166129f1575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a109084906159b9565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cec833981519152805460011901612a8057604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a906127e4565b600281015490915061ffff600160401b90910481169086161080612ab9575061271061ffff8616115b15612add57604051635f12e6c360e11b815261ffff8616600482015260240161079a565b60028101546001600160401b039081169085161015612b19576040516202a06d60e11b81526001600160401b038516600482015260240161079a565b8054831080612b2b5750806001015483115b15612b4c5760405163222d164360e21b81526004810184905260240161079a565b5f612b5684613bd4565b90505f612b6282610ed7565b90505f612c29612b728a806159cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bb39250505060208c018c6159cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bf79250505060608d0160408e01614f0a565b612c0460608e018e615a0e565b612c0d90615a22565b612c1a60808f018f615a0e565b612c2390615a22565b87613bf7565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cec83398151915255565b612cdf84848484612808565b61089d57604051635bff683f60e11b81526004810185905260240161079a565b5f612d086127e4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612d4157612d41614fbf565b6003811115612d5257612d52614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612dc6613fe1565b8260800151612dd5919061556e565b6001600160401b0316421015612e095760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e64575060208201515b5f80612e71838886613ffc565b91509150612e8a856020015161161c87606001516111ed565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612ed96127e4565b5f838152600a820160205260408120805491905590915061089d84826140a9565b5f612f03614cde565b5f612f0c6120ae565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612f33886123ff565b604001516040518263ffffffff1660e01b8152600401612f5391906152c7565b6040805180830381865af4158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906157ea565b915091508015612fb857604051632d07135360e01b8152811515600482015260240161079a565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612ff057612ff0614fbf565b600581111561300157613001614fbf565b815260200160018201805461301590615155565b80601f016020809104026020016040519081016040528092919081815260200182805461304190615155565b801561308c5780601f106130635761010080835404028352916020019161308c565b820191905f5260205f20905b81548152906001019060200180831161306f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561310457613104614fbf565b14158015613125575060018151600581111561312257613122614fbf565b14155b1561314657805160405163170cc93360e21b815261079a919060040161518d565b60038151600581111561315b5761315b614fbf565b03613169576004815261316e565b600581525b836006018160200151604051613184919061544a565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156131c7576131c7614fbf565b0217905550602082015160018201906131e0908261549f565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615ccc83398151915254611422906001600160a01b0316838361411f565b5f806132dc6127e4565b90505f6132eb6102fd85613bd4565b90505f6132f787611e64565b905061330287612515565b613322576040516330efa98b60e01b81526004810188905260240161079a565b60028151600581111561333757613337614fbf565b1461335857805160405163170cc93360e21b815261079a919060040161518d565b5f828260a00151613369919061556e565b905083600201600a9054906101000a90046001600160401b0316826040015161339291906155b0565b6001600160401b0316816001600160401b031611156133cf57604051636d51fe0560e11b81526001600160401b038216600482015260240161079a565b5f806133db8a84613531565b915091505f8a8360405160200161340992919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61351f61417e565b613528826141c9565b61142281614246565b5f805f61353c6120ae565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b031661356c85826142ae565b5f6135768761451b565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561361a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136419190810190615296565b6040518263ffffffff1660e01b815260040161365d91906152c7565b6020604051808303815f875af1158015613679573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061369d91906152d9565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806137056127e4565b90505f6137158660400151611e64565b90505f60038251600581111561372d5761372d614fbf565b148061374b575060048251600581111561374957613749614fbf565b145b1561375b575060e0810151613798565b60028251600581111561377057613770614fbf565b0361377c575042613798565b815160405163170cc93360e21b815261079a919060040161518d565b86608001516001600160401b0316816001600160401b0316116137c0575f9350505050613510565b600483015460608801515f916001600160a01b031690634f22429f906137e5906111ed565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613866573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061388a91906152d9565b90506001600160a01b0387166138a257876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f6138f26120ae565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561392c5761392c614fbf565b600581111561393d5761393d614fbf565b815260200160018201805461395190615155565b80601f016020809104026020016040519081016040528092919081815260200182805461397d90615155565b80156139c85780601f1061399f576101008083540402835291602001916139c8565b820191905f5260205f20905b8154815290600101906020018083116139ab57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613a4057613a40614fbf565b14613a73575f8381526005830160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613ab857613ab8614fbf565b021790555060208201516001820190613ad1908261549f565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b718482613531565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613bc6939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610f25825f80516020615ccc833981519152546001600160a01b031690614584565b5f613c006120ae565b6007015460ff16613c2457604051637fab81e560e01b815260040160405180910390fd5b5f613c2d6120ae565b905042866001600160401b0316111580613c5c5750613c4f6202a300426159b9565b866001600160401b031610155b15613c8557604051635879da1360e11b81526001600160401b038716600482015260240161079a565b60038101546001600160401b0390613ca890600160401b900482168583166159b9565b1115613cd257604051633e1a785160e01b81526001600160401b038416600482015260240161079a565b613cdb85614590565b613ce484614590565b8651603014613d0b5786516040516326475b2f60e11b815260040161079a91815260200190565b8751601414613d2f5787604051633e08a12560e11b815260040161079a91906152c7565b5f801b8160060189604051613d44919061544a565b90815260200160405180910390205414613d73578760405163a41f772f60e01b815260040161079a91906152c7565b613d7d835f6142ae565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613dfd9190615b4f565b5f60405180830381865af4158015613e17573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e3e9190810190615c06565b5f82815260048601602052604090209193509150613e5c828261549f565b5081836006018b604051613e70919061544a565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613eac9085906004016152c7565b6020604051808303815f875af1158015613ec8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eec91906152d9565b5f8481526005860160205260409020805460ff19166001908117825591925001613f168c8261549f565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b0319169055613f6d8b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a604051613fca939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b5f613fea6120ae565b600101546001600160401b0316919050565b5f805f6140076127e4565b5f8681526008820160205260408120805490829055919250908190801561409b575f8781526006850160205260409020546127109061405190600160a01b900461ffff16836157d3565b61405b919061579a565b91508184600a015f8981526020019081526020015f205f82825461407f91906159b9565b9091555061408f90508282615c49565b925061409b89846140a9565b509097909650945050505050565b5f5f80516020615ccc83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614104575f80fd5b505af1158015614116573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060b91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506146af565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166141c757604051631afcd79f60e31b815260040160405180910390fd5b565b6141d161417e565b6141da81614710565b6141e2614729565b614243606082013560808301356141ff60c0850160a08601614f0a565b61420f60e0860160c08701615c5c565b614220610100870160e08801615c75565b61010087013561423861014089016101208a016152f0565b886101400135614739565b50565b61424e61417e565b5f80516020615ccc8339815191526001600160a01b03821661428e57604051637330680360e01b81526001600160a01b038316600482015260240161079a565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6142b76120ae565b90505f826001600160401b0316846001600160401b031611156142e5576142de83856158e6565b90506142f2565b6142ef84846158e6565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061435f57506001840154815161435b916001600160401b0316906159b9565b8210155b15614387576001600160401b03808416606083015282825260408201511660208201526143a6565b8281606001818151614399919061556e565b6001600160401b03169052505b60608101516143b69060646155b0565b602082015160018601546001600160401b0392909216916143e19190600160401b900460ff166155b0565b6001600160401b0316101561441a57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161079a565b858160400181815161442c919061556e565b6001600160401b031690525060408101805186919061444c9083906158e6565b6001600160401b03169052506001840154604082015160649161447a91600160401b90910460ff16906155b0565b6001600160401b031610156144b3576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161079a565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f806145256120ae565b5f848152600582016020526040902060020180549192509060089061455990600160401b90046001600160401b0316615c95565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6135108333846148fb565b805163ffffffff161580156145a9575060208101515115155b156145dd57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161079a565b602081015151815163ffffffff16111561462057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161079a565b60015b816020015151811015611422576020820151614640600183615c49565b8151811061465057614650615350565b60200260200101516001600160a01b03168260200151828151811061467757614677615350565b60200260200101516001600160a01b031610156146a757604051630dbc8d5f60e31b815260040160405180910390fd5b600101614623565b5f6146c36001600160a01b03841683614a5e565b905080515f141580156146e75750808060200190518101906146e59190615cb0565b155b1561060b57604051635274afe760e01b81526001600160a01b038416600482015260240161079a565b61471861417e565b614720614a6b565b61424381614a73565b61473161417e565b6141c7614b57565b61474161417e565b5f61474a6127e4565b905061ffff86161580614762575061271061ffff8716115b1561478657604051635f12e6c360e11b815261ffff8716600482015260240161079a565b878911156147aa5760405163222d164360e21b8152600481018a905260240161079a565b60ff851615806147bd5750600a60ff8616115b156147e05760405163170db35960e31b815260ff8616600482015260240161079a565b6147e8613fe1565b6001600160401b0316876001600160401b03161015614824576040516202a06d60e11b81526001600160401b038816600482015260240161079a565b835f036148445760405163a733007160e01b815260040160405180910390fd5b8161486557604051632f6bd1db60e01b81526004810183905260240161079a565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614941573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061496591906152d9565b905061497c6001600160a01b038616853086614b5f565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156149c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149e491906152d9565b9050818111614a4a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161079a565b614a548282615c49565b9695505050505050565b606061351083835f614b98565b6141c761417e565b614a7b61417e565b5f614a846120ae565b8235815590506014614a9c6060840160408501615c75565b60ff161180614abb5750614ab66060830160408401615c75565b60ff16155b15614aef57614ad06060830160408401615c75565b604051634a59bbff60e11b815260ff909116600482015260240161079a565b614aff6060830160408401615c75565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b306040830160208401614f0a565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612cc061417e565b6040516001600160a01b03848116602483015283811660448301526064820183905261089d9186918216906323b872dd9060840161414c565b606081471015614bbd5760405163cd78605960e01b815230600482015260240161079a565b5f80856001600160a01b03168486604051614bd8919061544a565b5f6040518083038185875af1925050503d805f8114614c12576040519150601f19603f3d011682016040523d82523d5f602084013e614c17565b606091505b5091509150614a54868383606082614c3757614c3282614c7e565b613510565b8151158015614c4e57506001600160a01b0384163b155b15614c7757604051639996b31560e01b81526001600160a01b038516600482015260240161079a565b5080613510565b805115614c8e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614cb390615155565b5f825580601f10614cc2575050565b601f0160209004905f5260205f20908101906142439190614d23565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614d37575f8155600101614d24565b5090565b8015158114614243575f80fd5b803563ffffffff8116811461163f575f80fd5b5f805f60608486031215614d6d575f80fd5b833592506020840135614d7f81614d3b565b9150614d8d60408501614d48565b90509250925092565b5f60208284031215614da6575f80fd5b5035919050565b5f8060408385031215614dbe575f80fd5b82356001600160401b03811115614dd3575f80fd5b830160808186031215614de4575f80fd5b9150614df260208401614d48565b90509250929050565b5f8060408385031215614e0c575f80fd5b82359150614df260208401614d48565b6001600160a01b0381168114614243575f80fd5b5f805f8060808587031215614e43575f80fd5b843593506020850135614e5581614d3b565b9250614e6360408601614d48565b91506060850135614e7381614e1c565b939692955090935050565b803561ffff8116811461163f575f80fd5b6001600160401b0381168114614243575f80fd5b5f805f8060808587031215614eb6575f80fd5b84356001600160401b03811115614ecb575f80fd5b850160a08188031215614edc575f80fd5b9350614eea60208601614e7e565b92506040850135614efa81614e8f565b9396929550929360600135925050565b5f60208284031215614f1a575f80fd5b813561351081614e8f565b5f8060408385031215614f36575f80fd5b823591506020830135614f4881614e1c565b809150509250929050565b5f60208284031215614f63575f80fd5b61351082614d48565b5f8060408385031215614f7d575f80fd5b50508035926020909101359150565b5f80828403610180811215614f9f575f80fd5b61016080821215614fae575f80fd5b8493508301359050614f4881614e1c565b634e487b7160e01b5f52602160045260245ffd5b60068110614fe357614fe3614fbf565b9052565b5f5b83811015615001578181015183820152602001614fe9565b50505f910152565b5f8151808452615020816020860160208601614fe7565b601f01601f19169290920160200192915050565b60208152615046602082018351614fd3565b5f6020830151610100806040850152615063610120850183615009565b915060408501516001600160401b038082166060870152806060880151166080870152505060808501516150a260a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f80602083850312156150fb575f80fd5b82356001600160401b0380821115615111575f80fd5b818501915085601f830112615124575f80fd5b813581811115615132575f80fd5b866020828501011115615143575f80fd5b60209290920196919550909350505050565b600181811c9082168061516957607f821691505b60208210810361518757634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610f258284614fd3565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151d1576151d161519b565b60405290565b604080519081016001600160401b03811182821017156151d1576151d161519b565b604051601f8201601f191681016001600160401b03811182821017156152215761522161519b565b604052919050565b5f6001600160401b038211156152415761524161519b565b50601f01601f191660200190565b5f82601f83011261525e575f80fd5b815161527161526c82615229565b6151f9565b818152846020838601011115615285575f80fd5b610f77826020830160208701614fe7565b5f602082840312156152a6575f80fd5b81516001600160401b038111156152bb575f80fd5b610f778482850161524f565b602081525f6135106020830184615009565b5f602082840312156152e9575f80fd5b5051919050565b5f60208284031215615300575f80fd5b813561351081614e1c565b5f808335601e19843603018112615320575f80fd5b8301803591506001600160401b03821115615339575f80fd5b6020019150600581901b36038213156136f4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615378575f80fd5b9190910192915050565b5f82601f830112615391575f80fd5b813561539f61526c82615229565b8181528460208386010111156153b3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153df575f80fd5b6153e76151af565b82356001600160401b03808211156153fd575f80fd5b61540936838701615382565b8352602085013591508082111561541e575f80fd5b5061542b36828601615382565b602083015250604083013561543f81614e8f565b604082015292915050565b5f8251615378818460208701614fe7565b601f82111561060b57805f5260205f20601f840160051c810160208510156154805750805b601f840160051c820191505b81811015610f37575f815560010161548c565b81516001600160401b038111156154b8576154b861519b565b6154cc816154c68454615155565b8461545b565b602080601f8311600181146154ff575f84156154e85750858301515b5f19600386901b1c1916600185901b1785556110be565b5f85815260208120601f198616915b8281101561552d5788860151825594840194600190910190840161550e565b508582101561554a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561250e5761250e61555a565b5f63ffffffff8083168181036155a6576155a661555a565b6001019392505050565b6001600160401b038181168382160280821691908281146155d3576155d361555a565b505092915050565b5f808335601e198436030181126155f0575f80fd5b83016020810192503590506001600160401b0381111561560e575f80fd5b8036038213156136f4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156f957848303601f19018952813536889003605e19018112615680575f80fd5b8701606061568e82806155db565b82875261569e838801828461561c565b925050506156ae868301836155db565b868303888801526156c083828461561c565b9250505060408083013592506156d583614e8f565b6001600160401b03929092169490910193909352978301979083019060010161565b565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561572a81614e1c565b6001600160a01b031660608381019190915283013536849003601e19018112615751575f80fd5b83016020810190356001600160401b0381111561576c575f80fd5b8060051b360382131561577d575f80fd5b60808085015261579160a085018284615644565b95945050505050565b5f826157b457634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157cd576157cd614fbf565b91905290565b8082028115828204841417610f2557610f2561555a565b5f80604083850312156157fb575f80fd5b825191506020830151614f4881614d3b565b5f60208083525f845461581f81615155565b806020870152604060018084165f8114615840576001811461585c57615889565b60ff19851660408a0152604084151560051b8a01019550615889565b895f5260205f205f5b858110156158805781548b8201860152908301908801615865565b8a016040019650505b509398975050505050505050565b5f805f606084860312156158a9575f80fd5b8351925060208401516158bb81614e8f565b60408501519092506158cc81614e8f565b809150509250925092565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561250e5761250e61555a565b5f8060408385031215615917575f80fd5b82516001600160401b038082111561592d575f80fd5b9084019060608287031215615940575f80fd5b6159486151af565b82518152602083015161595a81614e1c565b6020820152604083015182811115615970575f80fd5b61597c8882860161524f565b6040830152508094505050506020830151614f4881614d3b565b5f80604083850312156159a7575f80fd5b825191506020830151614f4881614e8f565b80820180821115610f2557610f2561555a565b5f808335601e198436030181126159e1575f80fd5b8301803591506001600160401b038211156159fa575f80fd5b6020019150368190038213156136f4575f80fd5b5f8235603e19833603018112615378575f80fd5b5f60408236031215615a32575f80fd5b615a3a6151d7565b615a4383614d48565b81526020808401356001600160401b0380821115615a5f575f80fd5b9085019036601f830112615a71575f80fd5b813581811115615a8357615a8361519b565b8060051b9150615a948483016151f9565b8181529183018401918481019036841115615aad575f80fd5b938501935b83851015615ad75784359250615ac783614e1c565b8282529385019390850190615ab2565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b445784516001600160a01b03168252938301936001929092019190830190615b1b565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b75610100840182615009565b90506040840151601f1980858403016060860152615b938383615009565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615bc38383615ae9565b925060a08601519150808584030160c086015250615be18282615ae9565b91505060c0840151615bfe60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c17575f80fd5b8251915060208301516001600160401b03811115615c33575f80fd5b615c3f8582860161524f565b9150509250929050565b81810381811115610f2557610f2561555a565b5f60208284031215615c6c575f80fd5b61351082614e7e565b5f60208284031215615c85575f80fd5b813560ff81168114613510575f80fd5b5f6001600160401b038083168181036155a6576155a661555a565b5f60208284031215615cc0575f80fd5b815161351081614d3b56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220cfc3d93c6b7013d16bc111b26960ff50104ca9fda8ed586caad50be02a60534864736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615e8e380380615e8e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d418061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061026b575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f141461056b578063d5f20ff61461059b578063df93d8de146105bb578063e4a63c40146105c5578063fb8b11dd146105d9578063fd7ac5e7146105ec575f80fd5b8063ba3a4b971461050e578063bb0b193814610521578063bc5fbfec14610529578063bee0a03f14610550578063c974d1b614610563575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104a05780639e478eea146104b3578063a3a65e48146104c6578063a9778a7a1461031a578063afb98096146104d9578063b771b3bc14610500575f80fd5b80638280a25a1461044c5780638ef34c981461045457806393e24598146104675780639681d9401461047a5780639ae064471461048d575f80fd5b80635dc1f535116101e257806363e2ca97116101a757806363e2ca9714610398578063732214f8146103db57806376f78621146103e2578063785e9e86146103f55780637d8d2f771461042657806380dd672f14610439575f80fd5b80635dc1f5351461037d5780635dd6a6cb1461038557806360305d621461039857806360ad7784146103b557806362065856146103c8575f80fd5b806325e1c7761161023357806325e1c776146102dc5780632e2194d8146102ef57806335455ded1461031a57806337b9be8f146103365780633a1cfff6146103495780634bee00401461035c575f80fd5b80630118acc41461026f5780630322ed9814610284578063151d30d1146102975780631ec44724146102b657806320d91b7a146102c9575b5f80fd5b61028261027d366004614d5b565b6105ff565b005b610282610292366004614d96565b610610565b61029f600a81565b60405160ff90911681526020015b60405180910390f35b6102826102c4366004614d5b565b6108a3565b6102826102d7366004614dad565b6108af565b6102826102ea366004614dfb565b610e63565b6103026102fd366004614d96565b610ed7565b6040516001600160401b0390911681526020016102ad565b61032361271081565b60405161ffff90911681526020016102ad565b610282610344366004614e30565b610f2b565b610282610357366004614d5b565b610f3e565b61036f61036a366004614ea3565b610f4a565b6040519081526020016102ad565b61036f610f7f565b610282610393366004614e30565b610f8e565b6103a0601481565b60405163ffffffff90911681526020016102ad565b6102826103c3366004614dfb565b610f9a565b61036f6103d6366004614f0a565b6111ed565b61036f5f81565b6102826103f0366004614d5b565b61120d565b5f80516020615ccc833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102ad565b610282610434366004614e30565b611219565b610282610447366004614dfb565b611225565b61029f603081565b610282610462366004614f25565b611426565b610282610475366004614d96565b6114d7565b61036f610488366004614f53565b61156b565b61028261049b366004614e30565b611644565b61036f6104ae366004614f6c565b611650565b6102826104c1366004614f8c565b61167c565b61036f6104d4366004614f53565b61175b565b61036f7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61040e6005600160991b0181565b61028261051c366004614d96565b61194a565b610302611ba3565b61036f7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b61028261055e366004614d96565b611bc5565b61029f601481565b61057e610579366004614f53565b611ce1565b604080519283526001600160401b039091166020830152016102ad565b6105ae6105a9366004614d96565b611e64565b6040516102ad9190615034565b6103026202a30081565b61036f5f80516020615ccc83398151915281565b6102826105e7366004614f25565b611fb3565b61036f6105fa3660046150ea565b61204a565b61060b8383835f612082565b505050565b5f6106196120ae565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561065357610653614fbf565b600581111561066457610664614fbf565b815260200160018201805461067890615155565b80601f01602080910402602001604051908101604052809291908181526020018280546106a490615155565b80156106ef5780601f106106c6576101008083540402835291602001916106ef565b820191905f5260205f20905b8154815290600101906020018083116106d257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561076757610767614fbf565b146107a3575f8381526005830160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561081a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108419190810190615296565b6040518263ffffffff1660e01b815260040161085d91906152c7565b6020604051808303815f875af1158015610879573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089d91906152d9565b50505050565b61089d8383835f6120d2565b5f6108b86120ae565b600781015490915060ff16156108e157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610924573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094891906152d9565b836020013514610971576040516372b0a7e760e11b81526020840135600482015260240161079a565b3061098260608501604086016152f0565b6001600160a01b0316146109c5576109a060608401604085016152f0565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161079a565b5f6109d3606085018561530b565b905090505f805b828163ffffffff161015610c59575f6109f6606088018861530b565b8363ffffffff16818110610a0c57610a0c615350565b9050602002810190610a1e9190615364565b610a27906153cf565b80516040519192505f916006880191610a3f9161544a565b90815260200160405180910390205414610a6f57805160405163a41f772f60e01b815261079a91906004016152c7565b805151601414610a95578051604051633e08a12560e11b815261079a91906004016152c7565b5f6002885f013584604051602001610ac492919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610ade9161544a565b602060405180830381855afa158015610af9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b1c91906152d9565b90508086600601835f0151604051610b34919061544a565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b74908261549f565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610be3908561556e565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610c3e91906001600160401b0391909116815260200190565b60405180910390a3505080610c529061558e565b90506109da565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c9c910460ff16836155b0565b6001600160401b03161015610ccf57604051633e1a785160e01b81526001600160401b038216600482015260240161079a565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610cf3876123ff565b604001516040518263ffffffff1660e01b8152600401610d1391906152c7565b602060405180830381865af4158015610d2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5291906152d9565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d8c9190615706565b5f60405180830381865af4158015610da6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dcd9190810190615296565b90505f600282604051610de0919061544a565b602060405180830381855afa158015610dfb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e1e91906152d9565b9050828114610e4a5760405163baaea89d60e01b8152600481018290526024810184905260440161079a565b5050506007909201805460ff1916600117905550505050565b610e6c82612515565b610e8c576040516330efa98b60e01b81526004810183905260240161079a565b5f610e9683611e64565b5190506002816005811115610ead57610ead614fbf565b14610ecd578060405163170cc93360e21b815260040161079a919061518d565b61089d838361253e565b5f80610ee16127e4565b60030154610eef908461579a565b9050801580610f0457506001600160401b0381115b15610f255760405163222d164360e21b81526004810184905260240161079a565b92915050565b610f37848484846120d2565b5050505050565b61089d8383835f612808565b5f610f53612a4f565b610f5f85858585612a86565b9050610f7760015f80516020615cec83398151915255565b949350505050565b5f610f886120ae565b54919050565b61089d84848484612cd3565b5f610fa36127e4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610fdc57610fdc614fbf565b6003811115610fed57610fed614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61106382611e64565b905060018351600381111561107a5761107a614fbf565b1461109b578251604051633b0d540d60e21b815261079a91906004016157b9565b6004815160058111156110b0576110b0614fbf565b036110c6576110be86612cff565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611166575f806110f387611ce1565b915091508184146111215760405163fee3144560e01b8152600481018390526024810185905260440161079a565b8460a001516001600160401b0316816001600160401b0316101561116357604051632e19bc2d60e11b81526001600160401b038216600482015260240161079a565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111f66127e4565b60030154610f25906001600160401b0384166157d3565b61060b8383835f612cd3565b610f3784848484612808565b61122d612a4f565b5f6112366127e4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561126f5761126f614fbf565b600381111561128057611280614fbf565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112f9576112f9614fbf565b1461131a578051604051633b0d540d60e21b815261079a91906004016157b9565b5f6113288260400151611e64565b905060046113398360400151611e64565b51600581111561134b5761134b614fbf565b1415801561137257508160c001516001600160401b031681608001516001600160401b0316105b15611400575f8061138286611ce1565b91509150818460400151146113bb5781846040015160405163fee3144560e01b815260040161079a929190918252602082015260400190565b806001600160401b03168460c001516001600160401b031611156113fd57604051632e19bc2d60e11b81526001600160401b038216600482015260240161079a565b50505b61140985612cff565b50505061142260015f80516020615cec83398151915255565b5050565b5f61142f6127e4565b90506001600160a01b0382166114635760405163caa903f960e01b81526001600160a01b038316600482015260240161079a565b5f8381526006820160205260409020546001600160a01b031633146114a957335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161079a565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6114e06127e4565b90505f6114ec83611e64565b519050600481600581111561150357611503614fbf565b14611523578060405163170cc93360e21b815260040161079a919061518d565b5f8381526006830160205260409020546001600160a01b031633146115485733611484565b5f83815260068301602052604090205461060b906001600160a01b031684612ed0565b5f611574612a4f565b5f61157d6127e4565b90505f8061158a85612efa565b9150915061159782612515565b6115a5575091506116299050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115e75750805b6004835160058111156115fc576115fc614fbf565b0361160b5761160b8185612ed0565b6116218261161c85604001516111ed565b6132af565b509193505050505b61163f60015f80516020615cec83398151915255565b919050565b61089d84848484612082565b5f611659612a4f565b6116648333846132d2565b9050610f2560015f80516020615cec83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806116c5575080546001600160401b03808416911610155b156116e35760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561170e8484613517565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f806117656120ae565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61178c876123ff565b604001516040518263ffffffff1660e01b81526004016117ac91906152c7565b6040805180830381865af41580156117c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ea91906157ea565b915091508061181057604051632d07135360e01b8152811515600482015260240161079a565b5f8281526004840160205260409020805461182a90615155565b90505f0361184e5760405163089938b360e11b81526004810183905260240161079a565b60015f838152600580860160205260409091205460ff169081111561187557611875614fbf565b146118a8575f8281526005840160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b5f82815260048401602052604081206118c091614ca7565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f6119536127e4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561198c5761198c614fbf565b600381111561199d5761199d614fbf565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a1657611a16614fbf565b14158015611a375750600381516003811115611a3457611a34614fbf565b14155b15611a58578051604051633b0d540d60e21b815261079a91906004016157b9565b5f611a668260400151611e64565b905080606001516001600160401b03165f03611a98576040516339b894f960e21b81526004810185905260240161079a565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b0693906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b479190810190615296565b6040518263ffffffff1660e01b8152600401611b6391906152c7565b6020604051808303815f875af1158015611b7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3791906152d9565b5f611bac6120ae565b60030154600160401b90046001600160401b0316919050565b5f611bce6120ae565b5f8381526004820160205260409020805491925090611bec90615155565b90505f03611c105760405163089938b360e11b81526004810183905260240161079a565b60015f838152600580840160205260409091205460ff1690811115611c3757611c37614fbf565b14611c6a575f8281526005820160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611ca1920161580d565b6020604051808303815f875af1158015611cbd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060b91906152d9565b5f805f611ced846123ff565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611d2d91906152c7565b606060405180830381865af4158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190615897565b9250925092505f611d7b6120ae565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611dcf57604051632e19bc2d60e11b81526001600160401b038416600482015260240161079a565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611e4f90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e6c614cde565b5f611e756120ae565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611eaf57611eaf614fbf565b6005811115611ec057611ec0614fbf565b8152602001600182018054611ed490615155565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0090615155565b8015611f4b5780601f10611f2257610100808354040283529160200191611f4b565b820191905f5260205f20905b815481529060010190602001808311611f2e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611fe55760405163caa903f960e01b81526001600160a01b038216600482015260240161079a565b5f611fee6127e4565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461201c5733611484565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806120546120ae565b905080600601848460405161206a9291906158d7565b90815260200160405180910390205491505092915050565b61208e848484846120d2565b61089d57604051631036cf9160e11b81526004810185905260240161079a565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f806120dc6127e4565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561211557612115614fbf565b600381111561212657612126614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61219c82611e64565b90506002835160038111156121b3576121b3614fbf565b146121d4578251604051633b0d540d60e21b815261079a91906004016157b9565b60208301516001600160a01b03163314612270575f8281526006850160205260409020546001600160a01b0316331461220d5733611484565b5f82815260068501602052604090205460c082015161223c91600160b01b90046001600160401b03169061556e565b6001600160401b03164210156122705760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b60028151600581111561228557612285614fbf565b036123a757600284015460808401516122a7916001600160401b03169061556e565b6001600160401b03164210156122db5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b87156122ed576122eb828861253e565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161232691849161232191906158e6565b613531565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561236984888c6136fb565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f779350505050565b6004815160058111156123bc576123bc614fbf565b036123e3576123cc83878b6136fb565b506123d689612cff565b6001945050505050610f77565b805160405163170cc93360e21b815261079a919060040161518d565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261248a9190810190615906565b91509150806124ac57604051636b2f19e960e01b815260040160405180910390fd5b8151156124d2578151604051636ba589a560e01b8152600481019190915260240161079a565b60208201516001600160a01b03161561250e576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b5092915050565b5f8061251f6127e4565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612589573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125b09190810190615906565b91509150806125d257604051636b2f19e960e01b815260040160405180910390fd5b5f6125db6127e4565b6005810154845191925014612609578251604051636ba589a560e01b8152600481019190915260240161079a565b60208301516001600160a01b031615612645576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b60208301516001600160a01b031615612681576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126be91906152c7565b6040805180830381865af41580156126d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126fc9190615996565b9150915081881461272a5760405163fee3144560e01b8152600481018390526024810189905260440161079a565b5f8881526006840160205260409020600101546001600160401b0390811690821611156127bb575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26127d9565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128126127e4565b905061281d866138e9565b5f61282787611e64565b905061283287612515565b61284157600192505050610f77565b5f8781526006830160205260409020546001600160a01b031633146128665733611484565b5f87815260068301602052604090205460c082015161289591600160b01b90046001600160401b03169061556e565b6001600160401b03168160e001516001600160401b031610156128dc5760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161079a565b5f86156128f4576128ed888761253e565b9050612912565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612937906111ed565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa1580156129a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c591906152d9565b90506001600160a01b0386166129f1575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a109084906159b9565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cec833981519152805460011901612a8057604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a906127e4565b600281015490915061ffff600160401b90910481169086161080612ab9575061271061ffff8616115b15612add57604051635f12e6c360e11b815261ffff8616600482015260240161079a565b60028101546001600160401b039081169085161015612b19576040516202a06d60e11b81526001600160401b038516600482015260240161079a565b8054831080612b2b5750806001015483115b15612b4c5760405163222d164360e21b81526004810184905260240161079a565b5f612b5684613bd4565b90505f612b6282610ed7565b90505f612c29612b728a806159cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bb39250505060208c018c6159cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bf79250505060608d0160408e01614f0a565b612c0460608e018e615a0e565b612c0d90615a22565b612c1a60808f018f615a0e565b612c2390615a22565b87613bf7565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cec83398151915255565b612cdf84848484612808565b61089d57604051635bff683f60e11b81526004810185905260240161079a565b5f612d086127e4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612d4157612d41614fbf565b6003811115612d5257612d52614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612dc6613fe1565b8260800151612dd5919061556e565b6001600160401b0316421015612e095760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e64575060208201515b5f80612e71838886613ffc565b91509150612e8a856020015161161c87606001516111ed565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612ed96127e4565b5f838152600a820160205260408120805491905590915061089d84826140a9565b5f612f03614cde565b5f612f0c6120ae565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612f33886123ff565b604001516040518263ffffffff1660e01b8152600401612f5391906152c7565b6040805180830381865af4158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906157ea565b915091508015612fb857604051632d07135360e01b8152811515600482015260240161079a565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612ff057612ff0614fbf565b600581111561300157613001614fbf565b815260200160018201805461301590615155565b80601f016020809104026020016040519081016040528092919081815260200182805461304190615155565b801561308c5780601f106130635761010080835404028352916020019161308c565b820191905f5260205f20905b81548152906001019060200180831161306f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561310457613104614fbf565b14158015613125575060018151600581111561312257613122614fbf565b14155b1561314657805160405163170cc93360e21b815261079a919060040161518d565b60038151600581111561315b5761315b614fbf565b03613169576004815261316e565b600581525b836006018160200151604051613184919061544a565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156131c7576131c7614fbf565b0217905550602082015160018201906131e0908261549f565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615ccc83398151915254611422906001600160a01b0316838361411f565b5f806132dc6127e4565b90505f6132eb6102fd85613bd4565b90505f6132f787611e64565b905061330287612515565b613322576040516330efa98b60e01b81526004810188905260240161079a565b60028151600581111561333757613337614fbf565b1461335857805160405163170cc93360e21b815261079a919060040161518d565b5f828260a00151613369919061556e565b905083600201600a9054906101000a90046001600160401b0316826040015161339291906155b0565b6001600160401b0316816001600160401b031611156133cf57604051636d51fe0560e11b81526001600160401b038216600482015260240161079a565b5f806133db8a84613531565b915091505f8a8360405160200161340992919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61351f61417e565b613528826141c9565b61142281614246565b5f805f61353c6120ae565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b031661356c85826142ae565b5f6135768761451b565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561361a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136419190810190615296565b6040518263ffffffff1660e01b815260040161365d91906152c7565b6020604051808303815f875af1158015613679573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061369d91906152d9565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806137056127e4565b90505f6137158660400151611e64565b90505f60038251600581111561372d5761372d614fbf565b148061374b575060048251600581111561374957613749614fbf565b145b1561375b575060e0810151613798565b60028251600581111561377057613770614fbf565b0361377c575042613798565b815160405163170cc93360e21b815261079a919060040161518d565b86608001516001600160401b0316816001600160401b0316116137c0575f9350505050613510565b600483015460608801515f916001600160a01b031690634f22429f906137e5906111ed565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613866573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061388a91906152d9565b90506001600160a01b0387166138a257876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f6138f26120ae565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561392c5761392c614fbf565b600581111561393d5761393d614fbf565b815260200160018201805461395190615155565b80601f016020809104026020016040519081016040528092919081815260200182805461397d90615155565b80156139c85780601f1061399f576101008083540402835291602001916139c8565b820191905f5260205f20905b8154815290600101906020018083116139ab57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613a4057613a40614fbf565b14613a73575f8381526005830160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613ab857613ab8614fbf565b021790555060208201516001820190613ad1908261549f565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b718482613531565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613bc6939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610f25825f80516020615ccc833981519152546001600160a01b031690614584565b5f613c006120ae565b6007015460ff16613c2457604051637fab81e560e01b815260040160405180910390fd5b5f613c2d6120ae565b905042866001600160401b0316111580613c5c5750613c4f6202a300426159b9565b866001600160401b031610155b15613c8557604051635879da1360e11b81526001600160401b038716600482015260240161079a565b60038101546001600160401b0390613ca890600160401b900482168583166159b9565b1115613cd257604051633e1a785160e01b81526001600160401b038416600482015260240161079a565b613cdb85614590565b613ce484614590565b8651603014613d0b5786516040516326475b2f60e11b815260040161079a91815260200190565b8751601414613d2f5787604051633e08a12560e11b815260040161079a91906152c7565b5f801b8160060189604051613d44919061544a565b90815260200160405180910390205414613d73578760405163a41f772f60e01b815260040161079a91906152c7565b613d7d835f6142ae565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613dfd9190615b4f565b5f60405180830381865af4158015613e17573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e3e9190810190615c06565b5f82815260048601602052604090209193509150613e5c828261549f565b5081836006018b604051613e70919061544a565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613eac9085906004016152c7565b6020604051808303815f875af1158015613ec8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eec91906152d9565b5f8481526005860160205260409020805460ff19166001908117825591925001613f168c8261549f565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b0319169055613f6d8b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a604051613fca939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b5f613fea6120ae565b600101546001600160401b0316919050565b5f805f6140076127e4565b5f8681526008820160205260408120805490829055919250908190801561409b575f8781526006850160205260409020546127109061405190600160a01b900461ffff16836157d3565b61405b919061579a565b91508184600a015f8981526020019081526020015f205f82825461407f91906159b9565b9091555061408f90508282615c49565b925061409b89846140a9565b509097909650945050505050565b5f5f80516020615ccc83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614104575f80fd5b505af1158015614116573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060b91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506146af565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166141c757604051631afcd79f60e31b815260040160405180910390fd5b565b6141d161417e565b6141da81614710565b6141e2614729565b614243606082013560808301356141ff60c0850160a08601614f0a565b61420f60e0860160c08701615c5c565b614220610100870160e08801615c75565b61010087013561423861014089016101208a016152f0565b886101400135614739565b50565b61424e61417e565b5f80516020615ccc8339815191526001600160a01b03821661428e57604051637330680360e01b81526001600160a01b038316600482015260240161079a565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6142b76120ae565b90505f826001600160401b0316846001600160401b031611156142e5576142de83856158e6565b90506142f2565b6142ef84846158e6565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061435f57506001840154815161435b916001600160401b0316906159b9565b8210155b15614387576001600160401b03808416606083015282825260408201511660208201526143a6565b8281606001818151614399919061556e565b6001600160401b03169052505b60608101516143b69060646155b0565b602082015160018601546001600160401b0392909216916143e19190600160401b900460ff166155b0565b6001600160401b0316101561441a57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161079a565b858160400181815161442c919061556e565b6001600160401b031690525060408101805186919061444c9083906158e6565b6001600160401b03169052506001840154604082015160649161447a91600160401b90910460ff16906155b0565b6001600160401b031610156144b3576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161079a565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f806145256120ae565b5f848152600582016020526040902060020180549192509060089061455990600160401b90046001600160401b0316615c95565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6135108333846148fb565b805163ffffffff161580156145a9575060208101515115155b156145dd57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161079a565b602081015151815163ffffffff16111561462057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161079a565b60015b816020015151811015611422576020820151614640600183615c49565b8151811061465057614650615350565b60200260200101516001600160a01b03168260200151828151811061467757614677615350565b60200260200101516001600160a01b031610156146a757604051630dbc8d5f60e31b815260040160405180910390fd5b600101614623565b5f6146c36001600160a01b03841683614a5e565b905080515f141580156146e75750808060200190518101906146e59190615cb0565b155b1561060b57604051635274afe760e01b81526001600160a01b038416600482015260240161079a565b61471861417e565b614720614a6b565b61424381614a73565b61473161417e565b6141c7614b57565b61474161417e565b5f61474a6127e4565b905061ffff86161580614762575061271061ffff8716115b1561478657604051635f12e6c360e11b815261ffff8716600482015260240161079a565b878911156147aa5760405163222d164360e21b8152600481018a905260240161079a565b60ff851615806147bd5750600a60ff8616115b156147e05760405163170db35960e31b815260ff8616600482015260240161079a565b6147e8613fe1565b6001600160401b0316876001600160401b03161015614824576040516202a06d60e11b81526001600160401b038816600482015260240161079a565b835f036148445760405163a733007160e01b815260040160405180910390fd5b8161486557604051632f6bd1db60e01b81526004810183905260240161079a565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614941573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061496591906152d9565b905061497c6001600160a01b038616853086614b5f565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156149c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149e491906152d9565b9050818111614a4a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161079a565b614a548282615c49565b9695505050505050565b606061351083835f614b98565b6141c761417e565b614a7b61417e565b5f614a846120ae565b8235815590506014614a9c6060840160408501615c75565b60ff161180614abb5750614ab66060830160408401615c75565b60ff16155b15614aef57614ad06060830160408401615c75565b604051634a59bbff60e11b815260ff909116600482015260240161079a565b614aff6060830160408401615c75565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b306040830160208401614f0a565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612cc061417e565b6040516001600160a01b03848116602483015283811660448301526064820183905261089d9186918216906323b872dd9060840161414c565b606081471015614bbd5760405163cd78605960e01b815230600482015260240161079a565b5f80856001600160a01b03168486604051614bd8919061544a565b5f6040518083038185875af1925050503d805f8114614c12576040519150601f19603f3d011682016040523d82523d5f602084013e614c17565b606091505b5091509150614a54868383606082614c3757614c3282614c7e565b613510565b8151158015614c4e57506001600160a01b0384163b155b15614c7757604051639996b31560e01b81526001600160a01b038516600482015260240161079a565b5080613510565b805115614c8e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614cb390615155565b5f825580601f10614cc2575050565b601f0160209004905f5260205f20908101906142439190614d23565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614d37575f8155600101614d24565b5090565b8015158114614243575f80fd5b803563ffffffff8116811461163f575f80fd5b5f805f60608486031215614d6d575f80fd5b833592506020840135614d7f81614d3b565b9150614d8d60408501614d48565b90509250925092565b5f60208284031215614da6575f80fd5b5035919050565b5f8060408385031215614dbe575f80fd5b82356001600160401b03811115614dd3575f80fd5b830160808186031215614de4575f80fd5b9150614df260208401614d48565b90509250929050565b5f8060408385031215614e0c575f80fd5b82359150614df260208401614d48565b6001600160a01b0381168114614243575f80fd5b5f805f8060808587031215614e43575f80fd5b843593506020850135614e5581614d3b565b9250614e6360408601614d48565b91506060850135614e7381614e1c565b939692955090935050565b803561ffff8116811461163f575f80fd5b6001600160401b0381168114614243575f80fd5b5f805f8060808587031215614eb6575f80fd5b84356001600160401b03811115614ecb575f80fd5b850160a08188031215614edc575f80fd5b9350614eea60208601614e7e565b92506040850135614efa81614e8f565b9396929550929360600135925050565b5f60208284031215614f1a575f80fd5b813561351081614e8f565b5f8060408385031215614f36575f80fd5b823591506020830135614f4881614e1c565b809150509250929050565b5f60208284031215614f63575f80fd5b61351082614d48565b5f8060408385031215614f7d575f80fd5b50508035926020909101359150565b5f80828403610180811215614f9f575f80fd5b61016080821215614fae575f80fd5b8493508301359050614f4881614e1c565b634e487b7160e01b5f52602160045260245ffd5b60068110614fe357614fe3614fbf565b9052565b5f5b83811015615001578181015183820152602001614fe9565b50505f910152565b5f8151808452615020816020860160208601614fe7565b601f01601f19169290920160200192915050565b60208152615046602082018351614fd3565b5f6020830151610100806040850152615063610120850183615009565b915060408501516001600160401b038082166060870152806060880151166080870152505060808501516150a260a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f80602083850312156150fb575f80fd5b82356001600160401b0380821115615111575f80fd5b818501915085601f830112615124575f80fd5b813581811115615132575f80fd5b866020828501011115615143575f80fd5b60209290920196919550909350505050565b600181811c9082168061516957607f821691505b60208210810361518757634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610f258284614fd3565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151d1576151d161519b565b60405290565b604080519081016001600160401b03811182821017156151d1576151d161519b565b604051601f8201601f191681016001600160401b03811182821017156152215761522161519b565b604052919050565b5f6001600160401b038211156152415761524161519b565b50601f01601f191660200190565b5f82601f83011261525e575f80fd5b815161527161526c82615229565b6151f9565b818152846020838601011115615285575f80fd5b610f77826020830160208701614fe7565b5f602082840312156152a6575f80fd5b81516001600160401b038111156152bb575f80fd5b610f778482850161524f565b602081525f6135106020830184615009565b5f602082840312156152e9575f80fd5b5051919050565b5f60208284031215615300575f80fd5b813561351081614e1c565b5f808335601e19843603018112615320575f80fd5b8301803591506001600160401b03821115615339575f80fd5b6020019150600581901b36038213156136f4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615378575f80fd5b9190910192915050565b5f82601f830112615391575f80fd5b813561539f61526c82615229565b8181528460208386010111156153b3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153df575f80fd5b6153e76151af565b82356001600160401b03808211156153fd575f80fd5b61540936838701615382565b8352602085013591508082111561541e575f80fd5b5061542b36828601615382565b602083015250604083013561543f81614e8f565b604082015292915050565b5f8251615378818460208701614fe7565b601f82111561060b57805f5260205f20601f840160051c810160208510156154805750805b601f840160051c820191505b81811015610f37575f815560010161548c565b81516001600160401b038111156154b8576154b861519b565b6154cc816154c68454615155565b8461545b565b602080601f8311600181146154ff575f84156154e85750858301515b5f19600386901b1c1916600185901b1785556110be565b5f85815260208120601f198616915b8281101561552d5788860151825594840194600190910190840161550e565b508582101561554a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561250e5761250e61555a565b5f63ffffffff8083168181036155a6576155a661555a565b6001019392505050565b6001600160401b038181168382160280821691908281146155d3576155d361555a565b505092915050565b5f808335601e198436030181126155f0575f80fd5b83016020810192503590506001600160401b0381111561560e575f80fd5b8036038213156136f4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156f957848303601f19018952813536889003605e19018112615680575f80fd5b8701606061568e82806155db565b82875261569e838801828461561c565b925050506156ae868301836155db565b868303888801526156c083828461561c565b9250505060408083013592506156d583614e8f565b6001600160401b03929092169490910193909352978301979083019060010161565b565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561572a81614e1c565b6001600160a01b031660608381019190915283013536849003601e19018112615751575f80fd5b83016020810190356001600160401b0381111561576c575f80fd5b8060051b360382131561577d575f80fd5b60808085015261579160a085018284615644565b95945050505050565b5f826157b457634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157cd576157cd614fbf565b91905290565b8082028115828204841417610f2557610f2561555a565b5f80604083850312156157fb575f80fd5b825191506020830151614f4881614d3b565b5f60208083525f845461581f81615155565b806020870152604060018084165f8114615840576001811461585c57615889565b60ff19851660408a0152604084151560051b8a01019550615889565b895f5260205f205f5b858110156158805781548b8201860152908301908801615865565b8a016040019650505b509398975050505050505050565b5f805f606084860312156158a9575f80fd5b8351925060208401516158bb81614e8f565b60408501519092506158cc81614e8f565b809150509250925092565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561250e5761250e61555a565b5f8060408385031215615917575f80fd5b82516001600160401b038082111561592d575f80fd5b9084019060608287031215615940575f80fd5b6159486151af565b82518152602083015161595a81614e1c565b6020820152604083015182811115615970575f80fd5b61597c8882860161524f565b6040830152508094505050506020830151614f4881614d3b565b5f80604083850312156159a7575f80fd5b825191506020830151614f4881614e8f565b80820180821115610f2557610f2561555a565b5f808335601e198436030181126159e1575f80fd5b8301803591506001600160401b038211156159fa575f80fd5b6020019150368190038213156136f4575f80fd5b5f8235603e19833603018112615378575f80fd5b5f60408236031215615a32575f80fd5b615a3a6151d7565b615a4383614d48565b81526020808401356001600160401b0380821115615a5f575f80fd5b9085019036601f830112615a71575f80fd5b813581811115615a8357615a8361519b565b8060051b9150615a948483016151f9565b8181529183018401918481019036841115615aad575f80fd5b938501935b83851015615ad75784359250615ac783614e1c565b8282529385019390850190615ab2565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b445784516001600160a01b03168252938301936001929092019190830190615b1b565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b75610100840182615009565b90506040840151601f1980858403016060860152615b938383615009565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615bc38383615ae9565b925060a08601519150808584030160c086015250615be18282615ae9565b91505060c0840151615bfe60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c17575f80fd5b8251915060208301516001600160401b03811115615c33575f80fd5b615c3f8582860161524f565b9150509250929050565b81810381811115610f2557610f2561555a565b5f60208284031215615c6c575f80fd5b61351082614e7e565b5f60208284031215615c85575f80fd5b813560ff81168114613510575f80fd5b5f6001600160401b038083168181036155a6576155a661555a565b5f60208284031215615cc0575f80fd5b815161351081614d3b56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212208e8bcf509bb396555bcfbb5ce6649d859b9ab4478d41d455edccfd6bb668df3964736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -3351,7 +3351,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseUptimeUp // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220d0480ce8a92db2f68f39def88a3ded31f768999147bdb5eeb25933715298f87d64736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220f730711c5b5760a4acff40008a9e3ea299c9a38a322da3ee6c00fb3fc9503a9d64736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index 31f240920..f9616f20c 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615be6380380615be683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a998061014d5f395ff3fe608060405260043610610254575f3560e01c806380dd672f1161013f578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106cd578063ce161f14146106e1578063d5f20ff61461071d578063df93d8de14610749578063fb8b11dd1461075f578063fd7ac5e71461077e575f80fd5b8063ba3a4b9714610635578063bb0b193814610654578063bc5fbfec14610668578063bee0a03f1461069b578063c599e24f146106ba575f80fd5b80639ae06447116101045780639ae0644714610597578063a3a65e48146105b6578063a9778a7a146103a8578063af2f5feb146105d5578063afb98096146105e8578063b771b3bc1461061b575f80fd5b806380dd672f146105075780638280a25a146105265780638ef34c981461053a57806393e24598146105595780639681d94014610578575f80fd5b806337b9be8f116101d657806360ad77841161019b57806360ad778414610478578063620658561461049757806363e2ca971461044f578063732214f8146104b657806376f78621146104c95780637d8d2f77146104e8575f80fd5b806337b9be8f146103d05780633a1cfff6146103ef5780635dc1f5351461040e5780635dd6a6cb1461043057806360305d621461044f575f80fd5b806320d91b7a1161021c57806320d91b7a1461030157806325e1c776146103205780632e2194d81461033f578063329c3e121461037657806335455ded146103a8575f80fd5b80630118acc4146102585780630322ed98146102795780630ba512d114610298578063151d30d1146102b75780631ec44724146102e2575b5f80fd5b348015610263575f80fd5b50610277610272366004614b41565b61079d565b005b348015610284575f80fd5b50610277610293366004614b7c565b6107ae565b3480156102a3575f80fd5b506102776102b2366004614b93565b610a41565b3480156102c2575f80fd5b506102cb600a81565b60405160ff90911681526020015b60405180910390f35b3480156102ed575f80fd5b506102776102fc366004614b41565b610b1e565b34801561030c575f80fd5b5061027761031b366004614baa565b610b2a565b34801561032b575f80fd5b5061027761033a366004614bf8565b6110de565b34801561034a575f80fd5b5061035e610359366004614b7c565b611152565b6040516001600160401b0390911681526020016102d9565b348015610381575f80fd5b506103906001600160991b0181565b6040516001600160a01b0390911681526020016102d9565b3480156103b3575f80fd5b506103bd61271081565b60405161ffff90911681526020016102d9565b3480156103db575f80fd5b506102776103ea366004614c2d565b6111a6565b3480156103fa575f80fd5b50610277610409366004614b41565b6111b9565b348015610419575f80fd5b506104226111c5565b6040519081526020016102d9565b34801561043b575f80fd5b5061027761044a366004614c2d565b6111d4565b34801561045a575f80fd5b50610463601481565b60405163ffffffff90911681526020016102d9565b348015610483575f80fd5b50610277610492366004614bf8565b6111e0565b3480156104a2575f80fd5b506104226104b1366004614c8f565b611433565b3480156104c1575f80fd5b506104225f81565b3480156104d4575f80fd5b506102776104e3366004614b41565b611453565b3480156104f3575f80fd5b50610277610502366004614c2d565b61145f565b348015610512575f80fd5b50610277610521366004614bf8565b61146b565b348015610531575f80fd5b506102cb603081565b348015610545575f80fd5b50610277610554366004614caa565b61166c565b348015610564575f80fd5b50610277610573366004614b7c565b61171d565b348015610583575f80fd5b50610422610592366004614cd8565b6117b1565b3480156105a2575f80fd5b506102776105b1366004614c2d565b61188a565b3480156105c1575f80fd5b506104226105d0366004614cd8565b611896565b6104226105e3366004614d02565b611a85565b3480156105f3575f80fd5b506104227f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610626575f80fd5b506103906005600160991b0181565b348015610640575f80fd5b5061027761064f366004614b7c565b611ab9565b34801561065f575f80fd5b5061035e611d12565b348015610673575f80fd5b506104227fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b3480156106a6575f80fd5b506102776106b5366004614b7c565b611d34565b6104226106c8366004614b7c565b611e50565b3480156106d8575f80fd5b506102cb601481565b3480156106ec575f80fd5b506107006106fb366004614cd8565b611e7c565b604080519283526001600160401b039091166020830152016102d9565b348015610728575f80fd5b5061073c610737366004614b7c565b611fff565b6040516102d99190614dd8565b348015610754575f80fd5b5061035e6202a30081565b34801561076a575f80fd5b50610277610779366004614caa565b61214e565b348015610789575f80fd5b50610422610798366004614e8e565b6121e5565b6107a98383835f61221d565b505050565b5f6107b7612249565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107f1576107f1614d63565b600581111561080257610802614d63565b815260200160018201805461081690614ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461084290614ef9565b801561088d5780601f106108645761010080835404028352916020019161088d565b820191905f5260205f20905b81548152906001019060200180831161087057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561090557610905614d63565b14610941575f8381526005830160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109df9190810190615034565b6040518263ffffffff1660e01b81526004016109fb9190615065565b6020604051808303815f875af1158015610a17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3b9190615077565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a8a575080546001600160401b03808416911610155b15610aa85760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ad28361226d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a3b8383835f612281565b5f610b33612249565b600781015490915060ff1615610b5c57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc39190615077565b836020013514610bec576040516372b0a7e760e11b815260208401356004820152602401610938565b30610bfd606085016040860161508e565b6001600160a01b031614610c4057610c1b606084016040850161508e565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610938565b5f610c4e60608501856150a9565b905090505f805b828163ffffffff161015610ed4575f610c7160608801886150a9565b8363ffffffff16818110610c8757610c876150ee565b9050602002810190610c999190615102565b610ca29061516d565b80516040519192505f916006880191610cba916151e8565b90815260200160405180910390205414610cea57805160405163a41f772f60e01b81526109389190600401615065565b805151601414610d10578051604051633e08a12560e11b81526109389190600401615065565b5f6002885f013584604051602001610d3f92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d59916151e8565b602060405180830381855afa158015610d74573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d979190615077565b90508086600601835f0151604051610daf91906151e8565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610def908261523d565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e5e908561530c565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610eb991906001600160401b0391909116815260200190565b60405180910390a3505080610ecd9061532c565b9050610c55565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610f17910460ff168361534e565b6001600160401b03161015610f4a57604051633e1a785160e01b81526001600160401b0382166004820152602401610938565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f6e876125b6565b604001516040518263ffffffff1660e01b8152600401610f8e9190615065565b602060405180830381865af4158015610fa9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fcd9190615077565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b815260040161100791906154a4565b5f60405180830381865af4158015611021573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110489190810190615034565b90505f60028260405161105b91906151e8565b602060405180830381855afa158015611076573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110999190615077565b90508281146110c55760405163baaea89d60e01b81526004810182905260248101849052604401610938565b5050506007909201805460ff1916600117905550505050565b6110e7826126cc565b611107576040516330efa98b60e01b815260048101839052602401610938565b5f61111183611fff565b519050600281600581111561112857611128614d63565b14611148578060405163170cc93360e21b81526004016109389190614f2b565b610a3b83836126f5565b5f8061115c61299b565b6003015461116a9084615538565b905080158061117f57506001600160401b0381115b156111a05760405163222d164360e21b815260048101849052602401610938565b92915050565b6111b284848484612281565b5050505050565b610a3b8383835f6129bf565b5f6111ce612249565b54919050565b610a3b84848484612c06565b5f6111e961299b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561122257611222614d63565b600381111561123357611233614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112a982611fff565b90506001835160038111156112c0576112c0614d63565b146112e1578251604051633b0d540d60e21b81526109389190600401615557565b6004815160058111156112f6576112f6614d63565b0361130c5761130486612c32565b505050505050565b8260a001516001600160401b031681608001516001600160401b031610156113ac575f8061133987611e7c565b915091508184146113675760405163fee3144560e01b81526004810183905260248101859052604401610938565b8460a001516001600160401b0316816001600160401b031610156113a957604051632e19bc2d60e11b81526001600160401b0382166004820152602401610938565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f61143c61299b565b600301546111a0906001600160401b038416615571565b6107a98383835f612c06565b6111b2848484846129bf565b611473612e03565b5f61147c61299b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156114b5576114b5614d63565b60038111156114c6576114c6614d63565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561153f5761153f614d63565b14611560578051604051633b0d540d60e21b81526109389190600401615557565b5f61156e8260400151611fff565b9050600461157f8360400151611fff565b51600581111561159157611591614d63565b141580156115b857508160c001516001600160401b031681608001516001600160401b0316105b15611646575f806115c886611e7c565b91509150818460400151146116015781846040015160405163fee3144560e01b8152600401610938929190918252602082015260400190565b806001600160401b03168460c001516001600160401b0316111561164357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610938565b50505b61164f85612c32565b50505061166860015f80516020615a4483398151915255565b5050565b5f61167561299b565b90506001600160a01b0382166116a95760405163caa903f960e01b81526001600160a01b0383166004820152602401610938565b5f8381526006820160205260409020546001600160a01b031633146116ef57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610938565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61172661299b565b90505f61173283611fff565b519050600481600581111561174957611749614d63565b14611769578060405163170cc93360e21b81526004016109389190614f2b565b5f8381526006830160205260409020546001600160a01b0316331461178e57336116ca565b5f8381526006830160205260409020546107a9906001600160a01b031684612e4d565b5f6117ba612e03565b5f6117c361299b565b90505f806117d085612e77565b915091506117dd826126cc565b6117eb5750915061186f9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b0391821691168061182d5750805b60048351600581111561184257611842614d63565b03611851576118518185612e4d565b611867826118628560400151611433565b61322c565b509193505050505b61188560015f80516020615a4483398151915255565b919050565b610a3b8484848461221d565b5f806118a0612249565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118c7876125b6565b604001516040518263ffffffff1660e01b81526004016118e79190615065565b6040805180830381865af4158015611901573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119259190615588565b915091508061194b57604051632d07135360e01b81528115156004820152602401610938565b5f8281526004840160205260409020805461196590614ef9565b90505f036119895760405163089938b360e11b815260048101839052602401610938565b60015f838152600580860160205260409091205460ff16908111156119b0576119b0614d63565b146119e3575f8281526005840160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b5f82815260048401602052604081206119fb91614a8d565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f611a8e612e03565b611a9a8484843461323f565b9050611ab260015f80516020615a4483398151915255565b9392505050565b5f611ac261299b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611afb57611afb614d63565b6003811115611b0c57611b0c614d63565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b8557611b85614d63565b14158015611ba65750600381516003811115611ba357611ba3614d63565b14155b15611bc7578051604051633b0d540d60e21b81526109389190600401615557565b5f611bd58260400151611fff565b905080606001516001600160401b03165f03611c07576040516339b894f960e21b815260048101859052602401610938565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c7593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c8f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cb69190810190615034565b6040518263ffffffff1660e01b8152600401611cd29190615065565b6020604051808303815f875af1158015611cee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b29190615077565b5f611d1b612249565b60030154600160401b90046001600160401b0316919050565b5f611d3d612249565b5f8381526004820160205260409020805491925090611d5b90614ef9565b90505f03611d7f5760405163089938b360e11b815260048101839052602401610938565b60015f838152600580840160205260409091205460ff1690811115611da657611da6614d63565b14611dd9575f8281526005820160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e1092016155ab565b6020604051808303815f875af1158015611e2c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a99190615077565b5f611e59612e03565b611e6482333461346e565b905061188560015f80516020615a4483398151915255565b5f805f611e88846125b6565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611ec89190615065565b606060405180830381865af4158015611ee3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f079190615635565b9250925092505f611f16612249565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f6a57604051632e19bc2d60e11b81526001600160401b0384166004820152602401610938565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611fea90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b612007614ac4565b5f612010612249565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff9091169081111561204a5761204a614d63565b600581111561205b5761205b614d63565b815260200160018201805461206f90614ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461209b90614ef9565b80156120e65780601f106120bd576101008083540402835291602001916120e6565b820191905f5260205f20905b8154815290600101906020018083116120c957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b0381166121805760405163caa903f960e01b81526001600160a01b0382166004820152602401610938565b5f61218961299b565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121b757336116ca565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806121ef612249565b905080600601848460405161220592919061566a565b90815260200160405180910390205491505092915050565b61222984848484612281565b610a3b57604051631036cf9160e11b815260048101859052602401610938565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b6122756136ae565b61227e816136f9565b50565b5f8061228b61299b565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156122c4576122c4614d63565b60038111156122d5576122d5614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61234b82611fff565b905060028351600381111561236257612362614d63565b14612383578251604051633b0d540d60e21b81526109389190600401615557565b60208301516001600160a01b0316331461241f575f8281526006850160205260409020546001600160a01b031633146123bc57336116ca565b5f82815260068501602052604090205460c08201516123eb91600160b01b90046001600160401b03169061530c565b6001600160401b031642101561241f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b60028151600581111561243457612434614d63565b036125565760028401546080840151612456916001600160401b03169061530c565b6001600160401b031642101561248a5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b871561249c5761249a82886126f5565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516124d59184916124d09190615679565b613773565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561251884888c61393d565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125ae9350505050565b60048151600581111561256b5761256b614d63565b036125925761257b83878b61393d565b5061258589612c32565b60019450505050506125ae565b805160405163170cc93360e21b81526109389190600401614f2b565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561261a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126419190810190615699565b915091508061266357604051636b2f19e960e01b815260040160405180910390fd5b815115612689578151604051636ba589a560e01b81526004810191909152602401610938565b60208201516001600160a01b0316156126c5576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b5092915050565b5f806126d661299b565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612740573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127679190810190615699565b915091508061278957604051636b2f19e960e01b815260040160405180910390fd5b5f61279261299b565b60058101548451919250146127c0578251604051636ba589a560e01b81526004810191909152602401610938565b60208301516001600160a01b0316156127fc576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b60208301516001600160a01b031615612838576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128759190615065565b6040805180830381865af415801561288f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b39190615729565b915091508188146128e15760405163fee3144560e01b81526004810183905260248101899052604401610938565b5f8881526006840160205260409020600101546001600160401b039081169082161115612972575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612990565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806129c961299b565b90506129d486613b2b565b5f6129de87611fff565b90506129e9876126cc565b6129f8576001925050506125ae565b5f8781526006830160205260409020546001600160a01b03163314612a1d57336116ca565b5f87815260068301602052604090205460c0820151612a4c91600160b01b90046001600160401b03169061530c565b6001600160401b03168160e001516001600160401b03161015612a935760e081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610938565b5f8615612aab57612aa488876126f5565b9050612ac9565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612aee90611433565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612b58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b7c9190615077565b90506001600160a01b038616612ba8575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612bc790849061574c565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612c12848484846129bf565b610a3b57604051635bff683f60e11b815260048101859052602401610938565b5f612c3b61299b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c7457612c74614d63565b6003811115612c8557612c85614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cf9613e16565b8260800151612d08919061530c565b6001600160401b0316421015612d3c5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d97575060208201515b5f80612da4838886613e31565b91509150612dbd85602001516118628760600151611433565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a44833981519152805460011901612e3457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a4483398151915255565b5f612e5661299b565b5f838152600a8201602052604081208054919055909150610a3b8482613ede565b5f612e80614ac4565b5f612e89612249565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612eb0886125b6565b604001516040518263ffffffff1660e01b8152600401612ed09190615065565b6040805180830381865af4158015612eea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0e9190615588565b915091508015612f3557604051632d07135360e01b81528115156004820152602401610938565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f6d57612f6d614d63565b6005811115612f7e57612f7e614d63565b8152602001600182018054612f9290614ef9565b80601f0160208091040260200160405190810160405280929190818152602001828054612fbe90614ef9565b80156130095780601f10612fe057610100808354040283529160200191613009565b820191905f5260205f20905b815481529060010190602001808311612fec57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561308157613081614d63565b141580156130a2575060018151600581111561309f5761309f614d63565b14155b156130c357805160405163170cc93360e21b81526109389190600401614f2b565b6003815160058111156130d8576130d8614d63565b036130e657600481526130eb565b600581525b83600601816020015160405161310191906151e8565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561314457613144614d63565b02179055506020820151600182019061315d908261523d565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116686001600160a01b03831682613f3c565b5f8061324961299b565b600281015490915061ffff600160401b90910481169086161080613272575061271061ffff8616115b1561329657604051635f12e6c360e11b815261ffff86166004820152602401610938565b60028101546001600160401b0390811690851610156132d2576040516202a06d60e11b81526001600160401b0385166004820152602401610938565b80548310806132e45750806001015483115b156133055760405163222d164360e21b815260048101849052602401610938565b825f61331082611152565b90505f6133d76133208a8061575f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133619250505060208c018c61575f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133a59250505060608d0160408e01614c8f565b6133b260608e018e6157a1565b6133bb906157b5565b6133c860808f018f6157a1565b6133d1906157b5565b87613fcf565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061347861299b565b90505f61348484611152565b90505f61349087611fff565b905061349b876126cc565b6134bb576040516330efa98b60e01b815260048101889052602401610938565b6002815160058111156134d0576134d0614d63565b146134f157805160405163170cc93360e21b81526109389190600401614f2b565b5f828260a00151613502919061530c565b905083600201600a9054906101000a90046001600160401b0316826040015161352b919061534e565b6001600160401b0316816001600160401b0316111561356857604051636d51fe0560e11b81526001600160401b0382166004820152602401610938565b5f806135748a84613773565b915091505f8a836040516020016135a292919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166136f757604051631afcd79f60e31b815260040160405180910390fd5b565b6137016136ae565b61370a816143b9565b6137126143d2565b61227e6060820135608083013561372f60c0850160a08601614c8f565b61373f60e0860160c0870161587c565b613750610100870160e08801615895565b61010087013561376861014089016101208a0161508e565b8861014001356143e2565b5f805f61377e612249565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137ae85826145a4565b5f6137b887614811565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561385c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138839190810190615034565b6040518263ffffffff1660e01b815260040161389f9190615065565b6020604051808303815f875af11580156138bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138df9190615077565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f8061394761299b565b90505f6139578660400151611fff565b90505f60038251600581111561396f5761396f614d63565b148061398d575060048251600581111561398b5761398b614d63565b145b1561399d575060e08101516139da565b6002825160058111156139b2576139b2614d63565b036139be5750426139da565b815160405163170cc93360e21b81526109389190600401614f2b565b86608001516001600160401b0316816001600160401b031611613a02575f9350505050611ab2565b600483015460608801515f916001600160a01b031690634f22429f90613a2790611433565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613aa8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613acc9190615077565b90506001600160a01b038716613ae457876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613b34612249565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b6e57613b6e614d63565b6005811115613b7f57613b7f614d63565b8152602001600182018054613b9390614ef9565b80601f0160208091040260200160405190810160405280929190818152602001828054613bbf90614ef9565b8015613c0a5780601f10613be157610100808354040283529160200191613c0a565b820191905f5260205f20905b815481529060010190602001808311613bed57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c8257613c82614d63565b14613cb5575f8381526005830160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613cfa57613cfa614d63565b021790555060208201516001820190613d13908261523d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613db38482613773565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613e08939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613e1f612249565b600101546001600160401b0316919050565b5f805f613e3c61299b565b5f86815260088201602052604081208054908290559192509081908015613ed0575f87815260068501602052604090205461271090613e8690600160a01b900461ffff1683615571565b613e909190615538565b91508184600a015f8981526020019081526020015f205f828254613eb4919061574c565b90915550613ec4905082826158b5565b9250613ed08984613ede565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613f2a575f80fd5b505af1158015611304573d5f803e3d5ffd5b80471015613f5f5760405163cd78605960e01b8152306004820152602401610938565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613fa8576040519150601f19603f3d011682016040523d82523d5f602084013e613fad565b606091505b50509050806107a957604051630a12f52160e11b815260040160405180910390fd5b5f613fd8612249565b6007015460ff16613ffc57604051637fab81e560e01b815260040160405180910390fd5b5f614005612249565b905042866001600160401b031611158061403457506140276202a3004261574c565b866001600160401b031610155b1561405d57604051635879da1360e11b81526001600160401b0387166004820152602401610938565b60038101546001600160401b039061408090600160401b9004821685831661574c565b11156140aa57604051633e1a785160e01b81526001600160401b0384166004820152602401610938565b6140b38561487a565b6140bc8461487a565b86516030146140e35786516040516326475b2f60e11b815260040161093891815260200190565b87516014146141075787604051633e08a12560e11b81526004016109389190615065565b5f801b816006018960405161411c91906151e8565b9081526020016040518091039020541461414b578760405163a41f772f60e01b81526004016109389190615065565b614155835f6145a4565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016141d5919061592e565b5f60405180830381865af41580156141ef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261421691908101906159e5565b5f82815260048601602052604090209193509150614234828261523d565b5081836006018b60405161424891906151e8565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614284908590600401615065565b6020604051808303815f875af11580156142a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142c49190615077565b5f8481526005860160205260409020805460ff191660019081178255919250016142ee8c8261523d565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690556143458b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a6040516143a2939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b6143c16136ae565b6143c9614999565b61227e816149a1565b6143da6136ae565b6136f7614a85565b6143ea6136ae565b5f6143f361299b565b905061ffff8616158061440b575061271061ffff8716115b1561442f57604051635f12e6c360e11b815261ffff87166004820152602401610938565b878911156144535760405163222d164360e21b8152600481018a9052602401610938565b60ff851615806144665750600a60ff8616115b156144895760405163170db35960e31b815260ff86166004820152602401610938565b614491613e16565b6001600160401b0316876001600160401b031610156144cd576040516202a06d60e11b81526001600160401b0388166004820152602401610938565b835f036144ed5760405163a733007160e01b815260040160405180910390fd5b8161450e57604051632f6bd1db60e01b815260048101839052602401610938565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145ad612249565b90505f826001600160401b0316846001600160401b031611156145db576145d48385615679565b90506145e8565b6145e58484615679565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580614655575060018401548151614651916001600160401b03169061574c565b8210155b1561467d576001600160401b038084166060830152828252604082015116602082015261469c565b828160600181815161468f919061530c565b6001600160401b03169052505b60608101516146ac90606461534e565b602082015160018601546001600160401b0392909216916146d79190600160401b900460ff1661534e565b6001600160401b0316101561471057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610938565b8581604001818151614722919061530c565b6001600160401b0316905250604081018051869190614742908390615679565b6001600160401b03169052506001840154604082015160649161477091600160401b90910460ff169061534e565b6001600160401b031610156147a9576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610938565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061481b612249565b5f848152600582016020526040902060020180549192509060089061484f90600160401b90046001600160401b0316615a28565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614893575060208101515115155b156148c757805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610938565b602081015151815163ffffffff16111561490a57805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610938565b60015b81602001515181101561166857602082015161492a6001836158b5565b8151811061493a5761493a6150ee565b60200260200101516001600160a01b031682602001518281518110614961576149616150ee565b60200260200101516001600160a01b0316101561499157604051630dbc8d5f60e31b815260040160405180910390fd5b60010161490d565b6136f76136ae565b6149a96136ae565b5f6149b2612249565b82358155905060146149ca6060840160408501615895565b60ff1611806149e957506149e46060830160408401615895565b60ff16155b15614a1d576149fe6060830160408401615895565b604051634a59bbff60e11b815260ff9091166004820152602401610938565b614a2d6060830160408401615895565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a5e6040830160208401614c8f565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612e3a6136ae565b508054614a9990614ef9565b5f825580601f10614aa8575050565b601f0160209004905f5260205f209081019061227e9190614b09565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614b1d575f8155600101614b0a565b5090565b801515811461227e575f80fd5b803563ffffffff81168114611885575f80fd5b5f805f60608486031215614b53575f80fd5b833592506020840135614b6581614b21565b9150614b7360408501614b2e565b90509250925092565b5f60208284031215614b8c575f80fd5b5035919050565b5f6101608284031215614ba4575f80fd5b50919050565b5f8060408385031215614bbb575f80fd5b82356001600160401b03811115614bd0575f80fd5b830160808186031215614be1575f80fd5b9150614bef60208401614b2e565b90509250929050565b5f8060408385031215614c09575f80fd5b82359150614bef60208401614b2e565b6001600160a01b038116811461227e575f80fd5b5f805f8060808587031215614c40575f80fd5b843593506020850135614c5281614b21565b9250614c6060408601614b2e565b91506060850135614c7081614c19565b939692955090935050565b6001600160401b038116811461227e575f80fd5b5f60208284031215614c9f575f80fd5b8135611ab281614c7b565b5f8060408385031215614cbb575f80fd5b823591506020830135614ccd81614c19565b809150509250929050565b5f60208284031215614ce8575f80fd5b611ab282614b2e565b803561ffff81168114611885575f80fd5b5f805f60608486031215614d14575f80fd5b83356001600160401b03811115614d29575f80fd5b840160a08187031215614d3a575f80fd5b9250614d4860208501614cf1565b91506040840135614d5881614c7b565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d8757614d87614d63565b9052565b5f5b83811015614da5578181015183820152602001614d8d565b50505f910152565b5f8151808452614dc4816020860160208601614d8b565b601f01601f19169290920160200192915050565b60208152614dea602082018351614d77565b5f6020830151610100806040850152614e07610120850183614dad565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614e4660a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e9f575f80fd5b82356001600160401b0380821115614eb5575f80fd5b818501915085601f830112614ec8575f80fd5b813581811115614ed6575f80fd5b866020828501011115614ee7575f80fd5b60209290920196919550909350505050565b600181811c90821680614f0d57607f821691505b602082108103614ba457634e487b7160e01b5f52602260045260245ffd5b602081016111a08284614d77565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f6f57614f6f614f39565b60405290565b604080519081016001600160401b0381118282101715614f6f57614f6f614f39565b604051601f8201601f191681016001600160401b0381118282101715614fbf57614fbf614f39565b604052919050565b5f6001600160401b03821115614fdf57614fdf614f39565b50601f01601f191660200190565b5f82601f830112614ffc575f80fd5b815161500f61500a82614fc7565b614f97565b818152846020838601011115615023575f80fd5b6125ae826020830160208701614d8b565b5f60208284031215615044575f80fd5b81516001600160401b03811115615059575f80fd5b6125ae84828501614fed565b602081525f611ab26020830184614dad565b5f60208284031215615087575f80fd5b5051919050565b5f6020828403121561509e575f80fd5b8135611ab281614c19565b5f808335601e198436030181126150be575f80fd5b8301803591506001600160401b038211156150d7575f80fd5b6020019150600581901b3603821315613936575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615116575f80fd5b9190910192915050565b5f82601f83011261512f575f80fd5b813561513d61500a82614fc7565b818152846020838601011115615151575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561517d575f80fd5b615185614f4d565b82356001600160401b038082111561519b575f80fd5b6151a736838701615120565b835260208501359150808211156151bc575f80fd5b506151c936828601615120565b60208301525060408301356151dd81614c7b565b604082015292915050565b5f8251615116818460208701614d8b565b601f8211156107a957805f5260205f20601f840160051c8101602085101561521e5750805b601f840160051c820191505b818110156111b2575f815560010161522a565b81516001600160401b0381111561525657615256614f39565b61526a816152648454614ef9565b846151f9565b602080601f83116001811461529d575f84156152865750858301515b5f19600386901b1c1916600185901b178555611304565b5f85815260208120601f198616915b828110156152cb578886015182559484019460019091019084016152ac565b50858210156152e857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126c5576126c56152f8565b5f63ffffffff808316818103615344576153446152f8565b6001019392505050565b6001600160401b03818116838216028082169190828114615371576153716152f8565b505092915050565b5f808335601e1984360301811261538e575f80fd5b83016020810192503590506001600160401b038111156153ac575f80fd5b803603821315613936575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561549757848303601f19018952813536889003605e1901811261541e575f80fd5b8701606061542c8280615379565b82875261543c83880182846153ba565b9250505061544c86830183615379565b8683038888015261545e8382846153ba565b92505050604080830135925061547383614c7b565b6001600160401b0392909216949091019390935297830197908301906001016153f9565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356154c881614c19565b6001600160a01b031660608381019190915283013536849003601e190181126154ef575f80fd5b83016020810190356001600160401b0381111561550a575f80fd5b8060051b360382131561551b575f80fd5b60808085015261552f60a0850182846153e2565b95945050505050565b5f8261555257634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061556b5761556b614d63565b91905290565b80820281158282048414176111a0576111a06152f8565b5f8060408385031215615599575f80fd5b825191506020830151614ccd81614b21565b5f60208083525f84546155bd81614ef9565b806020870152604060018084165f81146155de57600181146155fa57615627565b60ff19851660408a0152604084151560051b8a01019550615627565b895f5260205f205f5b8581101561561e5781548b8201860152908301908801615603565b8a016040019650505b509398975050505050505050565b5f805f60608486031215615647575f80fd5b83519250602084015161565981614c7b565b6040850151909250614d5881614c7b565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126c5576126c56152f8565b5f80604083850312156156aa575f80fd5b82516001600160401b03808211156156c0575f80fd5b90840190606082870312156156d3575f80fd5b6156db614f4d565b8251815260208301516156ed81614c19565b6020820152604083015182811115615703575f80fd5b61570f88828601614fed565b6040830152508094505050506020830151614ccd81614b21565b5f806040838503121561573a575f80fd5b825191506020830151614ccd81614c7b565b808201808211156111a0576111a06152f8565b5f808335601e19843603018112615774575f80fd5b8301803591506001600160401b0382111561578d575f80fd5b602001915036819003821315613936575f80fd5b5f8235603e19833603018112615116575f80fd5b5f604082360312156157c5575f80fd5b6157cd614f75565b6157d683614b2e565b81526020808401356001600160401b03808211156157f2575f80fd5b9085019036601f830112615804575f80fd5b81358181111561581657615816614f39565b8060051b9150615827848301614f97565b8181529183018401918481019036841115615840575f80fd5b938501935b8385101561586a578435925061585a83614c19565b8282529385019390850190615845565b94860194909452509295945050505050565b5f6020828403121561588c575f80fd5b611ab282614cf1565b5f602082840312156158a5575f80fd5b813560ff81168114611ab2575f80fd5b818103818111156111a0576111a06152f8565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156159235784516001600160a01b031682529383019360019290920191908301906158fa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615954610100840182614dad565b90506040840151601f19808584030160608601526159728383614dad565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159a283836158c8565b925060a08601519150808584030160c0860152506159c082826158c8565b91505060c08401516159dd60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159f6575f80fd5b8251915060208301516001600160401b03811115615a12575f80fd5b615a1e85828601614fed565b9150509250929050565b5f6001600160401b03808316818103615344576153446152f856fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212206fa28e4f995a90cc05a02003024843121454cc58a737bcbbe840f4e9942b364864736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615be6380380615be683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a998061014d5f395ff3fe608060405260043610610254575f3560e01c806380dd672f1161013f578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106cd578063ce161f14146106e1578063d5f20ff61461071d578063df93d8de14610749578063fb8b11dd1461075f578063fd7ac5e71461077e575f80fd5b8063ba3a4b9714610635578063bb0b193814610654578063bc5fbfec14610668578063bee0a03f1461069b578063c599e24f146106ba575f80fd5b80639ae06447116101045780639ae0644714610597578063a3a65e48146105b6578063a9778a7a146103a8578063af2f5feb146105d5578063afb98096146105e8578063b771b3bc1461061b575f80fd5b806380dd672f146105075780638280a25a146105265780638ef34c981461053a57806393e24598146105595780639681d94014610578575f80fd5b806337b9be8f116101d657806360ad77841161019b57806360ad778414610478578063620658561461049757806363e2ca971461044f578063732214f8146104b657806376f78621146104c95780637d8d2f77146104e8575f80fd5b806337b9be8f146103d05780633a1cfff6146103ef5780635dc1f5351461040e5780635dd6a6cb1461043057806360305d621461044f575f80fd5b806320d91b7a1161021c57806320d91b7a1461030157806325e1c776146103205780632e2194d81461033f578063329c3e121461037657806335455ded146103a8575f80fd5b80630118acc4146102585780630322ed98146102795780630ba512d114610298578063151d30d1146102b75780631ec44724146102e2575b5f80fd5b348015610263575f80fd5b50610277610272366004614b41565b61079d565b005b348015610284575f80fd5b50610277610293366004614b7c565b6107ae565b3480156102a3575f80fd5b506102776102b2366004614b93565b610a41565b3480156102c2575f80fd5b506102cb600a81565b60405160ff90911681526020015b60405180910390f35b3480156102ed575f80fd5b506102776102fc366004614b41565b610b1e565b34801561030c575f80fd5b5061027761031b366004614baa565b610b2a565b34801561032b575f80fd5b5061027761033a366004614bf8565b6110de565b34801561034a575f80fd5b5061035e610359366004614b7c565b611152565b6040516001600160401b0390911681526020016102d9565b348015610381575f80fd5b506103906001600160991b0181565b6040516001600160a01b0390911681526020016102d9565b3480156103b3575f80fd5b506103bd61271081565b60405161ffff90911681526020016102d9565b3480156103db575f80fd5b506102776103ea366004614c2d565b6111a6565b3480156103fa575f80fd5b50610277610409366004614b41565b6111b9565b348015610419575f80fd5b506104226111c5565b6040519081526020016102d9565b34801561043b575f80fd5b5061027761044a366004614c2d565b6111d4565b34801561045a575f80fd5b50610463601481565b60405163ffffffff90911681526020016102d9565b348015610483575f80fd5b50610277610492366004614bf8565b6111e0565b3480156104a2575f80fd5b506104226104b1366004614c8f565b611433565b3480156104c1575f80fd5b506104225f81565b3480156104d4575f80fd5b506102776104e3366004614b41565b611453565b3480156104f3575f80fd5b50610277610502366004614c2d565b61145f565b348015610512575f80fd5b50610277610521366004614bf8565b61146b565b348015610531575f80fd5b506102cb603081565b348015610545575f80fd5b50610277610554366004614caa565b61166c565b348015610564575f80fd5b50610277610573366004614b7c565b61171d565b348015610583575f80fd5b50610422610592366004614cd8565b6117b1565b3480156105a2575f80fd5b506102776105b1366004614c2d565b61188a565b3480156105c1575f80fd5b506104226105d0366004614cd8565b611896565b6104226105e3366004614d02565b611a85565b3480156105f3575f80fd5b506104227f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610626575f80fd5b506103906005600160991b0181565b348015610640575f80fd5b5061027761064f366004614b7c565b611ab9565b34801561065f575f80fd5b5061035e611d12565b348015610673575f80fd5b506104227fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b3480156106a6575f80fd5b506102776106b5366004614b7c565b611d34565b6104226106c8366004614b7c565b611e50565b3480156106d8575f80fd5b506102cb601481565b3480156106ec575f80fd5b506107006106fb366004614cd8565b611e7c565b604080519283526001600160401b039091166020830152016102d9565b348015610728575f80fd5b5061073c610737366004614b7c565b611fff565b6040516102d99190614dd8565b348015610754575f80fd5b5061035e6202a30081565b34801561076a575f80fd5b50610277610779366004614caa565b61214e565b348015610789575f80fd5b50610422610798366004614e8e565b6121e5565b6107a98383835f61221d565b505050565b5f6107b7612249565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107f1576107f1614d63565b600581111561080257610802614d63565b815260200160018201805461081690614ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461084290614ef9565b801561088d5780601f106108645761010080835404028352916020019161088d565b820191905f5260205f20905b81548152906001019060200180831161087057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561090557610905614d63565b14610941575f8381526005830160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109df9190810190615034565b6040518263ffffffff1660e01b81526004016109fb9190615065565b6020604051808303815f875af1158015610a17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3b9190615077565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a8a575080546001600160401b03808416911610155b15610aa85760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ad28361226d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a3b8383835f612281565b5f610b33612249565b600781015490915060ff1615610b5c57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc39190615077565b836020013514610bec576040516372b0a7e760e11b815260208401356004820152602401610938565b30610bfd606085016040860161508e565b6001600160a01b031614610c4057610c1b606084016040850161508e565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610938565b5f610c4e60608501856150a9565b905090505f805b828163ffffffff161015610ed4575f610c7160608801886150a9565b8363ffffffff16818110610c8757610c876150ee565b9050602002810190610c999190615102565b610ca29061516d565b80516040519192505f916006880191610cba916151e8565b90815260200160405180910390205414610cea57805160405163a41f772f60e01b81526109389190600401615065565b805151601414610d10578051604051633e08a12560e11b81526109389190600401615065565b5f6002885f013584604051602001610d3f92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d59916151e8565b602060405180830381855afa158015610d74573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d979190615077565b90508086600601835f0151604051610daf91906151e8565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610def908261523d565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e5e908561530c565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610eb991906001600160401b0391909116815260200190565b60405180910390a3505080610ecd9061532c565b9050610c55565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610f17910460ff168361534e565b6001600160401b03161015610f4a57604051633e1a785160e01b81526001600160401b0382166004820152602401610938565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f6e876125b6565b604001516040518263ffffffff1660e01b8152600401610f8e9190615065565b602060405180830381865af4158015610fa9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fcd9190615077565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b815260040161100791906154a4565b5f60405180830381865af4158015611021573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110489190810190615034565b90505f60028260405161105b91906151e8565b602060405180830381855afa158015611076573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110999190615077565b90508281146110c55760405163baaea89d60e01b81526004810182905260248101849052604401610938565b5050506007909201805460ff1916600117905550505050565b6110e7826126cc565b611107576040516330efa98b60e01b815260048101839052602401610938565b5f61111183611fff565b519050600281600581111561112857611128614d63565b14611148578060405163170cc93360e21b81526004016109389190614f2b565b610a3b83836126f5565b5f8061115c61299b565b6003015461116a9084615538565b905080158061117f57506001600160401b0381115b156111a05760405163222d164360e21b815260048101849052602401610938565b92915050565b6111b284848484612281565b5050505050565b610a3b8383835f6129bf565b5f6111ce612249565b54919050565b610a3b84848484612c06565b5f6111e961299b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561122257611222614d63565b600381111561123357611233614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112a982611fff565b90506001835160038111156112c0576112c0614d63565b146112e1578251604051633b0d540d60e21b81526109389190600401615557565b6004815160058111156112f6576112f6614d63565b0361130c5761130486612c32565b505050505050565b8260a001516001600160401b031681608001516001600160401b031610156113ac575f8061133987611e7c565b915091508184146113675760405163fee3144560e01b81526004810183905260248101859052604401610938565b8460a001516001600160401b0316816001600160401b031610156113a957604051632e19bc2d60e11b81526001600160401b0382166004820152602401610938565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f61143c61299b565b600301546111a0906001600160401b038416615571565b6107a98383835f612c06565b6111b2848484846129bf565b611473612e03565b5f61147c61299b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156114b5576114b5614d63565b60038111156114c6576114c6614d63565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561153f5761153f614d63565b14611560578051604051633b0d540d60e21b81526109389190600401615557565b5f61156e8260400151611fff565b9050600461157f8360400151611fff565b51600581111561159157611591614d63565b141580156115b857508160c001516001600160401b031681608001516001600160401b0316105b15611646575f806115c886611e7c565b91509150818460400151146116015781846040015160405163fee3144560e01b8152600401610938929190918252602082015260400190565b806001600160401b03168460c001516001600160401b0316111561164357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610938565b50505b61164f85612c32565b50505061166860015f80516020615a4483398151915255565b5050565b5f61167561299b565b90506001600160a01b0382166116a95760405163caa903f960e01b81526001600160a01b0383166004820152602401610938565b5f8381526006820160205260409020546001600160a01b031633146116ef57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610938565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61172661299b565b90505f61173283611fff565b519050600481600581111561174957611749614d63565b14611769578060405163170cc93360e21b81526004016109389190614f2b565b5f8381526006830160205260409020546001600160a01b0316331461178e57336116ca565b5f8381526006830160205260409020546107a9906001600160a01b031684612e4d565b5f6117ba612e03565b5f6117c361299b565b90505f806117d085612e77565b915091506117dd826126cc565b6117eb5750915061186f9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b0391821691168061182d5750805b60048351600581111561184257611842614d63565b03611851576118518185612e4d565b611867826118628560400151611433565b61322c565b509193505050505b61188560015f80516020615a4483398151915255565b919050565b610a3b8484848461221d565b5f806118a0612249565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118c7876125b6565b604001516040518263ffffffff1660e01b81526004016118e79190615065565b6040805180830381865af4158015611901573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119259190615588565b915091508061194b57604051632d07135360e01b81528115156004820152602401610938565b5f8281526004840160205260409020805461196590614ef9565b90505f036119895760405163089938b360e11b815260048101839052602401610938565b60015f838152600580860160205260409091205460ff16908111156119b0576119b0614d63565b146119e3575f8281526005840160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b5f82815260048401602052604081206119fb91614a8d565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f611a8e612e03565b611a9a8484843461323f565b9050611ab260015f80516020615a4483398151915255565b9392505050565b5f611ac261299b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611afb57611afb614d63565b6003811115611b0c57611b0c614d63565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b8557611b85614d63565b14158015611ba65750600381516003811115611ba357611ba3614d63565b14155b15611bc7578051604051633b0d540d60e21b81526109389190600401615557565b5f611bd58260400151611fff565b905080606001516001600160401b03165f03611c07576040516339b894f960e21b815260048101859052602401610938565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c7593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c8f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cb69190810190615034565b6040518263ffffffff1660e01b8152600401611cd29190615065565b6020604051808303815f875af1158015611cee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b29190615077565b5f611d1b612249565b60030154600160401b90046001600160401b0316919050565b5f611d3d612249565b5f8381526004820160205260409020805491925090611d5b90614ef9565b90505f03611d7f5760405163089938b360e11b815260048101839052602401610938565b60015f838152600580840160205260409091205460ff1690811115611da657611da6614d63565b14611dd9575f8281526005820160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e1092016155ab565b6020604051808303815f875af1158015611e2c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a99190615077565b5f611e59612e03565b611e6482333461346e565b905061188560015f80516020615a4483398151915255565b5f805f611e88846125b6565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611ec89190615065565b606060405180830381865af4158015611ee3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f079190615635565b9250925092505f611f16612249565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f6a57604051632e19bc2d60e11b81526001600160401b0384166004820152602401610938565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611fea90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b612007614ac4565b5f612010612249565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff9091169081111561204a5761204a614d63565b600581111561205b5761205b614d63565b815260200160018201805461206f90614ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461209b90614ef9565b80156120e65780601f106120bd576101008083540402835291602001916120e6565b820191905f5260205f20905b8154815290600101906020018083116120c957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b0381166121805760405163caa903f960e01b81526001600160a01b0382166004820152602401610938565b5f61218961299b565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121b757336116ca565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806121ef612249565b905080600601848460405161220592919061566a565b90815260200160405180910390205491505092915050565b61222984848484612281565b610a3b57604051631036cf9160e11b815260048101859052602401610938565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b6122756136ae565b61227e816136f9565b50565b5f8061228b61299b565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156122c4576122c4614d63565b60038111156122d5576122d5614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61234b82611fff565b905060028351600381111561236257612362614d63565b14612383578251604051633b0d540d60e21b81526109389190600401615557565b60208301516001600160a01b0316331461241f575f8281526006850160205260409020546001600160a01b031633146123bc57336116ca565b5f82815260068501602052604090205460c08201516123eb91600160b01b90046001600160401b03169061530c565b6001600160401b031642101561241f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b60028151600581111561243457612434614d63565b036125565760028401546080840151612456916001600160401b03169061530c565b6001600160401b031642101561248a5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b871561249c5761249a82886126f5565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516124d59184916124d09190615679565b613773565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561251884888c61393d565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125ae9350505050565b60048151600581111561256b5761256b614d63565b036125925761257b83878b61393d565b5061258589612c32565b60019450505050506125ae565b805160405163170cc93360e21b81526109389190600401614f2b565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561261a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126419190810190615699565b915091508061266357604051636b2f19e960e01b815260040160405180910390fd5b815115612689578151604051636ba589a560e01b81526004810191909152602401610938565b60208201516001600160a01b0316156126c5576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b5092915050565b5f806126d661299b565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612740573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127679190810190615699565b915091508061278957604051636b2f19e960e01b815260040160405180910390fd5b5f61279261299b565b60058101548451919250146127c0578251604051636ba589a560e01b81526004810191909152602401610938565b60208301516001600160a01b0316156127fc576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b60208301516001600160a01b031615612838576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128759190615065565b6040805180830381865af415801561288f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b39190615729565b915091508188146128e15760405163fee3144560e01b81526004810183905260248101899052604401610938565b5f8881526006840160205260409020600101546001600160401b039081169082161115612972575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612990565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806129c961299b565b90506129d486613b2b565b5f6129de87611fff565b90506129e9876126cc565b6129f8576001925050506125ae565b5f8781526006830160205260409020546001600160a01b03163314612a1d57336116ca565b5f87815260068301602052604090205460c0820151612a4c91600160b01b90046001600160401b03169061530c565b6001600160401b03168160e001516001600160401b03161015612a935760e081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610938565b5f8615612aab57612aa488876126f5565b9050612ac9565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612aee90611433565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612b58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b7c9190615077565b90506001600160a01b038616612ba8575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612bc790849061574c565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612c12848484846129bf565b610a3b57604051635bff683f60e11b815260048101859052602401610938565b5f612c3b61299b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c7457612c74614d63565b6003811115612c8557612c85614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cf9613e16565b8260800151612d08919061530c565b6001600160401b0316421015612d3c5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d97575060208201515b5f80612da4838886613e31565b91509150612dbd85602001516118628760600151611433565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a44833981519152805460011901612e3457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a4483398151915255565b5f612e5661299b565b5f838152600a8201602052604081208054919055909150610a3b8482613ede565b5f612e80614ac4565b5f612e89612249565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612eb0886125b6565b604001516040518263ffffffff1660e01b8152600401612ed09190615065565b6040805180830381865af4158015612eea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0e9190615588565b915091508015612f3557604051632d07135360e01b81528115156004820152602401610938565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f6d57612f6d614d63565b6005811115612f7e57612f7e614d63565b8152602001600182018054612f9290614ef9565b80601f0160208091040260200160405190810160405280929190818152602001828054612fbe90614ef9565b80156130095780601f10612fe057610100808354040283529160200191613009565b820191905f5260205f20905b815481529060010190602001808311612fec57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561308157613081614d63565b141580156130a2575060018151600581111561309f5761309f614d63565b14155b156130c357805160405163170cc93360e21b81526109389190600401614f2b565b6003815160058111156130d8576130d8614d63565b036130e657600481526130eb565b600581525b83600601816020015160405161310191906151e8565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561314457613144614d63565b02179055506020820151600182019061315d908261523d565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116686001600160a01b03831682613f3c565b5f8061324961299b565b600281015490915061ffff600160401b90910481169086161080613272575061271061ffff8616115b1561329657604051635f12e6c360e11b815261ffff86166004820152602401610938565b60028101546001600160401b0390811690851610156132d2576040516202a06d60e11b81526001600160401b0385166004820152602401610938565b80548310806132e45750806001015483115b156133055760405163222d164360e21b815260048101849052602401610938565b825f61331082611152565b90505f6133d76133208a8061575f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133619250505060208c018c61575f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133a59250505060608d0160408e01614c8f565b6133b260608e018e6157a1565b6133bb906157b5565b6133c860808f018f6157a1565b6133d1906157b5565b87613fcf565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061347861299b565b90505f61348484611152565b90505f61349087611fff565b905061349b876126cc565b6134bb576040516330efa98b60e01b815260048101889052602401610938565b6002815160058111156134d0576134d0614d63565b146134f157805160405163170cc93360e21b81526109389190600401614f2b565b5f828260a00151613502919061530c565b905083600201600a9054906101000a90046001600160401b0316826040015161352b919061534e565b6001600160401b0316816001600160401b0316111561356857604051636d51fe0560e11b81526001600160401b0382166004820152602401610938565b5f806135748a84613773565b915091505f8a836040516020016135a292919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166136f757604051631afcd79f60e31b815260040160405180910390fd5b565b6137016136ae565b61370a816143b9565b6137126143d2565b61227e6060820135608083013561372f60c0850160a08601614c8f565b61373f60e0860160c0870161587c565b613750610100870160e08801615895565b61010087013561376861014089016101208a0161508e565b8861014001356143e2565b5f805f61377e612249565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137ae85826145a4565b5f6137b887614811565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561385c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138839190810190615034565b6040518263ffffffff1660e01b815260040161389f9190615065565b6020604051808303815f875af11580156138bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138df9190615077565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f8061394761299b565b90505f6139578660400151611fff565b90505f60038251600581111561396f5761396f614d63565b148061398d575060048251600581111561398b5761398b614d63565b145b1561399d575060e08101516139da565b6002825160058111156139b2576139b2614d63565b036139be5750426139da565b815160405163170cc93360e21b81526109389190600401614f2b565b86608001516001600160401b0316816001600160401b031611613a02575f9350505050611ab2565b600483015460608801515f916001600160a01b031690634f22429f90613a2790611433565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613aa8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613acc9190615077565b90506001600160a01b038716613ae457876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613b34612249565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b6e57613b6e614d63565b6005811115613b7f57613b7f614d63565b8152602001600182018054613b9390614ef9565b80601f0160208091040260200160405190810160405280929190818152602001828054613bbf90614ef9565b8015613c0a5780601f10613be157610100808354040283529160200191613c0a565b820191905f5260205f20905b815481529060010190602001808311613bed57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c8257613c82614d63565b14613cb5575f8381526005830160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613cfa57613cfa614d63565b021790555060208201516001820190613d13908261523d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613db38482613773565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613e08939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613e1f612249565b600101546001600160401b0316919050565b5f805f613e3c61299b565b5f86815260088201602052604081208054908290559192509081908015613ed0575f87815260068501602052604090205461271090613e8690600160a01b900461ffff1683615571565b613e909190615538565b91508184600a015f8981526020019081526020015f205f828254613eb4919061574c565b90915550613ec4905082826158b5565b9250613ed08984613ede565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613f2a575f80fd5b505af1158015611304573d5f803e3d5ffd5b80471015613f5f5760405163cd78605960e01b8152306004820152602401610938565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613fa8576040519150601f19603f3d011682016040523d82523d5f602084013e613fad565b606091505b50509050806107a957604051630a12f52160e11b815260040160405180910390fd5b5f613fd8612249565b6007015460ff16613ffc57604051637fab81e560e01b815260040160405180910390fd5b5f614005612249565b905042866001600160401b031611158061403457506140276202a3004261574c565b866001600160401b031610155b1561405d57604051635879da1360e11b81526001600160401b0387166004820152602401610938565b60038101546001600160401b039061408090600160401b9004821685831661574c565b11156140aa57604051633e1a785160e01b81526001600160401b0384166004820152602401610938565b6140b38561487a565b6140bc8461487a565b86516030146140e35786516040516326475b2f60e11b815260040161093891815260200190565b87516014146141075787604051633e08a12560e11b81526004016109389190615065565b5f801b816006018960405161411c91906151e8565b9081526020016040518091039020541461414b578760405163a41f772f60e01b81526004016109389190615065565b614155835f6145a4565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016141d5919061592e565b5f60405180830381865af41580156141ef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261421691908101906159e5565b5f82815260048601602052604090209193509150614234828261523d565b5081836006018b60405161424891906151e8565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614284908590600401615065565b6020604051808303815f875af11580156142a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142c49190615077565b5f8481526005860160205260409020805460ff191660019081178255919250016142ee8c8261523d565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690556143458b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a6040516143a2939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b6143c16136ae565b6143c9614999565b61227e816149a1565b6143da6136ae565b6136f7614a85565b6143ea6136ae565b5f6143f361299b565b905061ffff8616158061440b575061271061ffff8716115b1561442f57604051635f12e6c360e11b815261ffff87166004820152602401610938565b878911156144535760405163222d164360e21b8152600481018a9052602401610938565b60ff851615806144665750600a60ff8616115b156144895760405163170db35960e31b815260ff86166004820152602401610938565b614491613e16565b6001600160401b0316876001600160401b031610156144cd576040516202a06d60e11b81526001600160401b0388166004820152602401610938565b835f036144ed5760405163a733007160e01b815260040160405180910390fd5b8161450e57604051632f6bd1db60e01b815260048101839052602401610938565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145ad612249565b90505f826001600160401b0316846001600160401b031611156145db576145d48385615679565b90506145e8565b6145e58484615679565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580614655575060018401548151614651916001600160401b03169061574c565b8210155b1561467d576001600160401b038084166060830152828252604082015116602082015261469c565b828160600181815161468f919061530c565b6001600160401b03169052505b60608101516146ac90606461534e565b602082015160018601546001600160401b0392909216916146d79190600160401b900460ff1661534e565b6001600160401b0316101561471057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610938565b8581604001818151614722919061530c565b6001600160401b0316905250604081018051869190614742908390615679565b6001600160401b03169052506001840154604082015160649161477091600160401b90910460ff169061534e565b6001600160401b031610156147a9576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610938565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061481b612249565b5f848152600582016020526040902060020180549192509060089061484f90600160401b90046001600160401b0316615a28565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614893575060208101515115155b156148c757805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610938565b602081015151815163ffffffff16111561490a57805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610938565b60015b81602001515181101561166857602082015161492a6001836158b5565b8151811061493a5761493a6150ee565b60200260200101516001600160a01b031682602001518281518110614961576149616150ee565b60200260200101516001600160a01b0316101561499157604051630dbc8d5f60e31b815260040160405180910390fd5b60010161490d565b6136f76136ae565b6149a96136ae565b5f6149b2612249565b82358155905060146149ca6060840160408501615895565b60ff1611806149e957506149e46060830160408401615895565b60ff16155b15614a1d576149fe6060830160408401615895565b604051634a59bbff60e11b815260ff9091166004820152602401610938565b614a2d6060830160408401615895565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a5e6040830160208401614c8f565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612e3a6136ae565b508054614a9990614ef9565b5f825580601f10614aa8575050565b601f0160209004905f5260205f209081019061227e9190614b09565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614b1d575f8155600101614b0a565b5090565b801515811461227e575f80fd5b803563ffffffff81168114611885575f80fd5b5f805f60608486031215614b53575f80fd5b833592506020840135614b6581614b21565b9150614b7360408501614b2e565b90509250925092565b5f60208284031215614b8c575f80fd5b5035919050565b5f6101608284031215614ba4575f80fd5b50919050565b5f8060408385031215614bbb575f80fd5b82356001600160401b03811115614bd0575f80fd5b830160808186031215614be1575f80fd5b9150614bef60208401614b2e565b90509250929050565b5f8060408385031215614c09575f80fd5b82359150614bef60208401614b2e565b6001600160a01b038116811461227e575f80fd5b5f805f8060808587031215614c40575f80fd5b843593506020850135614c5281614b21565b9250614c6060408601614b2e565b91506060850135614c7081614c19565b939692955090935050565b6001600160401b038116811461227e575f80fd5b5f60208284031215614c9f575f80fd5b8135611ab281614c7b565b5f8060408385031215614cbb575f80fd5b823591506020830135614ccd81614c19565b809150509250929050565b5f60208284031215614ce8575f80fd5b611ab282614b2e565b803561ffff81168114611885575f80fd5b5f805f60608486031215614d14575f80fd5b83356001600160401b03811115614d29575f80fd5b840160a08187031215614d3a575f80fd5b9250614d4860208501614cf1565b91506040840135614d5881614c7b565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d8757614d87614d63565b9052565b5f5b83811015614da5578181015183820152602001614d8d565b50505f910152565b5f8151808452614dc4816020860160208601614d8b565b601f01601f19169290920160200192915050565b60208152614dea602082018351614d77565b5f6020830151610100806040850152614e07610120850183614dad565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614e4660a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e9f575f80fd5b82356001600160401b0380821115614eb5575f80fd5b818501915085601f830112614ec8575f80fd5b813581811115614ed6575f80fd5b866020828501011115614ee7575f80fd5b60209290920196919550909350505050565b600181811c90821680614f0d57607f821691505b602082108103614ba457634e487b7160e01b5f52602260045260245ffd5b602081016111a08284614d77565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f6f57614f6f614f39565b60405290565b604080519081016001600160401b0381118282101715614f6f57614f6f614f39565b604051601f8201601f191681016001600160401b0381118282101715614fbf57614fbf614f39565b604052919050565b5f6001600160401b03821115614fdf57614fdf614f39565b50601f01601f191660200190565b5f82601f830112614ffc575f80fd5b815161500f61500a82614fc7565b614f97565b818152846020838601011115615023575f80fd5b6125ae826020830160208701614d8b565b5f60208284031215615044575f80fd5b81516001600160401b03811115615059575f80fd5b6125ae84828501614fed565b602081525f611ab26020830184614dad565b5f60208284031215615087575f80fd5b5051919050565b5f6020828403121561509e575f80fd5b8135611ab281614c19565b5f808335601e198436030181126150be575f80fd5b8301803591506001600160401b038211156150d7575f80fd5b6020019150600581901b3603821315613936575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615116575f80fd5b9190910192915050565b5f82601f83011261512f575f80fd5b813561513d61500a82614fc7565b818152846020838601011115615151575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561517d575f80fd5b615185614f4d565b82356001600160401b038082111561519b575f80fd5b6151a736838701615120565b835260208501359150808211156151bc575f80fd5b506151c936828601615120565b60208301525060408301356151dd81614c7b565b604082015292915050565b5f8251615116818460208701614d8b565b601f8211156107a957805f5260205f20601f840160051c8101602085101561521e5750805b601f840160051c820191505b818110156111b2575f815560010161522a565b81516001600160401b0381111561525657615256614f39565b61526a816152648454614ef9565b846151f9565b602080601f83116001811461529d575f84156152865750858301515b5f19600386901b1c1916600185901b178555611304565b5f85815260208120601f198616915b828110156152cb578886015182559484019460019091019084016152ac565b50858210156152e857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126c5576126c56152f8565b5f63ffffffff808316818103615344576153446152f8565b6001019392505050565b6001600160401b03818116838216028082169190828114615371576153716152f8565b505092915050565b5f808335601e1984360301811261538e575f80fd5b83016020810192503590506001600160401b038111156153ac575f80fd5b803603821315613936575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561549757848303601f19018952813536889003605e1901811261541e575f80fd5b8701606061542c8280615379565b82875261543c83880182846153ba565b9250505061544c86830183615379565b8683038888015261545e8382846153ba565b92505050604080830135925061547383614c7b565b6001600160401b0392909216949091019390935297830197908301906001016153f9565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356154c881614c19565b6001600160a01b031660608381019190915283013536849003601e190181126154ef575f80fd5b83016020810190356001600160401b0381111561550a575f80fd5b8060051b360382131561551b575f80fd5b60808085015261552f60a0850182846153e2565b95945050505050565b5f8261555257634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061556b5761556b614d63565b91905290565b80820281158282048414176111a0576111a06152f8565b5f8060408385031215615599575f80fd5b825191506020830151614ccd81614b21565b5f60208083525f84546155bd81614ef9565b806020870152604060018084165f81146155de57600181146155fa57615627565b60ff19851660408a0152604084151560051b8a01019550615627565b895f5260205f205f5b8581101561561e5781548b8201860152908301908801615603565b8a016040019650505b509398975050505050505050565b5f805f60608486031215615647575f80fd5b83519250602084015161565981614c7b565b6040850151909250614d5881614c7b565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126c5576126c56152f8565b5f80604083850312156156aa575f80fd5b82516001600160401b03808211156156c0575f80fd5b90840190606082870312156156d3575f80fd5b6156db614f4d565b8251815260208301516156ed81614c19565b6020820152604083015182811115615703575f80fd5b61570f88828601614fed565b6040830152508094505050506020830151614ccd81614b21565b5f806040838503121561573a575f80fd5b825191506020830151614ccd81614c7b565b808201808211156111a0576111a06152f8565b5f808335601e19843603018112615774575f80fd5b8301803591506001600160401b0382111561578d575f80fd5b602001915036819003821315613936575f80fd5b5f8235603e19833603018112615116575f80fd5b5f604082360312156157c5575f80fd5b6157cd614f75565b6157d683614b2e565b81526020808401356001600160401b03808211156157f2575f80fd5b9085019036601f830112615804575f80fd5b81358181111561581657615816614f39565b8060051b9150615827848301614f97565b8181529183018401918481019036841115615840575f80fd5b938501935b8385101561586a578435925061585a83614c19565b8282529385019390850190615845565b94860194909452509295945050505050565b5f6020828403121561588c575f80fd5b611ab282614cf1565b5f602082840312156158a5575f80fd5b813560ff81168114611ab2575f80fd5b818103818111156111a0576111a06152f8565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156159235784516001600160a01b031682529383019360019290920191908301906158fa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615954610100840182614dad565b90506040840151601f19808584030160608601526159728383614dad565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159a283836158c8565b925060a08601519150808584030160c0860152506159c082826158c8565b91505060c08401516159dd60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159f6575f80fd5b8251915060208301516001600160401b03811115615a12575f80fd5b615a1e85828601614fed565b9150509250929050565b5f6001600160401b03808316818103615344576153446152f856fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220c19ae8f31c532736e1432f7571a1f2b2bd478d36426ad979b9746f2a8d97fb3e64736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -3320,7 +3320,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseUptime // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220d0480ce8a92db2f68f39def88a3ded31f768999147bdb5eeb25933715298f87d64736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220f730711c5b5760a4acff40008a9e3ea299c9a38a322da3ee6c00fb3fc9503a9d64736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index 7909bd934..782eb29a2 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -92,7 +92,7 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161390a38038061390a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bd8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610153575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f1414610300578063d588c18f14610330578063d5f20ff614610343578063df93d8de14610363578063f2fde38b1461036d578063fd7ac5e714610380575f80fd5b8063a3a65e4814610265578063b771b3bc14610278578063bb0b193814610286578063bc5fbfec146102d1578063bee0a03f146102e5578063c974d1b6146102f8575f80fd5b8063732214f811610110578063732214f8146101c75780638280a25a146101ce5780638da5cb5b146101e85780639681d9401461022c57806397fb70d41461023f5780639ba96b8614610252575f80fd5b80630322ed981461015757806320d91b7a1461016c5780635dc1f5351461017f57806360305d62146101a257806363e2ca97146101a2578063715018a6146101bf575b5f80fd5b61016a61016536600461295e565b610393565b005b61016a61017a36600461298d565b610631565b5f80516020613748833981519152545b6040519081526020015b60405180910390f35b6101aa601481565b60405163ffffffff9091168152602001610199565b61016a610c0a565b61018f5f81565b6101d6603081565b60405160ff9091168152602001610199565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b039091168152602001610199565b61018f61023a3660046129db565b610c1d565b61016a61024d36600461295e565b610c30565b61018f610260366004612a08565b610c44565b61018f6102733660046129db565b610d1a565b6102146005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b039091168152602001610199565b61018f5f8051602061374883398151915281565b61016a6102f336600461295e565b610f0c565b6101d6601481565b61031361030e3660046129db565b61104d565b604080519283526001600160401b03909116602083015201610199565b61016a61033e366004612a6e565b6111dc565b61035661035136600461295e565b6112ea565b6040516101999190612b20565b6102b96202a30081565b61016a61037b366004612bd6565b611444565b61018f61038e366004612bf8565b61147e565b5f8181525f8051602061376883398151915260205260408082208151610100810190925280545f8051602061374883398151915293929190829060ff1660058111156103e1576103e1612a9f565b60058111156103f2576103f2612a9f565b815260200160018201805461040690612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461043290612c63565b801561047d5780601f106104545761010080835404028352916020019161047d565b820191905f5260205f20905b81548152906001019060200180831161046057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104f5576104f5612a9f565b14610531575f8381526005830160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156105a8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105cf9190810190612dac565b6040518263ffffffff1660e01b81526004016105eb9190612ddd565b6020604051808303815f875af1158015610607573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062b9190612def565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137488339815191529060ff161561068357604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ea9190612def565b836020013514610713576040516372b0a7e760e11b815260208401356004820152602401610528565b306107246060850160408601612bd6565b6001600160a01b031614610767576107426060840160408501612bd6565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610528565b5f6107756060850185612e06565b905090505f805b828163ffffffff1610156109fb575f6107986060880188612e06565b8363ffffffff168181106107ae576107ae612e4b565b90506020028101906107c09190612e5f565b6107c990612eca565b80516040519192505f9160068801916107e191612f45565b9081526020016040518091039020541461081157805160405163a41f772f60e01b81526105289190600401612ddd565b805151601414610837578051604051633e08a12560e11b81526105289190600401612ddd565b5f6002885f01358460405160200161086692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261088091612f45565b602060405180830381855afa15801561089b573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108be9190612def565b90508086600601835f01516040516108d69190612f45565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906109169082612fa1565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109859085613074565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d784604001516040516109e091906001600160401b0391909116815260200190565b60405180910390a35050806109f490613094565b905061077c565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610a43910460ff16836130b6565b6001600160401b03161015610a7657604051633e1a785160e01b81526001600160401b0382166004820152602401610528565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a9a876114d9565b604001516040518263ffffffff1660e01b8152600401610aba9190612ddd565b602060405180830381865af4158015610ad5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af99190612def565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610b33919061320c565b5f60405180830381865af4158015610b4d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b749190810190612dac565b90505f600282604051610b879190612f45565b602060405180830381855afa158015610ba2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610bc59190612def565b9050828114610bf15760405163baaea89d60e01b81526004810182905260248101849052604401610528565b5050506007909201805460ff1916600117905550505050565b610c126115ef565b610c1b5f61164a565b565b5f80610c28836116ba565b509392505050565b610c386115ef565b610c4181611a72565b50565b5f610c4d6115ef565b610d11610c5a84806132a0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9b9250505060208601866132a0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610cdf9250505060608701604088016132e2565b610cec60608801886132fd565b610cf590613311565b610d0260808901896132fd565b610d0b90613311565b87611d68565b90505b92915050565b5f5f80516020613748833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610d4e876114d9565b604001516040518263ffffffff1660e01b8152600401610d6e9190612ddd565b6040805180830381865af4158015610d88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dac91906133e7565b9150915080610dd257604051632d07135360e01b81528115156004820152602401610528565b5f82815260048401602052604090208054610dec90612c63565b90505f03610e105760405163089938b360e11b815260048101839052602401610528565b60015f838152600580860160205260409091205460ff1690811115610e3757610e37612a9f565b14610e6a575f8281526005840160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b5f8281526004840160205260408120610e82916128ca565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137488339815191529190610f5390612c63565b90505f03610f775760405163089938b360e11b815260048101839052602401610528565b60015f838152600580840160205260409091205460ff1690811115610f9e57610f9e612a9f565b14610fd1575f8281526005820160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb926110089201613408565b6020604051808303815f875af1158015611024573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110489190612def565b505050565b5f805f611059846114d9565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110999190612ddd565b606060405180830381865af41580156110b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d89190613492565b9250925092505f6110f35f8051602061374883398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561114757604051632e19bc2d60e11b81526001600160401b0384166004820152602401610528565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9906111c790869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112205750825b90505f826001600160401b0316600114801561123b5750303b155b905081158015611249575080155b156112675760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561129157845460ff60401b1916600160401b1785555b61129b878761216c565b83156112e157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112f2612901565b5f8281525f805160206137688339815191526020526040908190208151610100810190925280545f80516020613748833981519152929190829060ff16600581111561134057611340612a9f565b600581111561135157611351612a9f565b815260200160018201805461136590612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461139190612c63565b80156113dc5780601f106113b3576101008083540402835291602001916113dc565b820191905f5260205f20905b8154815290600101906020018083116113bf57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b61144c6115ef565b6001600160a01b03811661147557604051631e4fbdf760e01b81525f6004820152602401610528565b610c418161164a565b6040515f905f80516020613748833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906114c190869086906134d2565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561153d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261156491908101906134e1565b915091508061158657604051636b2f19e960e01b815260040160405180910390fd5b8151156115ac578151604051636ba589a560e01b81526004810191909152602401610528565b60208201516001600160a01b0316156115e8576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610528565b5092915050565b336116217f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c1b5760405163118cdaa760e01b8152336004820152602401610528565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f6116c3612901565b5f805160206137488339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116f6886114d9565b604001516040518263ffffffff1660e01b81526004016117169190612ddd565b6040805180830381865af4158015611730573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175491906133e7565b91509150801561177b57604051632d07135360e01b81528115156004820152602401610528565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff909116908111156117b3576117b3612a9f565b60058111156117c4576117c4612a9f565b81526020016001820180546117d890612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461180490612c63565b801561184f5780601f106118265761010080835404028352916020019161184f565b820191905f5260205f20905b81548152906001019060200180831161183257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156118c7576118c7612a9f565b141580156118e857506001815160058111156118e5576118e5612a9f565b14155b1561190957805160405163170cc93360e21b81526105289190600401612c9b565b60038151600581111561191e5761191e612a9f565b0361192c5760048152611931565b600581525b8360060181602001516040516119479190612f45565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561198a5761198a612a9f565b0217905550602082015160018201906119a39082612fa1565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376883398151915260205260408082208151610100810190925280545f8051602061374883398151915293929190829060ff166005811115611ac057611ac0612a9f565b6005811115611ad157611ad1612a9f565b8152602001600182018054611ae590612c63565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1190612c63565b8015611b5c5780601f10611b3357610100808354040283529160200191611b5c565b820191905f5260205f20905b815481529060010190602001808311611b3f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611bd457611bd4612a9f565b14611c07575f8381526005830160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c4c57611c4c612a9f565b021790555060208201516001820190611c659082612fa1565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611d05848261218a565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d5a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611dac57604051637fab81e560e01b815260040160405180910390fd5b5f80516020613748833981519152426001600160401b038716111580611de75750611dda6202a3004261356e565b866001600160401b031610155b15611e1057604051635879da1360e11b81526001600160401b0387166004820152602401610528565b60038101546001600160401b0390611e3390600160401b9004821685831661356e565b1115611e5d57604051633e1a785160e01b81526001600160401b0384166004820152602401610528565b611e6685612361565b611e6f84612361565b8651603014611e965786516040516326475b2f60e11b815260040161052891815260200190565b8751601414611eba5787604051633e08a12560e11b81526004016105289190612ddd565b5f801b8160060189604051611ecf9190612f45565b90815260200160405180910390205414611efe578760405163a41f772f60e01b81526004016105289190612ddd565b611f08835f612480565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f8891906135e7565b5f60405180830381865af4158015611fa2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611fc99190810190613696565b5f82815260048601602052604090209193509150611fe78282612fa1565b5081836006018b604051611ffb9190612f45565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612037908590600401612ddd565b6020604051808303815f875af1158015612053573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120779190612def565b5f8481526005860160205260409020805460ff191660019081178255919250016120a18c82612fa1565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690556120f88b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a604051612155939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b6121746126ea565b61217d82612733565b6121868161274c565b5050565b5f8281525f80516020613768833981519152602052604081206002015481905f8051602061374883398151915290600160c01b90046001600160401b03166121d28582612480565b5f6121dc8761275d565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612280573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122a79190810190612dac565b6040518263ffffffff1660e01b81526004016122c39190612ddd565b6020604051808303815f875af11580156122df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123039190612def565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff1615801561237a575060208101515115155b156123ae57805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610528565b602081015151815163ffffffff1611156123f157805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610528565b60015b8160200151518110156121865760208201516124116001836136d9565b8151811061242157612421612e4b565b60200260200101516001600160a01b03168260200151828151811061244857612448612e4b565b60200260200101516001600160a01b0316101561247857604051630dbc8d5f60e31b815260040160405180910390fd5b6001016123f4565b5f805160206137488339815191525f6001600160401b0380841690851611156124b4576124ad83856136ec565b90506124c1565b6124be84846136ec565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061252e57506001840154815161252a916001600160401b03169061356e565b8210155b15612556576001600160401b0380841660608301528282526040820151166020820152612575565b82816060018181516125689190613074565b6001600160401b03169052505b60608101516125859060646130b6565b602082015160018601546001600160401b0392909216916125b09190600160401b900460ff166130b6565b6001600160401b031610156125e957606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610528565b85816040018181516125fb9190613074565b6001600160401b031690525060408101805186919061261b9083906136ec565b6001600160401b03169052506001840154604082015160649161264991600160401b90910460ff16906130b6565b6001600160401b03161015612682576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610528565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c1b57604051631afcd79f60e31b815260040160405180910390fd5b61273b6126ea565b6127436127d2565b610c41816127da565b6127546126ea565b610c41816128c2565b5f8181525f805160206137688339815191526020526040812060020180545f8051602061374883398151915291906008906127a790600160401b90046001600160401b031661370c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610c1b6126ea565b6127e26126ea565b80355f8051602061374883398151915290815560146128076060840160408501613727565b60ff16118061282657506128216060830160408401613727565b60ff16155b1561285a5761283b6060830160408401613727565b604051634a59bbff60e11b815260ff9091166004820152602401610528565b61286a6060830160408401613727565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561289b60408301602084016132e2565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b61144c6126ea565b5080546128d690612c63565b5f825580601f106128e5575050565b601f0160209004905f5260205f2090810190610c419190612946565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561295a575f8155600101612947565b5090565b5f6020828403121561296e575f80fd5b5035919050565b803563ffffffff81168114612988575f80fd5b919050565b5f806040838503121561299e575f80fd5b82356001600160401b038111156129b3575f80fd5b8301608081860312156129c4575f80fd5b91506129d260208401612975565b90509250929050565b5f602082840312156129eb575f80fd5b610d1182612975565b6001600160401b0381168114610c41575f80fd5b5f8060408385031215612a19575f80fd5b82356001600160401b03811115612a2e575f80fd5b830160a08186031215612a3f575f80fd5b91506020830135612a4f816129f4565b809150509250929050565b6001600160a01b0381168114610c41575f80fd5b5f808284036080811215612a80575f80fd5b6060811215612a8d575f80fd5b508291506060830135612a4f81612a5a565b634e487b7160e01b5f52602160045260245ffd5b60068110612acf57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612aed578181015183820152602001612ad5565b50505f910152565b5f8151808452612b0c816020860160208601612ad3565b601f01601f19169290920160200192915050565b60208152612b32602082018351612ab3565b5f6020830151610100806040850152612b4f610120850183612af5565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b8e60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612be6575f80fd5b8135612bf181612a5a565b9392505050565b5f8060208385031215612c09575f80fd5b82356001600160401b0380821115612c1f575f80fd5b818501915085601f830112612c32575f80fd5b813581811115612c40575f80fd5b866020828501011115612c51575f80fd5b60209290920196919550909350505050565b600181811c90821680612c7757607f821691505b602082108103612c9557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610d148284612ab3565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612cdf57612cdf612ca9565b60405290565b604080519081016001600160401b0381118282101715612cdf57612cdf612ca9565b604051601f8201601f191681016001600160401b0381118282101715612d2f57612d2f612ca9565b604052919050565b5f6001600160401b03821115612d4f57612d4f612ca9565b50601f01601f191660200190565b5f82601f830112612d6c575f80fd5b8151612d7f612d7a82612d37565b612d07565b818152846020838601011115612d93575f80fd5b612da4826020830160208701612ad3565b949350505050565b5f60208284031215612dbc575f80fd5b81516001600160401b03811115612dd1575f80fd5b612da484828501612d5d565b602081525f610d116020830184612af5565b5f60208284031215612dff575f80fd5b5051919050565b5f808335601e19843603018112612e1b575f80fd5b8301803591506001600160401b03821115612e34575f80fd5b6020019150600581901b360382131561235a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612e73575f80fd5b9190910192915050565b5f82601f830112612e8c575f80fd5b8135612e9a612d7a82612d37565b818152846020838601011115612eae575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612eda575f80fd5b612ee2612cbd565b82356001600160401b0380821115612ef8575f80fd5b612f0436838701612e7d565b83526020850135915080821115612f19575f80fd5b50612f2636828601612e7d565b6020830152506040830135612f3a816129f4565b604082015292915050565b5f8251612e73818460208701612ad3565b601f82111561104857805f5260205f20601f840160051c81016020851015612f7b5750805b601f840160051c820191505b81811015612f9a575f8155600101612f87565b5050505050565b81516001600160401b03811115612fba57612fba612ca9565b612fce81612fc88454612c63565b84612f56565b602080601f831160018114613001575f8415612fea5750858301515b5f19600386901b1c1916600185901b178555613058565b5f85815260208120601f198616915b8281101561302f57888601518255948401946001909101908401613010565b508582101561304c57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115e8576115e8613060565b5f63ffffffff8083168181036130ac576130ac613060565b6001019392505050565b6001600160401b038181168382160280821691908281146130d9576130d9613060565b505092915050565b5f808335601e198436030181126130f6575f80fd5b83016020810192503590506001600160401b03811115613114575f80fd5b80360382131561235a575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131ff57848303601f19018952813536889003605e19018112613186575f80fd5b8701606061319482806130e1565b8287526131a48388018284613122565b925050506131b4868301836130e1565b868303888801526131c6838284613122565b9250505060408083013592506131db836129f4565b6001600160401b039290921694909101939093529783019790830190600101613161565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561323081612a5a565b6001600160a01b031660608381019190915283013536849003601e19018112613257575f80fd5b83016020810190356001600160401b03811115613272575f80fd5b8060051b3603821315613283575f80fd5b60808085015261329760a08501828461314a565b95945050505050565b5f808335601e198436030181126132b5575f80fd5b8301803591506001600160401b038211156132ce575f80fd5b60200191503681900382131561235a575f80fd5b5f602082840312156132f2575f80fd5b8135612bf1816129f4565b5f8235603e19833603018112612e73575f80fd5b5f60408236031215613321575f80fd5b613329612ce5565b61333283612975565b81526020808401356001600160401b038082111561334e575f80fd5b9085019036601f830112613360575f80fd5b81358181111561337257613372612ca9565b8060051b9150613383848301612d07565b818152918301840191848101903684111561339c575f80fd5b938501935b838510156133c657843592506133b683612a5a565b82825293850193908501906133a1565b94860194909452509295945050505050565b80518015158114612988575f80fd5b5f80604083850312156133f8575f80fd5b825191506129d2602084016133d8565b5f60208083525f845461341a81612c63565b806020870152604060018084165f811461343b576001811461345757613484565b60ff19851660408a0152604084151560051b8a01019550613484565b895f5260205f205f5b8581101561347b5781548b8201860152908301908801613460565b8a016040019650505b509398975050505050505050565b5f805f606084860312156134a4575f80fd5b8351925060208401516134b6816129f4565b60408501519092506134c7816129f4565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134f2575f80fd5b82516001600160401b0380821115613508575f80fd5b908401906060828703121561351b575f80fd5b613523612cbd565b82518152602083015161353581612a5a565b602082015260408301518281111561354b575f80fd5b61355788828601612d5d565b60408301525093506129d2915050602084016133d8565b80820180821115610d1457610d14613060565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135dc5784516001600160a01b031682529383019360019290920191908301906135b3565b509695505050505050565b60208152815160208201525f602083015160e0604084015261360d610100840182612af5565b90506040840151601f198085840301606086015261362b8383612af5565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261365b8383613581565b925060a08601519150808584030160c0860152506136798282613581565b91505060c0840151610c2860e08501826001600160401b03169052565b5f80604083850312156136a7575f80fd5b8251915060208301516001600160401b038111156136c3575f80fd5b6136cf85828601612d5d565b9150509250929050565b81810381811115610d1457610d14613060565b6001600160401b038281168282160390808211156115e8576115e8613060565b5f6001600160401b038083168181036130ac576130ac613060565b5f60208284031215613737575f80fd5b813560ff81168114612bf1575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a2646970667358221220900d036a7a05e5fb37337d2262013b02033c0a1714df827944de4ba50bc8aeb564736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b5060405161390a38038061390a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bd8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610153575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f1414610300578063d588c18f14610330578063d5f20ff614610343578063df93d8de14610363578063f2fde38b1461036d578063fd7ac5e714610380575f80fd5b8063a3a65e4814610265578063b771b3bc14610278578063bb0b193814610286578063bc5fbfec146102d1578063bee0a03f146102e5578063c974d1b6146102f8575f80fd5b8063732214f811610110578063732214f8146101c75780638280a25a146101ce5780638da5cb5b146101e85780639681d9401461022c57806397fb70d41461023f5780639ba96b8614610252575f80fd5b80630322ed981461015757806320d91b7a1461016c5780635dc1f5351461017f57806360305d62146101a257806363e2ca97146101a2578063715018a6146101bf575b5f80fd5b61016a61016536600461295e565b610393565b005b61016a61017a36600461298d565b610631565b5f80516020613748833981519152545b6040519081526020015b60405180910390f35b6101aa601481565b60405163ffffffff9091168152602001610199565b61016a610c0a565b61018f5f81565b6101d6603081565b60405160ff9091168152602001610199565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b039091168152602001610199565b61018f61023a3660046129db565b610c1d565b61016a61024d36600461295e565b610c30565b61018f610260366004612a08565b610c44565b61018f6102733660046129db565b610d1a565b6102146005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b039091168152602001610199565b61018f5f8051602061374883398151915281565b61016a6102f336600461295e565b610f0c565b6101d6601481565b61031361030e3660046129db565b61104d565b604080519283526001600160401b03909116602083015201610199565b61016a61033e366004612a6e565b6111dc565b61035661035136600461295e565b6112ea565b6040516101999190612b20565b6102b96202a30081565b61016a61037b366004612bd6565b611444565b61018f61038e366004612bf8565b61147e565b5f8181525f8051602061376883398151915260205260408082208151610100810190925280545f8051602061374883398151915293929190829060ff1660058111156103e1576103e1612a9f565b60058111156103f2576103f2612a9f565b815260200160018201805461040690612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461043290612c63565b801561047d5780601f106104545761010080835404028352916020019161047d565b820191905f5260205f20905b81548152906001019060200180831161046057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104f5576104f5612a9f565b14610531575f8381526005830160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156105a8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105cf9190810190612dac565b6040518263ffffffff1660e01b81526004016105eb9190612ddd565b6020604051808303815f875af1158015610607573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062b9190612def565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137488339815191529060ff161561068357604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ea9190612def565b836020013514610713576040516372b0a7e760e11b815260208401356004820152602401610528565b306107246060850160408601612bd6565b6001600160a01b031614610767576107426060840160408501612bd6565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610528565b5f6107756060850185612e06565b905090505f805b828163ffffffff1610156109fb575f6107986060880188612e06565b8363ffffffff168181106107ae576107ae612e4b565b90506020028101906107c09190612e5f565b6107c990612eca565b80516040519192505f9160068801916107e191612f45565b9081526020016040518091039020541461081157805160405163a41f772f60e01b81526105289190600401612ddd565b805151601414610837578051604051633e08a12560e11b81526105289190600401612ddd565b5f6002885f01358460405160200161086692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261088091612f45565b602060405180830381855afa15801561089b573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108be9190612def565b90508086600601835f01516040516108d69190612f45565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906109169082612fa1565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109859085613074565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d784604001516040516109e091906001600160401b0391909116815260200190565b60405180910390a35050806109f490613094565b905061077c565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610a43910460ff16836130b6565b6001600160401b03161015610a7657604051633e1a785160e01b81526001600160401b0382166004820152602401610528565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a9a876114d9565b604001516040518263ffffffff1660e01b8152600401610aba9190612ddd565b602060405180830381865af4158015610ad5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af99190612def565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610b33919061320c565b5f60405180830381865af4158015610b4d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b749190810190612dac565b90505f600282604051610b879190612f45565b602060405180830381855afa158015610ba2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610bc59190612def565b9050828114610bf15760405163baaea89d60e01b81526004810182905260248101849052604401610528565b5050506007909201805460ff1916600117905550505050565b610c126115ef565b610c1b5f61164a565b565b5f80610c28836116ba565b509392505050565b610c386115ef565b610c4181611a72565b50565b5f610c4d6115ef565b610d11610c5a84806132a0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9b9250505060208601866132a0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610cdf9250505060608701604088016132e2565b610cec60608801886132fd565b610cf590613311565b610d0260808901896132fd565b610d0b90613311565b87611d68565b90505b92915050565b5f5f80516020613748833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610d4e876114d9565b604001516040518263ffffffff1660e01b8152600401610d6e9190612ddd565b6040805180830381865af4158015610d88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dac91906133e7565b9150915080610dd257604051632d07135360e01b81528115156004820152602401610528565b5f82815260048401602052604090208054610dec90612c63565b90505f03610e105760405163089938b360e11b815260048101839052602401610528565b60015f838152600580860160205260409091205460ff1690811115610e3757610e37612a9f565b14610e6a575f8281526005840160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b5f8281526004840160205260408120610e82916128ca565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137488339815191529190610f5390612c63565b90505f03610f775760405163089938b360e11b815260048101839052602401610528565b60015f838152600580840160205260409091205460ff1690811115610f9e57610f9e612a9f565b14610fd1575f8281526005820160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb926110089201613408565b6020604051808303815f875af1158015611024573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110489190612def565b505050565b5f805f611059846114d9565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110999190612ddd565b606060405180830381865af41580156110b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d89190613492565b9250925092505f6110f35f8051602061374883398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561114757604051632e19bc2d60e11b81526001600160401b0384166004820152602401610528565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9906111c790869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112205750825b90505f826001600160401b0316600114801561123b5750303b155b905081158015611249575080155b156112675760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561129157845460ff60401b1916600160401b1785555b61129b878761216c565b83156112e157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112f2612901565b5f8281525f805160206137688339815191526020526040908190208151610100810190925280545f80516020613748833981519152929190829060ff16600581111561134057611340612a9f565b600581111561135157611351612a9f565b815260200160018201805461136590612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461139190612c63565b80156113dc5780601f106113b3576101008083540402835291602001916113dc565b820191905f5260205f20905b8154815290600101906020018083116113bf57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b61144c6115ef565b6001600160a01b03811661147557604051631e4fbdf760e01b81525f6004820152602401610528565b610c418161164a565b6040515f905f80516020613748833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906114c190869086906134d2565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561153d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261156491908101906134e1565b915091508061158657604051636b2f19e960e01b815260040160405180910390fd5b8151156115ac578151604051636ba589a560e01b81526004810191909152602401610528565b60208201516001600160a01b0316156115e8576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610528565b5092915050565b336116217f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c1b5760405163118cdaa760e01b8152336004820152602401610528565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f6116c3612901565b5f805160206137488339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116f6886114d9565b604001516040518263ffffffff1660e01b81526004016117169190612ddd565b6040805180830381865af4158015611730573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175491906133e7565b91509150801561177b57604051632d07135360e01b81528115156004820152602401610528565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff909116908111156117b3576117b3612a9f565b60058111156117c4576117c4612a9f565b81526020016001820180546117d890612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461180490612c63565b801561184f5780601f106118265761010080835404028352916020019161184f565b820191905f5260205f20905b81548152906001019060200180831161183257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156118c7576118c7612a9f565b141580156118e857506001815160058111156118e5576118e5612a9f565b14155b1561190957805160405163170cc93360e21b81526105289190600401612c9b565b60038151600581111561191e5761191e612a9f565b0361192c5760048152611931565b600581525b8360060181602001516040516119479190612f45565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561198a5761198a612a9f565b0217905550602082015160018201906119a39082612fa1565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376883398151915260205260408082208151610100810190925280545f8051602061374883398151915293929190829060ff166005811115611ac057611ac0612a9f565b6005811115611ad157611ad1612a9f565b8152602001600182018054611ae590612c63565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1190612c63565b8015611b5c5780601f10611b3357610100808354040283529160200191611b5c565b820191905f5260205f20905b815481529060010190602001808311611b3f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611bd457611bd4612a9f565b14611c07575f8381526005830160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c4c57611c4c612a9f565b021790555060208201516001820190611c659082612fa1565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611d05848261218a565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d5a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611dac57604051637fab81e560e01b815260040160405180910390fd5b5f80516020613748833981519152426001600160401b038716111580611de75750611dda6202a3004261356e565b866001600160401b031610155b15611e1057604051635879da1360e11b81526001600160401b0387166004820152602401610528565b60038101546001600160401b0390611e3390600160401b9004821685831661356e565b1115611e5d57604051633e1a785160e01b81526001600160401b0384166004820152602401610528565b611e6685612361565b611e6f84612361565b8651603014611e965786516040516326475b2f60e11b815260040161052891815260200190565b8751601414611eba5787604051633e08a12560e11b81526004016105289190612ddd565b5f801b8160060189604051611ecf9190612f45565b90815260200160405180910390205414611efe578760405163a41f772f60e01b81526004016105289190612ddd565b611f08835f612480565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f8891906135e7565b5f60405180830381865af4158015611fa2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611fc99190810190613696565b5f82815260048601602052604090209193509150611fe78282612fa1565b5081836006018b604051611ffb9190612f45565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612037908590600401612ddd565b6020604051808303815f875af1158015612053573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120779190612def565b5f8481526005860160205260409020805460ff191660019081178255919250016120a18c82612fa1565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690556120f88b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a604051612155939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b6121746126ea565b61217d82612733565b6121868161274c565b5050565b5f8281525f80516020613768833981519152602052604081206002015481905f8051602061374883398151915290600160c01b90046001600160401b03166121d28582612480565b5f6121dc8761275d565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612280573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122a79190810190612dac565b6040518263ffffffff1660e01b81526004016122c39190612ddd565b6020604051808303815f875af11580156122df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123039190612def565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff1615801561237a575060208101515115155b156123ae57805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610528565b602081015151815163ffffffff1611156123f157805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610528565b60015b8160200151518110156121865760208201516124116001836136d9565b8151811061242157612421612e4b565b60200260200101516001600160a01b03168260200151828151811061244857612448612e4b565b60200260200101516001600160a01b0316101561247857604051630dbc8d5f60e31b815260040160405180910390fd5b6001016123f4565b5f805160206137488339815191525f6001600160401b0380841690851611156124b4576124ad83856136ec565b90506124c1565b6124be84846136ec565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061252e57506001840154815161252a916001600160401b03169061356e565b8210155b15612556576001600160401b0380841660608301528282526040820151166020820152612575565b82816060018181516125689190613074565b6001600160401b03169052505b60608101516125859060646130b6565b602082015160018601546001600160401b0392909216916125b09190600160401b900460ff166130b6565b6001600160401b031610156125e957606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610528565b85816040018181516125fb9190613074565b6001600160401b031690525060408101805186919061261b9083906136ec565b6001600160401b03169052506001840154604082015160649161264991600160401b90910460ff16906130b6565b6001600160401b03161015612682576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610528565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c1b57604051631afcd79f60e31b815260040160405180910390fd5b61273b6126ea565b6127436127d2565b610c41816127da565b6127546126ea565b610c41816128c2565b5f8181525f805160206137688339815191526020526040812060020180545f8051602061374883398151915291906008906127a790600160401b90046001600160401b031661370c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610c1b6126ea565b6127e26126ea565b80355f8051602061374883398151915290815560146128076060840160408501613727565b60ff16118061282657506128216060830160408401613727565b60ff16155b1561285a5761283b6060830160408401613727565b604051634a59bbff60e11b815260ff9091166004820152602401610528565b61286a6060830160408401613727565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561289b60408301602084016132e2565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b61144c6126ea565b5080546128d690612c63565b5f825580601f106128e5575050565b601f0160209004905f5260205f2090810190610c419190612946565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561295a575f8155600101612947565b5090565b5f6020828403121561296e575f80fd5b5035919050565b803563ffffffff81168114612988575f80fd5b919050565b5f806040838503121561299e575f80fd5b82356001600160401b038111156129b3575f80fd5b8301608081860312156129c4575f80fd5b91506129d260208401612975565b90509250929050565b5f602082840312156129eb575f80fd5b610d1182612975565b6001600160401b0381168114610c41575f80fd5b5f8060408385031215612a19575f80fd5b82356001600160401b03811115612a2e575f80fd5b830160a08186031215612a3f575f80fd5b91506020830135612a4f816129f4565b809150509250929050565b6001600160a01b0381168114610c41575f80fd5b5f808284036080811215612a80575f80fd5b6060811215612a8d575f80fd5b508291506060830135612a4f81612a5a565b634e487b7160e01b5f52602160045260245ffd5b60068110612acf57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612aed578181015183820152602001612ad5565b50505f910152565b5f8151808452612b0c816020860160208601612ad3565b601f01601f19169290920160200192915050565b60208152612b32602082018351612ab3565b5f6020830151610100806040850152612b4f610120850183612af5565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b8e60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612be6575f80fd5b8135612bf181612a5a565b9392505050565b5f8060208385031215612c09575f80fd5b82356001600160401b0380821115612c1f575f80fd5b818501915085601f830112612c32575f80fd5b813581811115612c40575f80fd5b866020828501011115612c51575f80fd5b60209290920196919550909350505050565b600181811c90821680612c7757607f821691505b602082108103612c9557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610d148284612ab3565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612cdf57612cdf612ca9565b60405290565b604080519081016001600160401b0381118282101715612cdf57612cdf612ca9565b604051601f8201601f191681016001600160401b0381118282101715612d2f57612d2f612ca9565b604052919050565b5f6001600160401b03821115612d4f57612d4f612ca9565b50601f01601f191660200190565b5f82601f830112612d6c575f80fd5b8151612d7f612d7a82612d37565b612d07565b818152846020838601011115612d93575f80fd5b612da4826020830160208701612ad3565b949350505050565b5f60208284031215612dbc575f80fd5b81516001600160401b03811115612dd1575f80fd5b612da484828501612d5d565b602081525f610d116020830184612af5565b5f60208284031215612dff575f80fd5b5051919050565b5f808335601e19843603018112612e1b575f80fd5b8301803591506001600160401b03821115612e34575f80fd5b6020019150600581901b360382131561235a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612e73575f80fd5b9190910192915050565b5f82601f830112612e8c575f80fd5b8135612e9a612d7a82612d37565b818152846020838601011115612eae575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612eda575f80fd5b612ee2612cbd565b82356001600160401b0380821115612ef8575f80fd5b612f0436838701612e7d565b83526020850135915080821115612f19575f80fd5b50612f2636828601612e7d565b6020830152506040830135612f3a816129f4565b604082015292915050565b5f8251612e73818460208701612ad3565b601f82111561104857805f5260205f20601f840160051c81016020851015612f7b5750805b601f840160051c820191505b81811015612f9a575f8155600101612f87565b5050505050565b81516001600160401b03811115612fba57612fba612ca9565b612fce81612fc88454612c63565b84612f56565b602080601f831160018114613001575f8415612fea5750858301515b5f19600386901b1c1916600185901b178555613058565b5f85815260208120601f198616915b8281101561302f57888601518255948401946001909101908401613010565b508582101561304c57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115e8576115e8613060565b5f63ffffffff8083168181036130ac576130ac613060565b6001019392505050565b6001600160401b038181168382160280821691908281146130d9576130d9613060565b505092915050565b5f808335601e198436030181126130f6575f80fd5b83016020810192503590506001600160401b03811115613114575f80fd5b80360382131561235a575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131ff57848303601f19018952813536889003605e19018112613186575f80fd5b8701606061319482806130e1565b8287526131a48388018284613122565b925050506131b4868301836130e1565b868303888801526131c6838284613122565b9250505060408083013592506131db836129f4565b6001600160401b039290921694909101939093529783019790830190600101613161565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561323081612a5a565b6001600160a01b031660608381019190915283013536849003601e19018112613257575f80fd5b83016020810190356001600160401b03811115613272575f80fd5b8060051b3603821315613283575f80fd5b60808085015261329760a08501828461314a565b95945050505050565b5f808335601e198436030181126132b5575f80fd5b8301803591506001600160401b038211156132ce575f80fd5b60200191503681900382131561235a575f80fd5b5f602082840312156132f2575f80fd5b8135612bf1816129f4565b5f8235603e19833603018112612e73575f80fd5b5f60408236031215613321575f80fd5b613329612ce5565b61333283612975565b81526020808401356001600160401b038082111561334e575f80fd5b9085019036601f830112613360575f80fd5b81358181111561337257613372612ca9565b8060051b9150613383848301612d07565b818152918301840191848101903684111561339c575f80fd5b938501935b838510156133c657843592506133b683612a5a565b82825293850193908501906133a1565b94860194909452509295945050505050565b80518015158114612988575f80fd5b5f80604083850312156133f8575f80fd5b825191506129d2602084016133d8565b5f60208083525f845461341a81612c63565b806020870152604060018084165f811461343b576001811461345757613484565b60ff19851660408a0152604084151560051b8a01019550613484565b895f5260205f205f5b8581101561347b5781548b8201860152908301908801613460565b8a016040019650505b509398975050505050505050565b5f805f606084860312156134a4575f80fd5b8351925060208401516134b6816129f4565b60408501519092506134c7816129f4565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134f2575f80fd5b82516001600160401b0380821115613508575f80fd5b908401906060828703121561351b575f80fd5b613523612cbd565b82518152602083015161353581612a5a565b602082015260408301518281111561354b575f80fd5b61355788828601612d5d565b60408301525093506129d2915050602084016133d8565b80820180821115610d1457610d14613060565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135dc5784516001600160a01b031682529383019360019290920191908301906135b3565b509695505050505050565b60208152815160208201525f602083015160e0604084015261360d610100840182612af5565b90506040840151601f198085840301606086015261362b8383612af5565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261365b8383613581565b925060a08601519150808584030160c0860152506136798282613581565b91505060c0840151610c2860e08501826001600160401b03169052565b5f80604083850312156136a7575f80fd5b8251915060208301516001600160401b038111156136c3575f80fd5b6136cf85828601612d5d565b9150509250929050565b81810381811115610d1457610d14613060565b6001600160401b038281168282160390808211156115e8576115e8613060565b5f6001600160401b038083168181036130ac576130ac613060565b5f60208284031215613737575f80fd5b813560ff81168114612bf1575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a2646970667358221220e5798878c1848fd60791996a6cad40b871755c605197f0cbfef4c2a9efd9eac464736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. @@ -2228,7 +2228,7 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseRegisteredInitialV // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220d0480ce8a92db2f68f39def88a3ded31f768999147bdb5eeb25933715298f87d64736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220f730711c5b5760a4acff40008a9e3ea299c9a38a322da3ee6c00fb3fc9503a9d64736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/contracts/validator-manager/ACP99Manager.sol b/contracts/validator-manager/ACP99Manager.sol index bb5360c3c..795272d48 100644 --- a/contracts/validator-manager/ACP99Manager.sol +++ b/contracts/validator-manager/ACP99Manager.sol @@ -50,7 +50,7 @@ struct PChainOwner { * @param nodeID The NodeID of the validator. * @param startingWeight The weight of the validator at the time of registration. * @param sentNonce The current weight update nonce sent by the manager. - * @param receivedNonce The highest nonce received from the P-Chain + * @param receivedNonce The highest nonce received from the P-Chain. * @param weight The current weight of the validator. * @param startTime The start time of the validator. * @param endTime The end time of the validator. @@ -191,7 +191,7 @@ abstract contract ACP99Manager { returns (bytes32 validationID); /** - * @notice Initiates validator weight update by issuing a L1ValidatorWeightMessage with a nonzero weight. + * @notice Initiates a validator weight update by issuing an L1ValidatorWeightMessage with a nonzero weight. * The validator weight change should not have any effect until completeValidatorWeightUpdate is successfully called. * * Emits an {InitiatedValidatorWeightUpdate} event on success. @@ -207,7 +207,7 @@ abstract contract ACP99Manager { ) internal virtual returns (uint64 nonce, bytes32 messageID); /** - * @notice Completes the validator weight update process by consuming a L1ValidatorWeightMessage from the P-Chain + * @notice Completes the validator weight update process by consuming an L1ValidatorWeightMessage from the P-Chain * acknowledging the weight update. The validator weight change should not have any effect until this method is successfully called. * * Emits a {CompletedValidatorWeightUpdate} event on success. From 1da19b33dbc9656d1a125278b2232bdbc41bd6c2 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Tue, 28 Jan 2025 18:15:29 -0600 Subject: [PATCH 29/29] formatting --- .../ERC20TokenStakingManager/ERC20TokenStakingManager.go | 4 ++-- .../NativeTokenStakingManager/NativeTokenStakingManager.go | 4 ++-- .../PoAValidatorManager/PoAValidatorManager.go | 4 ++-- contracts/validator-manager/ACP99Manager.sol | 4 +++- contracts/validator-manager/ValidatorManager.sol | 5 +---- .../validator-manager/tests/ValidatorManagerTests.t.sol | 7 ++++--- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 749e285cd..f2b7b2100 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615e8e380380615e8e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d418061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061026b575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f141461056b578063d5f20ff61461059b578063df93d8de146105bb578063e4a63c40146105c5578063fb8b11dd146105d9578063fd7ac5e7146105ec575f80fd5b8063ba3a4b971461050e578063bb0b193814610521578063bc5fbfec14610529578063bee0a03f14610550578063c974d1b614610563575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104a05780639e478eea146104b3578063a3a65e48146104c6578063a9778a7a1461031a578063afb98096146104d9578063b771b3bc14610500575f80fd5b80638280a25a1461044c5780638ef34c981461045457806393e24598146104675780639681d9401461047a5780639ae064471461048d575f80fd5b80635dc1f535116101e257806363e2ca97116101a757806363e2ca9714610398578063732214f8146103db57806376f78621146103e2578063785e9e86146103f55780637d8d2f771461042657806380dd672f14610439575f80fd5b80635dc1f5351461037d5780635dd6a6cb1461038557806360305d621461039857806360ad7784146103b557806362065856146103c8575f80fd5b806325e1c7761161023357806325e1c776146102dc5780632e2194d8146102ef57806335455ded1461031a57806337b9be8f146103365780633a1cfff6146103495780634bee00401461035c575f80fd5b80630118acc41461026f5780630322ed9814610284578063151d30d1146102975780631ec44724146102b657806320d91b7a146102c9575b5f80fd5b61028261027d366004614d5b565b6105ff565b005b610282610292366004614d96565b610610565b61029f600a81565b60405160ff90911681526020015b60405180910390f35b6102826102c4366004614d5b565b6108a3565b6102826102d7366004614dad565b6108af565b6102826102ea366004614dfb565b610e63565b6103026102fd366004614d96565b610ed7565b6040516001600160401b0390911681526020016102ad565b61032361271081565b60405161ffff90911681526020016102ad565b610282610344366004614e30565b610f2b565b610282610357366004614d5b565b610f3e565b61036f61036a366004614ea3565b610f4a565b6040519081526020016102ad565b61036f610f7f565b610282610393366004614e30565b610f8e565b6103a0601481565b60405163ffffffff90911681526020016102ad565b6102826103c3366004614dfb565b610f9a565b61036f6103d6366004614f0a565b6111ed565b61036f5f81565b6102826103f0366004614d5b565b61120d565b5f80516020615ccc833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102ad565b610282610434366004614e30565b611219565b610282610447366004614dfb565b611225565b61029f603081565b610282610462366004614f25565b611426565b610282610475366004614d96565b6114d7565b61036f610488366004614f53565b61156b565b61028261049b366004614e30565b611644565b61036f6104ae366004614f6c565b611650565b6102826104c1366004614f8c565b61167c565b61036f6104d4366004614f53565b61175b565b61036f7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61040e6005600160991b0181565b61028261051c366004614d96565b61194a565b610302611ba3565b61036f7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b61028261055e366004614d96565b611bc5565b61029f601481565b61057e610579366004614f53565b611ce1565b604080519283526001600160401b039091166020830152016102ad565b6105ae6105a9366004614d96565b611e64565b6040516102ad9190615034565b6103026202a30081565b61036f5f80516020615ccc83398151915281565b6102826105e7366004614f25565b611fb3565b61036f6105fa3660046150ea565b61204a565b61060b8383835f612082565b505050565b5f6106196120ae565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561065357610653614fbf565b600581111561066457610664614fbf565b815260200160018201805461067890615155565b80601f01602080910402602001604051908101604052809291908181526020018280546106a490615155565b80156106ef5780601f106106c6576101008083540402835291602001916106ef565b820191905f5260205f20905b8154815290600101906020018083116106d257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561076757610767614fbf565b146107a3575f8381526005830160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561081a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108419190810190615296565b6040518263ffffffff1660e01b815260040161085d91906152c7565b6020604051808303815f875af1158015610879573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089d91906152d9565b50505050565b61089d8383835f6120d2565b5f6108b86120ae565b600781015490915060ff16156108e157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610924573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094891906152d9565b836020013514610971576040516372b0a7e760e11b81526020840135600482015260240161079a565b3061098260608501604086016152f0565b6001600160a01b0316146109c5576109a060608401604085016152f0565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161079a565b5f6109d3606085018561530b565b905090505f805b828163ffffffff161015610c59575f6109f6606088018861530b565b8363ffffffff16818110610a0c57610a0c615350565b9050602002810190610a1e9190615364565b610a27906153cf565b80516040519192505f916006880191610a3f9161544a565b90815260200160405180910390205414610a6f57805160405163a41f772f60e01b815261079a91906004016152c7565b805151601414610a95578051604051633e08a12560e11b815261079a91906004016152c7565b5f6002885f013584604051602001610ac492919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610ade9161544a565b602060405180830381855afa158015610af9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b1c91906152d9565b90508086600601835f0151604051610b34919061544a565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b74908261549f565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610be3908561556e565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610c3e91906001600160401b0391909116815260200190565b60405180910390a3505080610c529061558e565b90506109da565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c9c910460ff16836155b0565b6001600160401b03161015610ccf57604051633e1a785160e01b81526001600160401b038216600482015260240161079a565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610cf3876123ff565b604001516040518263ffffffff1660e01b8152600401610d1391906152c7565b602060405180830381865af4158015610d2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5291906152d9565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d8c9190615706565b5f60405180830381865af4158015610da6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dcd9190810190615296565b90505f600282604051610de0919061544a565b602060405180830381855afa158015610dfb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e1e91906152d9565b9050828114610e4a5760405163baaea89d60e01b8152600481018290526024810184905260440161079a565b5050506007909201805460ff1916600117905550505050565b610e6c82612515565b610e8c576040516330efa98b60e01b81526004810183905260240161079a565b5f610e9683611e64565b5190506002816005811115610ead57610ead614fbf565b14610ecd578060405163170cc93360e21b815260040161079a919061518d565b61089d838361253e565b5f80610ee16127e4565b60030154610eef908461579a565b9050801580610f0457506001600160401b0381115b15610f255760405163222d164360e21b81526004810184905260240161079a565b92915050565b610f37848484846120d2565b5050505050565b61089d8383835f612808565b5f610f53612a4f565b610f5f85858585612a86565b9050610f7760015f80516020615cec83398151915255565b949350505050565b5f610f886120ae565b54919050565b61089d84848484612cd3565b5f610fa36127e4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610fdc57610fdc614fbf565b6003811115610fed57610fed614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61106382611e64565b905060018351600381111561107a5761107a614fbf565b1461109b578251604051633b0d540d60e21b815261079a91906004016157b9565b6004815160058111156110b0576110b0614fbf565b036110c6576110be86612cff565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611166575f806110f387611ce1565b915091508184146111215760405163fee3144560e01b8152600481018390526024810185905260440161079a565b8460a001516001600160401b0316816001600160401b0316101561116357604051632e19bc2d60e11b81526001600160401b038216600482015260240161079a565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111f66127e4565b60030154610f25906001600160401b0384166157d3565b61060b8383835f612cd3565b610f3784848484612808565b61122d612a4f565b5f6112366127e4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561126f5761126f614fbf565b600381111561128057611280614fbf565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112f9576112f9614fbf565b1461131a578051604051633b0d540d60e21b815261079a91906004016157b9565b5f6113288260400151611e64565b905060046113398360400151611e64565b51600581111561134b5761134b614fbf565b1415801561137257508160c001516001600160401b031681608001516001600160401b0316105b15611400575f8061138286611ce1565b91509150818460400151146113bb5781846040015160405163fee3144560e01b815260040161079a929190918252602082015260400190565b806001600160401b03168460c001516001600160401b031611156113fd57604051632e19bc2d60e11b81526001600160401b038216600482015260240161079a565b50505b61140985612cff565b50505061142260015f80516020615cec83398151915255565b5050565b5f61142f6127e4565b90506001600160a01b0382166114635760405163caa903f960e01b81526001600160a01b038316600482015260240161079a565b5f8381526006820160205260409020546001600160a01b031633146114a957335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161079a565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6114e06127e4565b90505f6114ec83611e64565b519050600481600581111561150357611503614fbf565b14611523578060405163170cc93360e21b815260040161079a919061518d565b5f8381526006830160205260409020546001600160a01b031633146115485733611484565b5f83815260068301602052604090205461060b906001600160a01b031684612ed0565b5f611574612a4f565b5f61157d6127e4565b90505f8061158a85612efa565b9150915061159782612515565b6115a5575091506116299050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115e75750805b6004835160058111156115fc576115fc614fbf565b0361160b5761160b8185612ed0565b6116218261161c85604001516111ed565b6132af565b509193505050505b61163f60015f80516020615cec83398151915255565b919050565b61089d84848484612082565b5f611659612a4f565b6116648333846132d2565b9050610f2560015f80516020615cec83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806116c5575080546001600160401b03808416911610155b156116e35760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561170e8484613517565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f806117656120ae565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61178c876123ff565b604001516040518263ffffffff1660e01b81526004016117ac91906152c7565b6040805180830381865af41580156117c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ea91906157ea565b915091508061181057604051632d07135360e01b8152811515600482015260240161079a565b5f8281526004840160205260409020805461182a90615155565b90505f0361184e5760405163089938b360e11b81526004810183905260240161079a565b60015f838152600580860160205260409091205460ff169081111561187557611875614fbf565b146118a8575f8281526005840160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b5f82815260048401602052604081206118c091614ca7565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f6119536127e4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561198c5761198c614fbf565b600381111561199d5761199d614fbf565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a1657611a16614fbf565b14158015611a375750600381516003811115611a3457611a34614fbf565b14155b15611a58578051604051633b0d540d60e21b815261079a91906004016157b9565b5f611a668260400151611e64565b905080606001516001600160401b03165f03611a98576040516339b894f960e21b81526004810185905260240161079a565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b0693906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b479190810190615296565b6040518263ffffffff1660e01b8152600401611b6391906152c7565b6020604051808303815f875af1158015611b7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3791906152d9565b5f611bac6120ae565b60030154600160401b90046001600160401b0316919050565b5f611bce6120ae565b5f8381526004820160205260409020805491925090611bec90615155565b90505f03611c105760405163089938b360e11b81526004810183905260240161079a565b60015f838152600580840160205260409091205460ff1690811115611c3757611c37614fbf565b14611c6a575f8281526005820160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611ca1920161580d565b6020604051808303815f875af1158015611cbd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060b91906152d9565b5f805f611ced846123ff565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611d2d91906152c7565b606060405180830381865af4158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190615897565b9250925092505f611d7b6120ae565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611dcf57604051632e19bc2d60e11b81526001600160401b038416600482015260240161079a565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611e4f90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e6c614cde565b5f611e756120ae565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611eaf57611eaf614fbf565b6005811115611ec057611ec0614fbf565b8152602001600182018054611ed490615155565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0090615155565b8015611f4b5780601f10611f2257610100808354040283529160200191611f4b565b820191905f5260205f20905b815481529060010190602001808311611f2e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611fe55760405163caa903f960e01b81526001600160a01b038216600482015260240161079a565b5f611fee6127e4565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461201c5733611484565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806120546120ae565b905080600601848460405161206a9291906158d7565b90815260200160405180910390205491505092915050565b61208e848484846120d2565b61089d57604051631036cf9160e11b81526004810185905260240161079a565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f806120dc6127e4565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561211557612115614fbf565b600381111561212657612126614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61219c82611e64565b90506002835160038111156121b3576121b3614fbf565b146121d4578251604051633b0d540d60e21b815261079a91906004016157b9565b60208301516001600160a01b03163314612270575f8281526006850160205260409020546001600160a01b0316331461220d5733611484565b5f82815260068501602052604090205460c082015161223c91600160b01b90046001600160401b03169061556e565b6001600160401b03164210156122705760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b60028151600581111561228557612285614fbf565b036123a757600284015460808401516122a7916001600160401b03169061556e565b6001600160401b03164210156122db5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b87156122ed576122eb828861253e565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161232691849161232191906158e6565b613531565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561236984888c6136fb565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f779350505050565b6004815160058111156123bc576123bc614fbf565b036123e3576123cc83878b6136fb565b506123d689612cff565b6001945050505050610f77565b805160405163170cc93360e21b815261079a919060040161518d565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261248a9190810190615906565b91509150806124ac57604051636b2f19e960e01b815260040160405180910390fd5b8151156124d2578151604051636ba589a560e01b8152600481019190915260240161079a565b60208201516001600160a01b03161561250e576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b5092915050565b5f8061251f6127e4565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612589573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125b09190810190615906565b91509150806125d257604051636b2f19e960e01b815260040160405180910390fd5b5f6125db6127e4565b6005810154845191925014612609578251604051636ba589a560e01b8152600481019190915260240161079a565b60208301516001600160a01b031615612645576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b60208301516001600160a01b031615612681576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126be91906152c7565b6040805180830381865af41580156126d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126fc9190615996565b9150915081881461272a5760405163fee3144560e01b8152600481018390526024810189905260440161079a565b5f8881526006840160205260409020600101546001600160401b0390811690821611156127bb575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26127d9565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128126127e4565b905061281d866138e9565b5f61282787611e64565b905061283287612515565b61284157600192505050610f77565b5f8781526006830160205260409020546001600160a01b031633146128665733611484565b5f87815260068301602052604090205460c082015161289591600160b01b90046001600160401b03169061556e565b6001600160401b03168160e001516001600160401b031610156128dc5760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161079a565b5f86156128f4576128ed888761253e565b9050612912565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612937906111ed565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa1580156129a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c591906152d9565b90506001600160a01b0386166129f1575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a109084906159b9565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cec833981519152805460011901612a8057604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a906127e4565b600281015490915061ffff600160401b90910481169086161080612ab9575061271061ffff8616115b15612add57604051635f12e6c360e11b815261ffff8616600482015260240161079a565b60028101546001600160401b039081169085161015612b19576040516202a06d60e11b81526001600160401b038516600482015260240161079a565b8054831080612b2b5750806001015483115b15612b4c5760405163222d164360e21b81526004810184905260240161079a565b5f612b5684613bd4565b90505f612b6282610ed7565b90505f612c29612b728a806159cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bb39250505060208c018c6159cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bf79250505060608d0160408e01614f0a565b612c0460608e018e615a0e565b612c0d90615a22565b612c1a60808f018f615a0e565b612c2390615a22565b87613bf7565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cec83398151915255565b612cdf84848484612808565b61089d57604051635bff683f60e11b81526004810185905260240161079a565b5f612d086127e4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612d4157612d41614fbf565b6003811115612d5257612d52614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612dc6613fe1565b8260800151612dd5919061556e565b6001600160401b0316421015612e095760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e64575060208201515b5f80612e71838886613ffc565b91509150612e8a856020015161161c87606001516111ed565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612ed96127e4565b5f838152600a820160205260408120805491905590915061089d84826140a9565b5f612f03614cde565b5f612f0c6120ae565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612f33886123ff565b604001516040518263ffffffff1660e01b8152600401612f5391906152c7565b6040805180830381865af4158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906157ea565b915091508015612fb857604051632d07135360e01b8152811515600482015260240161079a565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612ff057612ff0614fbf565b600581111561300157613001614fbf565b815260200160018201805461301590615155565b80601f016020809104026020016040519081016040528092919081815260200182805461304190615155565b801561308c5780601f106130635761010080835404028352916020019161308c565b820191905f5260205f20905b81548152906001019060200180831161306f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561310457613104614fbf565b14158015613125575060018151600581111561312257613122614fbf565b14155b1561314657805160405163170cc93360e21b815261079a919060040161518d565b60038151600581111561315b5761315b614fbf565b03613169576004815261316e565b600581525b836006018160200151604051613184919061544a565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156131c7576131c7614fbf565b0217905550602082015160018201906131e0908261549f565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615ccc83398151915254611422906001600160a01b0316838361411f565b5f806132dc6127e4565b90505f6132eb6102fd85613bd4565b90505f6132f787611e64565b905061330287612515565b613322576040516330efa98b60e01b81526004810188905260240161079a565b60028151600581111561333757613337614fbf565b1461335857805160405163170cc93360e21b815261079a919060040161518d565b5f828260a00151613369919061556e565b905083600201600a9054906101000a90046001600160401b0316826040015161339291906155b0565b6001600160401b0316816001600160401b031611156133cf57604051636d51fe0560e11b81526001600160401b038216600482015260240161079a565b5f806133db8a84613531565b915091505f8a8360405160200161340992919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61351f61417e565b613528826141c9565b61142281614246565b5f805f61353c6120ae565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b031661356c85826142ae565b5f6135768761451b565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561361a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136419190810190615296565b6040518263ffffffff1660e01b815260040161365d91906152c7565b6020604051808303815f875af1158015613679573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061369d91906152d9565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806137056127e4565b90505f6137158660400151611e64565b90505f60038251600581111561372d5761372d614fbf565b148061374b575060048251600581111561374957613749614fbf565b145b1561375b575060e0810151613798565b60028251600581111561377057613770614fbf565b0361377c575042613798565b815160405163170cc93360e21b815261079a919060040161518d565b86608001516001600160401b0316816001600160401b0316116137c0575f9350505050613510565b600483015460608801515f916001600160a01b031690634f22429f906137e5906111ed565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613866573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061388a91906152d9565b90506001600160a01b0387166138a257876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f6138f26120ae565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561392c5761392c614fbf565b600581111561393d5761393d614fbf565b815260200160018201805461395190615155565b80601f016020809104026020016040519081016040528092919081815260200182805461397d90615155565b80156139c85780601f1061399f576101008083540402835291602001916139c8565b820191905f5260205f20905b8154815290600101906020018083116139ab57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613a4057613a40614fbf565b14613a73575f8381526005830160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613ab857613ab8614fbf565b021790555060208201516001820190613ad1908261549f565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b718482613531565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613bc6939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610f25825f80516020615ccc833981519152546001600160a01b031690614584565b5f613c006120ae565b6007015460ff16613c2457604051637fab81e560e01b815260040160405180910390fd5b5f613c2d6120ae565b905042866001600160401b0316111580613c5c5750613c4f6202a300426159b9565b866001600160401b031610155b15613c8557604051635879da1360e11b81526001600160401b038716600482015260240161079a565b60038101546001600160401b0390613ca890600160401b900482168583166159b9565b1115613cd257604051633e1a785160e01b81526001600160401b038416600482015260240161079a565b613cdb85614590565b613ce484614590565b8651603014613d0b5786516040516326475b2f60e11b815260040161079a91815260200190565b8751601414613d2f5787604051633e08a12560e11b815260040161079a91906152c7565b5f801b8160060189604051613d44919061544a565b90815260200160405180910390205414613d73578760405163a41f772f60e01b815260040161079a91906152c7565b613d7d835f6142ae565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613dfd9190615b4f565b5f60405180830381865af4158015613e17573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e3e9190810190615c06565b5f82815260048601602052604090209193509150613e5c828261549f565b5081836006018b604051613e70919061544a565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613eac9085906004016152c7565b6020604051808303815f875af1158015613ec8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eec91906152d9565b5f8481526005860160205260409020805460ff19166001908117825591925001613f168c8261549f565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b0319169055613f6d8b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a604051613fca939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b5f613fea6120ae565b600101546001600160401b0316919050565b5f805f6140076127e4565b5f8681526008820160205260408120805490829055919250908190801561409b575f8781526006850160205260409020546127109061405190600160a01b900461ffff16836157d3565b61405b919061579a565b91508184600a015f8981526020019081526020015f205f82825461407f91906159b9565b9091555061408f90508282615c49565b925061409b89846140a9565b509097909650945050505050565b5f5f80516020615ccc83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614104575f80fd5b505af1158015614116573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060b91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506146af565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166141c757604051631afcd79f60e31b815260040160405180910390fd5b565b6141d161417e565b6141da81614710565b6141e2614729565b614243606082013560808301356141ff60c0850160a08601614f0a565b61420f60e0860160c08701615c5c565b614220610100870160e08801615c75565b61010087013561423861014089016101208a016152f0565b886101400135614739565b50565b61424e61417e565b5f80516020615ccc8339815191526001600160a01b03821661428e57604051637330680360e01b81526001600160a01b038316600482015260240161079a565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6142b76120ae565b90505f826001600160401b0316846001600160401b031611156142e5576142de83856158e6565b90506142f2565b6142ef84846158e6565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061435f57506001840154815161435b916001600160401b0316906159b9565b8210155b15614387576001600160401b03808416606083015282825260408201511660208201526143a6565b8281606001818151614399919061556e565b6001600160401b03169052505b60608101516143b69060646155b0565b602082015160018601546001600160401b0392909216916143e19190600160401b900460ff166155b0565b6001600160401b0316101561441a57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161079a565b858160400181815161442c919061556e565b6001600160401b031690525060408101805186919061444c9083906158e6565b6001600160401b03169052506001840154604082015160649161447a91600160401b90910460ff16906155b0565b6001600160401b031610156144b3576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161079a565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f806145256120ae565b5f848152600582016020526040902060020180549192509060089061455990600160401b90046001600160401b0316615c95565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6135108333846148fb565b805163ffffffff161580156145a9575060208101515115155b156145dd57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161079a565b602081015151815163ffffffff16111561462057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161079a565b60015b816020015151811015611422576020820151614640600183615c49565b8151811061465057614650615350565b60200260200101516001600160a01b03168260200151828151811061467757614677615350565b60200260200101516001600160a01b031610156146a757604051630dbc8d5f60e31b815260040160405180910390fd5b600101614623565b5f6146c36001600160a01b03841683614a5e565b905080515f141580156146e75750808060200190518101906146e59190615cb0565b155b1561060b57604051635274afe760e01b81526001600160a01b038416600482015260240161079a565b61471861417e565b614720614a6b565b61424381614a73565b61473161417e565b6141c7614b57565b61474161417e565b5f61474a6127e4565b905061ffff86161580614762575061271061ffff8716115b1561478657604051635f12e6c360e11b815261ffff8716600482015260240161079a565b878911156147aa5760405163222d164360e21b8152600481018a905260240161079a565b60ff851615806147bd5750600a60ff8616115b156147e05760405163170db35960e31b815260ff8616600482015260240161079a565b6147e8613fe1565b6001600160401b0316876001600160401b03161015614824576040516202a06d60e11b81526001600160401b038816600482015260240161079a565b835f036148445760405163a733007160e01b815260040160405180910390fd5b8161486557604051632f6bd1db60e01b81526004810183905260240161079a565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614941573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061496591906152d9565b905061497c6001600160a01b038616853086614b5f565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156149c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149e491906152d9565b9050818111614a4a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161079a565b614a548282615c49565b9695505050505050565b606061351083835f614b98565b6141c761417e565b614a7b61417e565b5f614a846120ae565b8235815590506014614a9c6060840160408501615c75565b60ff161180614abb5750614ab66060830160408401615c75565b60ff16155b15614aef57614ad06060830160408401615c75565b604051634a59bbff60e11b815260ff909116600482015260240161079a565b614aff6060830160408401615c75565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b306040830160208401614f0a565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612cc061417e565b6040516001600160a01b03848116602483015283811660448301526064820183905261089d9186918216906323b872dd9060840161414c565b606081471015614bbd5760405163cd78605960e01b815230600482015260240161079a565b5f80856001600160a01b03168486604051614bd8919061544a565b5f6040518083038185875af1925050503d805f8114614c12576040519150601f19603f3d011682016040523d82523d5f602084013e614c17565b606091505b5091509150614a54868383606082614c3757614c3282614c7e565b613510565b8151158015614c4e57506001600160a01b0384163b155b15614c7757604051639996b31560e01b81526001600160a01b038516600482015260240161079a565b5080613510565b805115614c8e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614cb390615155565b5f825580601f10614cc2575050565b601f0160209004905f5260205f20908101906142439190614d23565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614d37575f8155600101614d24565b5090565b8015158114614243575f80fd5b803563ffffffff8116811461163f575f80fd5b5f805f60608486031215614d6d575f80fd5b833592506020840135614d7f81614d3b565b9150614d8d60408501614d48565b90509250925092565b5f60208284031215614da6575f80fd5b5035919050565b5f8060408385031215614dbe575f80fd5b82356001600160401b03811115614dd3575f80fd5b830160808186031215614de4575f80fd5b9150614df260208401614d48565b90509250929050565b5f8060408385031215614e0c575f80fd5b82359150614df260208401614d48565b6001600160a01b0381168114614243575f80fd5b5f805f8060808587031215614e43575f80fd5b843593506020850135614e5581614d3b565b9250614e6360408601614d48565b91506060850135614e7381614e1c565b939692955090935050565b803561ffff8116811461163f575f80fd5b6001600160401b0381168114614243575f80fd5b5f805f8060808587031215614eb6575f80fd5b84356001600160401b03811115614ecb575f80fd5b850160a08188031215614edc575f80fd5b9350614eea60208601614e7e565b92506040850135614efa81614e8f565b9396929550929360600135925050565b5f60208284031215614f1a575f80fd5b813561351081614e8f565b5f8060408385031215614f36575f80fd5b823591506020830135614f4881614e1c565b809150509250929050565b5f60208284031215614f63575f80fd5b61351082614d48565b5f8060408385031215614f7d575f80fd5b50508035926020909101359150565b5f80828403610180811215614f9f575f80fd5b61016080821215614fae575f80fd5b8493508301359050614f4881614e1c565b634e487b7160e01b5f52602160045260245ffd5b60068110614fe357614fe3614fbf565b9052565b5f5b83811015615001578181015183820152602001614fe9565b50505f910152565b5f8151808452615020816020860160208601614fe7565b601f01601f19169290920160200192915050565b60208152615046602082018351614fd3565b5f6020830151610100806040850152615063610120850183615009565b915060408501516001600160401b038082166060870152806060880151166080870152505060808501516150a260a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f80602083850312156150fb575f80fd5b82356001600160401b0380821115615111575f80fd5b818501915085601f830112615124575f80fd5b813581811115615132575f80fd5b866020828501011115615143575f80fd5b60209290920196919550909350505050565b600181811c9082168061516957607f821691505b60208210810361518757634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610f258284614fd3565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151d1576151d161519b565b60405290565b604080519081016001600160401b03811182821017156151d1576151d161519b565b604051601f8201601f191681016001600160401b03811182821017156152215761522161519b565b604052919050565b5f6001600160401b038211156152415761524161519b565b50601f01601f191660200190565b5f82601f83011261525e575f80fd5b815161527161526c82615229565b6151f9565b818152846020838601011115615285575f80fd5b610f77826020830160208701614fe7565b5f602082840312156152a6575f80fd5b81516001600160401b038111156152bb575f80fd5b610f778482850161524f565b602081525f6135106020830184615009565b5f602082840312156152e9575f80fd5b5051919050565b5f60208284031215615300575f80fd5b813561351081614e1c565b5f808335601e19843603018112615320575f80fd5b8301803591506001600160401b03821115615339575f80fd5b6020019150600581901b36038213156136f4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615378575f80fd5b9190910192915050565b5f82601f830112615391575f80fd5b813561539f61526c82615229565b8181528460208386010111156153b3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153df575f80fd5b6153e76151af565b82356001600160401b03808211156153fd575f80fd5b61540936838701615382565b8352602085013591508082111561541e575f80fd5b5061542b36828601615382565b602083015250604083013561543f81614e8f565b604082015292915050565b5f8251615378818460208701614fe7565b601f82111561060b57805f5260205f20601f840160051c810160208510156154805750805b601f840160051c820191505b81811015610f37575f815560010161548c565b81516001600160401b038111156154b8576154b861519b565b6154cc816154c68454615155565b8461545b565b602080601f8311600181146154ff575f84156154e85750858301515b5f19600386901b1c1916600185901b1785556110be565b5f85815260208120601f198616915b8281101561552d5788860151825594840194600190910190840161550e565b508582101561554a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561250e5761250e61555a565b5f63ffffffff8083168181036155a6576155a661555a565b6001019392505050565b6001600160401b038181168382160280821691908281146155d3576155d361555a565b505092915050565b5f808335601e198436030181126155f0575f80fd5b83016020810192503590506001600160401b0381111561560e575f80fd5b8036038213156136f4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156f957848303601f19018952813536889003605e19018112615680575f80fd5b8701606061568e82806155db565b82875261569e838801828461561c565b925050506156ae868301836155db565b868303888801526156c083828461561c565b9250505060408083013592506156d583614e8f565b6001600160401b03929092169490910193909352978301979083019060010161565b565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561572a81614e1c565b6001600160a01b031660608381019190915283013536849003601e19018112615751575f80fd5b83016020810190356001600160401b0381111561576c575f80fd5b8060051b360382131561577d575f80fd5b60808085015261579160a085018284615644565b95945050505050565b5f826157b457634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157cd576157cd614fbf565b91905290565b8082028115828204841417610f2557610f2561555a565b5f80604083850312156157fb575f80fd5b825191506020830151614f4881614d3b565b5f60208083525f845461581f81615155565b806020870152604060018084165f8114615840576001811461585c57615889565b60ff19851660408a0152604084151560051b8a01019550615889565b895f5260205f205f5b858110156158805781548b8201860152908301908801615865565b8a016040019650505b509398975050505050505050565b5f805f606084860312156158a9575f80fd5b8351925060208401516158bb81614e8f565b60408501519092506158cc81614e8f565b809150509250925092565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561250e5761250e61555a565b5f8060408385031215615917575f80fd5b82516001600160401b038082111561592d575f80fd5b9084019060608287031215615940575f80fd5b6159486151af565b82518152602083015161595a81614e1c565b6020820152604083015182811115615970575f80fd5b61597c8882860161524f565b6040830152508094505050506020830151614f4881614d3b565b5f80604083850312156159a7575f80fd5b825191506020830151614f4881614e8f565b80820180821115610f2557610f2561555a565b5f808335601e198436030181126159e1575f80fd5b8301803591506001600160401b038211156159fa575f80fd5b6020019150368190038213156136f4575f80fd5b5f8235603e19833603018112615378575f80fd5b5f60408236031215615a32575f80fd5b615a3a6151d7565b615a4383614d48565b81526020808401356001600160401b0380821115615a5f575f80fd5b9085019036601f830112615a71575f80fd5b813581811115615a8357615a8361519b565b8060051b9150615a948483016151f9565b8181529183018401918481019036841115615aad575f80fd5b938501935b83851015615ad75784359250615ac783614e1c565b8282529385019390850190615ab2565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b445784516001600160a01b03168252938301936001929092019190830190615b1b565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b75610100840182615009565b90506040840151601f1980858403016060860152615b938383615009565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615bc38383615ae9565b925060a08601519150808584030160c086015250615be18282615ae9565b91505060c0840151615bfe60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c17575f80fd5b8251915060208301516001600160401b03811115615c33575f80fd5b615c3f8582860161524f565b9150509250929050565b81810381811115610f2557610f2561555a565b5f60208284031215615c6c575f80fd5b61351082614e7e565b5f60208284031215615c85575f80fd5b813560ff81168114613510575f80fd5b5f6001600160401b038083168181036155a6576155a661555a565b5f60208284031215615cc0575f80fd5b815161351081614d3b56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212208e8bcf509bb396555bcfbb5ce6649d859b9ab4478d41d455edccfd6bb668df3964736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615e8e380380615e8e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d418061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061026b575f3560e01c80638280a25a1161014b578063ba3a4b97116100bf578063ce161f1411610084578063ce161f141461056b578063d5f20ff61461059b578063df93d8de146105bb578063e4a63c40146105c5578063fb8b11dd146105d9578063fd7ac5e7146105ec575f80fd5b8063ba3a4b971461050e578063bb0b193814610521578063bc5fbfec14610529578063bee0a03f14610550578063c974d1b614610563575f80fd5b80639e1bc4ef116101105780639e1bc4ef146104a05780639e478eea146104b3578063a3a65e48146104c6578063a9778a7a1461031a578063afb98096146104d9578063b771b3bc14610500575f80fd5b80638280a25a1461044c5780638ef34c981461045457806393e24598146104675780639681d9401461047a5780639ae064471461048d575f80fd5b80635dc1f535116101e257806363e2ca97116101a757806363e2ca9714610398578063732214f8146103db57806376f78621146103e2578063785e9e86146103f55780637d8d2f771461042657806380dd672f14610439575f80fd5b80635dc1f5351461037d5780635dd6a6cb1461038557806360305d621461039857806360ad7784146103b557806362065856146103c8575f80fd5b806325e1c7761161023357806325e1c776146102dc5780632e2194d8146102ef57806335455ded1461031a57806337b9be8f146103365780633a1cfff6146103495780634bee00401461035c575f80fd5b80630118acc41461026f5780630322ed9814610284578063151d30d1146102975780631ec44724146102b657806320d91b7a146102c9575b5f80fd5b61028261027d366004614d5b565b6105ff565b005b610282610292366004614d96565b610610565b61029f600a81565b60405160ff90911681526020015b60405180910390f35b6102826102c4366004614d5b565b6108a3565b6102826102d7366004614dad565b6108af565b6102826102ea366004614dfb565b610e63565b6103026102fd366004614d96565b610ed7565b6040516001600160401b0390911681526020016102ad565b61032361271081565b60405161ffff90911681526020016102ad565b610282610344366004614e30565b610f2b565b610282610357366004614d5b565b610f3e565b61036f61036a366004614ea3565b610f4a565b6040519081526020016102ad565b61036f610f7f565b610282610393366004614e30565b610f8e565b6103a0601481565b60405163ffffffff90911681526020016102ad565b6102826103c3366004614dfb565b610f9a565b61036f6103d6366004614f0a565b6111ed565b61036f5f81565b6102826103f0366004614d5b565b61120d565b5f80516020615ccc833981519152546001600160a01b03165b6040516001600160a01b0390911681526020016102ad565b610282610434366004614e30565b611219565b610282610447366004614dfb565b611225565b61029f603081565b610282610462366004614f25565b611426565b610282610475366004614d96565b6114d7565b61036f610488366004614f53565b61156b565b61028261049b366004614e30565b611644565b61036f6104ae366004614f6c565b611650565b6102826104c1366004614f8c565b61167c565b61036f6104d4366004614f53565b61175b565b61036f7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61040e6005600160991b0181565b61028261051c366004614d96565b61194a565b610302611ba3565b61036f7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b61028261055e366004614d96565b611bc5565b61029f601481565b61057e610579366004614f53565b611ce1565b604080519283526001600160401b039091166020830152016102ad565b6105ae6105a9366004614d96565b611e64565b6040516102ad9190615034565b6103026202a30081565b61036f5f80516020615ccc83398151915281565b6102826105e7366004614f25565b611fb3565b61036f6105fa3660046150ea565b61204a565b61060b8383835f612082565b505050565b5f6106196120ae565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561065357610653614fbf565b600581111561066457610664614fbf565b815260200160018201805461067890615155565b80601f01602080910402602001604051908101604052809291908181526020018280546106a490615155565b80156106ef5780601f106106c6576101008083540402835291602001916106ef565b820191905f5260205f20905b8154815290600101906020018083116106d257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561076757610767614fbf565b146107a3575f8381526005830160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561081a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108419190810190615296565b6040518263ffffffff1660e01b815260040161085d91906152c7565b6020604051808303815f875af1158015610879573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089d91906152d9565b50505050565b61089d8383835f6120d2565b5f6108b86120ae565b600781015490915060ff16156108e157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610924573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094891906152d9565b836020013514610971576040516372b0a7e760e11b81526020840135600482015260240161079a565b3061098260608501604086016152f0565b6001600160a01b0316146109c5576109a060608401604085016152f0565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161079a565b5f6109d3606085018561530b565b905090505f805b828163ffffffff161015610c59575f6109f6606088018861530b565b8363ffffffff16818110610a0c57610a0c615350565b9050602002810190610a1e9190615364565b610a27906153cf565b80516040519192505f916006880191610a3f9161544a565b90815260200160405180910390205414610a6f57805160405163a41f772f60e01b815261079a91906004016152c7565b805151601414610a95578051604051633e08a12560e11b815261079a91906004016152c7565b5f6002885f013584604051602001610ac492919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610ade9161544a565b602060405180830381855afa158015610af9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b1c91906152d9565b90508086600601835f0151604051610b34919061544a565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b74908261549f565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610be3908561556e565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610c3e91906001600160401b0391909116815260200190565b60405180910390a3505080610c529061558e565b90506109da565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c9c910460ff16836155b0565b6001600160401b03161015610ccf57604051633e1a785160e01b81526001600160401b038216600482015260240161079a565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610cf3876123ff565b604001516040518263ffffffff1660e01b8152600401610d1391906152c7565b602060405180830381865af4158015610d2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5291906152d9565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d8c9190615706565b5f60405180830381865af4158015610da6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dcd9190810190615296565b90505f600282604051610de0919061544a565b602060405180830381855afa158015610dfb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e1e91906152d9565b9050828114610e4a5760405163baaea89d60e01b8152600481018290526024810184905260440161079a565b5050506007909201805460ff1916600117905550505050565b610e6c82612515565b610e8c576040516330efa98b60e01b81526004810183905260240161079a565b5f610e9683611e64565b5190506002816005811115610ead57610ead614fbf565b14610ecd578060405163170cc93360e21b815260040161079a919061518d565b61089d838361253e565b5f80610ee16127e4565b60030154610eef908461579a565b9050801580610f0457506001600160401b0381115b15610f255760405163222d164360e21b81526004810184905260240161079a565b92915050565b610f37848484846120d2565b5050505050565b61089d8383835f612808565b5f610f53612a4f565b610f5f85858585612a86565b9050610f7760015f80516020615cec83398151915255565b949350505050565b5f610f886120ae565b54919050565b61089d84848484612cd3565b5f610fa36127e4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610fdc57610fdc614fbf565b6003811115610fed57610fed614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61106382611e64565b905060018351600381111561107a5761107a614fbf565b1461109b578251604051633b0d540d60e21b815261079a91906004016157b9565b6004815160058111156110b0576110b0614fbf565b036110c6576110be86612cff565b505050505050565b8260a001516001600160401b031681608001516001600160401b03161015611166575f806110f387611ce1565b915091508184146111215760405163fee3144560e01b8152600481018390526024810185905260440161079a565b8460a001516001600160401b0316816001600160401b0316101561116357604051632e19bc2d60e11b81526001600160401b038216600482015260240161079a565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f6111f66127e4565b60030154610f25906001600160401b0384166157d3565b61060b8383835f612cd3565b610f3784848484612808565b61122d612a4f565b5f6112366127e4565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561126f5761126f614fbf565b600381111561128057611280614fbf565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112f9576112f9614fbf565b1461131a578051604051633b0d540d60e21b815261079a91906004016157b9565b5f6113288260400151611e64565b905060046113398360400151611e64565b51600581111561134b5761134b614fbf565b1415801561137257508160c001516001600160401b031681608001516001600160401b0316105b15611400575f8061138286611ce1565b91509150818460400151146113bb5781846040015160405163fee3144560e01b815260040161079a929190918252602082015260400190565b806001600160401b03168460c001516001600160401b031611156113fd57604051632e19bc2d60e11b81526001600160401b038216600482015260240161079a565b50505b61140985612cff565b50505061142260015f80516020615cec83398151915255565b5050565b5f61142f6127e4565b90506001600160a01b0382166114635760405163caa903f960e01b81526001600160a01b038316600482015260240161079a565b5f8381526006820160205260409020546001600160a01b031633146114a957335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161079a565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6114e06127e4565b90505f6114ec83611e64565b519050600481600581111561150357611503614fbf565b14611523578060405163170cc93360e21b815260040161079a919061518d565b5f8381526006830160205260409020546001600160a01b031633146115485733611484565b5f83815260068301602052604090205461060b906001600160a01b031684612ed0565b5f611574612a4f565b5f61157d6127e4565b90505f8061158a85612efa565b9150915061159782612515565b6115a5575091506116299050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806115e75750805b6004835160058111156115fc576115fc614fbf565b0361160b5761160b8185612ed0565b6116218261161c85604001516111ed565b6132af565b509193505050505b61163f60015f80516020615cec83398151915255565b919050565b61089d84848484612082565b5f611659612a4f565b6116648333846132d2565b9050610f2560015f80516020615cec83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806116c5575080546001600160401b03808416911610155b156116e35760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561170e8484613517565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f806117656120ae565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61178c876123ff565b604001516040518263ffffffff1660e01b81526004016117ac91906152c7565b6040805180830381865af41580156117c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ea91906157ea565b915091508061181057604051632d07135360e01b8152811515600482015260240161079a565b5f8281526004840160205260409020805461182a90615155565b90505f0361184e5760405163089938b360e11b81526004810183905260240161079a565b60015f838152600580860160205260409091205460ff169081111561187557611875614fbf565b146118a8575f8281526005840160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b5f82815260048401602052604081206118c091614ca7565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f6119536127e4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561198c5761198c614fbf565b600381111561199d5761199d614fbf565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a1657611a16614fbf565b14158015611a375750600381516003811115611a3457611a34614fbf565b14155b15611a58578051604051633b0d540d60e21b815261079a91906004016157b9565b5f611a668260400151611e64565b905080606001516001600160401b03165f03611a98576040516339b894f960e21b81526004810185905260240161079a565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b0693906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b479190810190615296565b6040518263ffffffff1660e01b8152600401611b6391906152c7565b6020604051808303815f875af1158015611b7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3791906152d9565b5f611bac6120ae565b60030154600160401b90046001600160401b0316919050565b5f611bce6120ae565b5f8381526004820160205260409020805491925090611bec90615155565b90505f03611c105760405163089938b360e11b81526004810183905260240161079a565b60015f838152600580840160205260409091205460ff1690811115611c3757611c37614fbf565b14611c6a575f8281526005820160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611ca1920161580d565b6020604051808303815f875af1158015611cbd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060b91906152d9565b5f805f611ced846123ff565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611d2d91906152c7565b606060405180830381865af4158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190615897565b9250925092505f611d7b6120ae565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611dcf57604051632e19bc2d60e11b81526001600160401b038416600482015260240161079a565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611e4f90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b611e6c614cde565b5f611e756120ae565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff90911690811115611eaf57611eaf614fbf565b6005811115611ec057611ec0614fbf565b8152602001600182018054611ed490615155565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0090615155565b8015611f4b5780601f10611f2257610100808354040283529160200191611f4b565b820191905f5260205f20905b815481529060010190602001808311611f2e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b038116611fe55760405163caa903f960e01b81526001600160a01b038216600482015260240161079a565b5f611fee6127e4565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461201c5733611484565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806120546120ae565b905080600601848460405161206a9291906158d7565b90815260200160405180910390205491505092915050565b61208e848484846120d2565b61089d57604051631036cf9160e11b81526004810185905260240161079a565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b5f806120dc6127e4565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561211557612115614fbf565b600381111561212657612126614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61219c82611e64565b90506002835160038111156121b3576121b3614fbf565b146121d4578251604051633b0d540d60e21b815261079a91906004016157b9565b60208301516001600160a01b03163314612270575f8281526006850160205260409020546001600160a01b0316331461220d5733611484565b5f82815260068501602052604090205460c082015161223c91600160b01b90046001600160401b03169061556e565b6001600160401b03164210156122705760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b60028151600581111561228557612285614fbf565b036123a757600284015460808401516122a7916001600160401b03169061556e565b6001600160401b03164210156122db5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b87156122ed576122eb828861253e565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a082015161232691849161232191906158e6565b613531565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561236984888c6136fb565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610f779350505050565b6004815160058111156123bc576123bc614fbf565b036123e3576123cc83878b6136fb565b506123d689612cff565b6001945050505050610f77565b805160405163170cc93360e21b815261079a919060040161518d565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261248a9190810190615906565b91509150806124ac57604051636b2f19e960e01b815260040160405180910390fd5b8151156124d2578151604051636ba589a560e01b8152600481019190915260240161079a565b60208201516001600160a01b03161561250e576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b5092915050565b5f8061251f6127e4565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612589573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125b09190810190615906565b91509150806125d257604051636b2f19e960e01b815260040160405180910390fd5b5f6125db6127e4565b6005810154845191925014612609578251604051636ba589a560e01b8152600481019190915260240161079a565b60208301516001600160a01b031615612645576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b60208301516001600160a01b031615612681576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161079a565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126be91906152c7565b6040805180830381865af41580156126d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126fc9190615996565b9150915081881461272a5760405163fee3144560e01b8152600481018390526024810189905260440161079a565b5f8881526006840160205260409020600101546001600160401b0390811690821611156127bb575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26127d9565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128126127e4565b905061281d866138e9565b5f61282787611e64565b905061283287612515565b61284157600192505050610f77565b5f8781526006830160205260409020546001600160a01b031633146128665733611484565b5f87815260068301602052604090205460c082015161289591600160b01b90046001600160401b03169061556e565b6001600160401b03168160e001516001600160401b031610156128dc5760e081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161079a565b5f86156128f4576128ed888761253e565b9050612912565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612937906111ed565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa1580156129a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c591906152d9565b90506001600160a01b0386166129f1575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a109084906159b9565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615cec833981519152805460011901612a8057604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f80612a906127e4565b600281015490915061ffff600160401b90910481169086161080612ab9575061271061ffff8616115b15612add57604051635f12e6c360e11b815261ffff8616600482015260240161079a565b60028101546001600160401b039081169085161015612b19576040516202a06d60e11b81526001600160401b038516600482015260240161079a565b8054831080612b2b5750806001015483115b15612b4c5760405163222d164360e21b81526004810184905260240161079a565b5f612b5684613bd4565b90505f612b6282610ed7565b90505f612c29612b728a806159cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bb39250505060208c018c6159cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612bf79250505060608d0160408e01614f0a565b612c0460608e018e615a0e565b612c0d90615a22565b612c1a60808f018f615a0e565b612c2390615a22565b87613bf7565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b60015f80516020615cec83398151915255565b612cdf84848484612808565b61089d57604051635bff683f60e11b81526004810185905260240161079a565b5f612d086127e4565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612d4157612d41614fbf565b6003811115612d5257612d52614fbf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612dc6613fe1565b8260800151612dd5919061556e565b6001600160401b0316421015612e095760405163fb6ce63f60e01b81526001600160401b034216600482015260240161079a565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612e64575060208201515b5f80612e71838886613ffc565b91509150612e8a856020015161161c87606001516111ed565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f612ed96127e4565b5f838152600a820160205260408120805491905590915061089d84826140a9565b5f612f03614cde565b5f612f0c6120ae565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612f33886123ff565b604001516040518263ffffffff1660e01b8152600401612f5391906152c7565b6040805180830381865af4158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906157ea565b915091508015612fb857604051632d07135360e01b8152811515600482015260240161079a565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612ff057612ff0614fbf565b600581111561300157613001614fbf565b815260200160018201805461301590615155565b80601f016020809104026020016040519081016040528092919081815260200182805461304190615155565b801561308c5780601f106130635761010080835404028352916020019161308c565b820191905f5260205f20905b81548152906001019060200180831161306f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561310457613104614fbf565b14158015613125575060018151600581111561312257613122614fbf565b14155b1561314657805160405163170cc93360e21b815261079a919060040161518d565b60038151600581111561315b5761315b614fbf565b03613169576004815261316e565b600581525b836006018160200151604051613184919061544a565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff19169060019084908111156131c7576131c7614fbf565b0217905550602082015160018201906131e0908261549f565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f80516020615ccc83398151915254611422906001600160a01b0316838361411f565b5f806132dc6127e4565b90505f6132eb6102fd85613bd4565b90505f6132f787611e64565b905061330287612515565b613322576040516330efa98b60e01b81526004810188905260240161079a565b60028151600581111561333757613337614fbf565b1461335857805160405163170cc93360e21b815261079a919060040161518d565b5f828260a00151613369919061556e565b905083600201600a9054906101000a90046001600160401b0316826040015161339291906155b0565b6001600160401b0316816001600160401b031611156133cf57604051636d51fe0560e11b81526001600160401b038216600482015260240161079a565b5f806133db8a84613531565b915091505f8a8360405160200161340992919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61351f61417e565b613528826141c9565b61142281614246565b5f805f61353c6120ae565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b031661356c85826142ae565b5f6135768761451b565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561361a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136419190810190615296565b6040518263ffffffff1660e01b815260040161365d91906152c7565b6020604051808303815f875af1158015613679573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061369d91906152d9565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f806137056127e4565b90505f6137158660400151611e64565b90505f60038251600581111561372d5761372d614fbf565b148061374b575060048251600581111561374957613749614fbf565b145b1561375b575060e0810151613798565b60028251600581111561377057613770614fbf565b0361377c575042613798565b815160405163170cc93360e21b815261079a919060040161518d565b86608001516001600160401b0316816001600160401b0316116137c0575f9350505050613510565b600483015460608801515f916001600160a01b031690634f22429f906137e5906111ed565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613866573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061388a91906152d9565b90506001600160a01b0387166138a257876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f6138f26120ae565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff169081111561392c5761392c614fbf565b600581111561393d5761393d614fbf565b815260200160018201805461395190615155565b80601f016020809104026020016040519081016040528092919081815260200182805461397d90615155565b80156139c85780601f1061399f576101008083540402835291602001916139c8565b820191905f5260205f20905b8154815290600101906020018083116139ab57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613a4057613a40614fbf565b14613a73575f8381526005830160205260409081902054905163170cc93360e21b815261079a9160ff169060040161518d565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613ab857613ab8614fbf565b021790555060208201516001820190613ad1908261549f565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613b718482613531565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613bc6939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f610f25825f80516020615ccc833981519152546001600160a01b031690614584565b5f613c006120ae565b6007015460ff16613c2457604051637fab81e560e01b815260040160405180910390fd5b5f613c2d6120ae565b905042866001600160401b0316111580613c5c5750613c4f6202a300426159b9565b866001600160401b031610155b15613c8557604051635879da1360e11b81526001600160401b038716600482015260240161079a565b60038101546001600160401b0390613ca890600160401b900482168583166159b9565b1115613cd257604051633e1a785160e01b81526001600160401b038416600482015260240161079a565b613cdb85614590565b613ce484614590565b8651603014613d0b5786516040516326475b2f60e11b815260040161079a91815260200190565b8751601414613d2f5787604051633e08a12560e11b815260040161079a91906152c7565b5f801b8160060189604051613d44919061544a565b90815260200160405180910390205414613d73578760405163a41f772f60e01b815260040161079a91906152c7565b613d7d835f6142ae565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613dfd9190615b4f565b5f60405180830381865af4158015613e17573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e3e9190810190615c06565b5f82815260048601602052604090209193509150613e5c828261549f565b5081836006018b604051613e70919061544a565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613eac9085906004016152c7565b6020604051808303815f875af1158015613ec8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eec91906152d9565b5f8481526005860160205260409020805460ff19166001908117825591925001613f168c8261549f565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b0319169055613f6d8b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a604051613fca939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b5f613fea6120ae565b600101546001600160401b0316919050565b5f805f6140076127e4565b5f8681526008820160205260408120805490829055919250908190801561409b575f8781526006850160205260409020546127109061405190600160a01b900461ffff16836157d3565b61405b919061579a565b91508184600a015f8981526020019081526020015f205f82825461407f91906159b9565b9091555061408f90508282615c49565b925061409b89846140a9565b509097909650945050505050565b5f5f80516020615ccc83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015614104575f80fd5b505af1158015614116573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261060b91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506146af565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166141c757604051631afcd79f60e31b815260040160405180910390fd5b565b6141d161417e565b6141da81614710565b6141e2614729565b614243606082013560808301356141ff60c0850160a08601614f0a565b61420f60e0860160c08701615c5c565b614220610100870160e08801615c75565b61010087013561423861014089016101208a016152f0565b886101400135614739565b50565b61424e61417e565b5f80516020615ccc8339815191526001600160a01b03821661428e57604051637330680360e01b81526001600160a01b038316600482015260240161079a565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6142b76120ae565b90505f826001600160401b0316846001600160401b031611156142e5576142de83856158e6565b90506142f2565b6142ef84846158e6565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061435f57506001840154815161435b916001600160401b0316906159b9565b8210155b15614387576001600160401b03808416606083015282825260408201511660208201526143a6565b8281606001818151614399919061556e565b6001600160401b03169052505b60608101516143b69060646155b0565b602082015160018601546001600160401b0392909216916143e19190600160401b900460ff166155b0565b6001600160401b0316101561441a57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161079a565b858160400181815161442c919061556e565b6001600160401b031690525060408101805186919061444c9083906158e6565b6001600160401b03169052506001840154604082015160649161447a91600160401b90910460ff16906155b0565b6001600160401b031610156144b3576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161079a565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f806145256120ae565b5f848152600582016020526040902060020180549192509060089061455990600160401b90046001600160401b0316615c95565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6135108333846148fb565b805163ffffffff161580156145a9575060208101515115155b156145dd57805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161079a565b602081015151815163ffffffff16111561462057805160208201515160405163c08a0f1d60e01b815263ffffffff9092166004830152602482015260440161079a565b60015b816020015151811015611422576020820151614640600183615c49565b8151811061465057614650615350565b60200260200101516001600160a01b03168260200151828151811061467757614677615350565b60200260200101516001600160a01b031610156146a757604051630dbc8d5f60e31b815260040160405180910390fd5b600101614623565b5f6146c36001600160a01b03841683614a5e565b905080515f141580156146e75750808060200190518101906146e59190615cb0565b155b1561060b57604051635274afe760e01b81526001600160a01b038416600482015260240161079a565b61471861417e565b614720614a6b565b61424381614a73565b61473161417e565b6141c7614b57565b61474161417e565b5f61474a6127e4565b905061ffff86161580614762575061271061ffff8716115b1561478657604051635f12e6c360e11b815261ffff8716600482015260240161079a565b878911156147aa5760405163222d164360e21b8152600481018a905260240161079a565b60ff851615806147bd5750600a60ff8616115b156147e05760405163170db35960e31b815260ff8616600482015260240161079a565b6147e8613fe1565b6001600160401b0316876001600160401b03161015614824576040516202a06d60e11b81526001600160401b038816600482015260240161079a565b835f036148445760405163a733007160e01b815260040160405180910390fd5b8161486557604051632f6bd1db60e01b81526004810183905260240161079a565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614941573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061496591906152d9565b905061497c6001600160a01b038616853086614b5f565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156149c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149e491906152d9565b9050818111614a4a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161079a565b614a548282615c49565b9695505050505050565b606061351083835f614b98565b6141c761417e565b614a7b61417e565b5f614a846120ae565b8235815590506014614a9c6060840160408501615c75565b60ff161180614abb5750614ab66060830160408401615c75565b60ff16155b15614aef57614ad06060830160408401615c75565b604051634a59bbff60e11b815260ff909116600482015260240161079a565b614aff6060830160408401615c75565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b306040830160208401614f0a565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612cc061417e565b6040516001600160a01b03848116602483015283811660448301526064820183905261089d9186918216906323b872dd9060840161414c565b606081471015614bbd5760405163cd78605960e01b815230600482015260240161079a565b5f80856001600160a01b03168486604051614bd8919061544a565b5f6040518083038185875af1925050503d805f8114614c12576040519150601f19603f3d011682016040523d82523d5f602084013e614c17565b606091505b5091509150614a54868383606082614c3757614c3282614c7e565b613510565b8151158015614c4e57506001600160a01b0384163b155b15614c7757604051639996b31560e01b81526001600160a01b038516600482015260240161079a565b5080613510565b805115614c8e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614cb390615155565b5f825580601f10614cc2575050565b601f0160209004905f5260205f20908101906142439190614d23565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614d37575f8155600101614d24565b5090565b8015158114614243575f80fd5b803563ffffffff8116811461163f575f80fd5b5f805f60608486031215614d6d575f80fd5b833592506020840135614d7f81614d3b565b9150614d8d60408501614d48565b90509250925092565b5f60208284031215614da6575f80fd5b5035919050565b5f8060408385031215614dbe575f80fd5b82356001600160401b03811115614dd3575f80fd5b830160808186031215614de4575f80fd5b9150614df260208401614d48565b90509250929050565b5f8060408385031215614e0c575f80fd5b82359150614df260208401614d48565b6001600160a01b0381168114614243575f80fd5b5f805f8060808587031215614e43575f80fd5b843593506020850135614e5581614d3b565b9250614e6360408601614d48565b91506060850135614e7381614e1c565b939692955090935050565b803561ffff8116811461163f575f80fd5b6001600160401b0381168114614243575f80fd5b5f805f8060808587031215614eb6575f80fd5b84356001600160401b03811115614ecb575f80fd5b850160a08188031215614edc575f80fd5b9350614eea60208601614e7e565b92506040850135614efa81614e8f565b9396929550929360600135925050565b5f60208284031215614f1a575f80fd5b813561351081614e8f565b5f8060408385031215614f36575f80fd5b823591506020830135614f4881614e1c565b809150509250929050565b5f60208284031215614f63575f80fd5b61351082614d48565b5f8060408385031215614f7d575f80fd5b50508035926020909101359150565b5f80828403610180811215614f9f575f80fd5b61016080821215614fae575f80fd5b8493508301359050614f4881614e1c565b634e487b7160e01b5f52602160045260245ffd5b60068110614fe357614fe3614fbf565b9052565b5f5b83811015615001578181015183820152602001614fe9565b50505f910152565b5f8151808452615020816020860160208601614fe7565b601f01601f19169290920160200192915050565b60208152615046602082018351614fd3565b5f6020830151610100806040850152615063610120850183615009565b915060408501516001600160401b038082166060870152806060880151166080870152505060808501516150a260a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f80602083850312156150fb575f80fd5b82356001600160401b0380821115615111575f80fd5b818501915085601f830112615124575f80fd5b813581811115615132575f80fd5b866020828501011115615143575f80fd5b60209290920196919550909350505050565b600181811c9082168061516957607f821691505b60208210810361518757634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610f258284614fd3565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151d1576151d161519b565b60405290565b604080519081016001600160401b03811182821017156151d1576151d161519b565b604051601f8201601f191681016001600160401b03811182821017156152215761522161519b565b604052919050565b5f6001600160401b038211156152415761524161519b565b50601f01601f191660200190565b5f82601f83011261525e575f80fd5b815161527161526c82615229565b6151f9565b818152846020838601011115615285575f80fd5b610f77826020830160208701614fe7565b5f602082840312156152a6575f80fd5b81516001600160401b038111156152bb575f80fd5b610f778482850161524f565b602081525f6135106020830184615009565b5f602082840312156152e9575f80fd5b5051919050565b5f60208284031215615300575f80fd5b813561351081614e1c565b5f808335601e19843603018112615320575f80fd5b8301803591506001600160401b03821115615339575f80fd5b6020019150600581901b36038213156136f4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615378575f80fd5b9190910192915050565b5f82601f830112615391575f80fd5b813561539f61526c82615229565b8181528460208386010111156153b3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153df575f80fd5b6153e76151af565b82356001600160401b03808211156153fd575f80fd5b61540936838701615382565b8352602085013591508082111561541e575f80fd5b5061542b36828601615382565b602083015250604083013561543f81614e8f565b604082015292915050565b5f8251615378818460208701614fe7565b601f82111561060b57805f5260205f20601f840160051c810160208510156154805750805b601f840160051c820191505b81811015610f37575f815560010161548c565b81516001600160401b038111156154b8576154b861519b565b6154cc816154c68454615155565b8461545b565b602080601f8311600181146154ff575f84156154e85750858301515b5f19600386901b1c1916600185901b1785556110be565b5f85815260208120601f198616915b8281101561552d5788860151825594840194600190910190840161550e565b508582101561554a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561250e5761250e61555a565b5f63ffffffff8083168181036155a6576155a661555a565b6001019392505050565b6001600160401b038181168382160280821691908281146155d3576155d361555a565b505092915050565b5f808335601e198436030181126155f0575f80fd5b83016020810192503590506001600160401b0381111561560e575f80fd5b8036038213156136f4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156f957848303601f19018952813536889003605e19018112615680575f80fd5b8701606061568e82806155db565b82875261569e838801828461561c565b925050506156ae868301836155db565b868303888801526156c083828461561c565b9250505060408083013592506156d583614e8f565b6001600160401b03929092169490910193909352978301979083019060010161565b565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561572a81614e1c565b6001600160a01b031660608381019190915283013536849003601e19018112615751575f80fd5b83016020810190356001600160401b0381111561576c575f80fd5b8060051b360382131561577d575f80fd5b60808085015261579160a085018284615644565b95945050505050565b5f826157b457634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157cd576157cd614fbf565b91905290565b8082028115828204841417610f2557610f2561555a565b5f80604083850312156157fb575f80fd5b825191506020830151614f4881614d3b565b5f60208083525f845461581f81615155565b806020870152604060018084165f8114615840576001811461585c57615889565b60ff19851660408a0152604084151560051b8a01019550615889565b895f5260205f205f5b858110156158805781548b8201860152908301908801615865565b8a016040019650505b509398975050505050505050565b5f805f606084860312156158a9575f80fd5b8351925060208401516158bb81614e8f565b60408501519092506158cc81614e8f565b809150509250925092565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561250e5761250e61555a565b5f8060408385031215615917575f80fd5b82516001600160401b038082111561592d575f80fd5b9084019060608287031215615940575f80fd5b6159486151af565b82518152602083015161595a81614e1c565b6020820152604083015182811115615970575f80fd5b61597c8882860161524f565b6040830152508094505050506020830151614f4881614d3b565b5f80604083850312156159a7575f80fd5b825191506020830151614f4881614e8f565b80820180821115610f2557610f2561555a565b5f808335601e198436030181126159e1575f80fd5b8301803591506001600160401b038211156159fa575f80fd5b6020019150368190038213156136f4575f80fd5b5f8235603e19833603018112615378575f80fd5b5f60408236031215615a32575f80fd5b615a3a6151d7565b615a4383614d48565b81526020808401356001600160401b0380821115615a5f575f80fd5b9085019036601f830112615a71575f80fd5b813581811115615a8357615a8361519b565b8060051b9150615a948483016151f9565b8181529183018401918481019036841115615aad575f80fd5b938501935b83851015615ad75784359250615ac783614e1c565b8282529385019390850190615ab2565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b445784516001600160a01b03168252938301936001929092019190830190615b1b565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b75610100840182615009565b90506040840151601f1980858403016060860152615b938383615009565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615bc38383615ae9565b925060a08601519150808584030160c086015250615be18282615ae9565b91505060c0840151615bfe60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c17575f80fd5b8251915060208301516001600160401b03811115615c33575f80fd5b615c3f8582860161524f565b9150509250929050565b81810381811115610f2557610f2561555a565b5f60208284031215615c6c575f80fd5b61351082614e7e565b5f60208284031215615c85575f80fd5b813560ff81168114613510575f80fd5b5f6001600160401b038083168181036155a6576155a661555a565b5f60208284031215615cc0575f80fd5b815161351081614d3b56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220ddf9048e6e6779d040a184e9d35df5eabe9bdaf0aad963310918011dedf64a3e64736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -3351,7 +3351,7 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseUptimeUp // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220f730711c5b5760a4acff40008a9e3ea299c9a38a322da3ee6c00fb3fc9503a9d64736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220e6b22cfbb2dc3686c9e5d5c46b42e65620ca6777a1371e31c12b720ad3c60ea464736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index f9616f20c..ddebf48c8 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -105,7 +105,7 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615be6380380615be683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a998061014d5f395ff3fe608060405260043610610254575f3560e01c806380dd672f1161013f578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106cd578063ce161f14146106e1578063d5f20ff61461071d578063df93d8de14610749578063fb8b11dd1461075f578063fd7ac5e71461077e575f80fd5b8063ba3a4b9714610635578063bb0b193814610654578063bc5fbfec14610668578063bee0a03f1461069b578063c599e24f146106ba575f80fd5b80639ae06447116101045780639ae0644714610597578063a3a65e48146105b6578063a9778a7a146103a8578063af2f5feb146105d5578063afb98096146105e8578063b771b3bc1461061b575f80fd5b806380dd672f146105075780638280a25a146105265780638ef34c981461053a57806393e24598146105595780639681d94014610578575f80fd5b806337b9be8f116101d657806360ad77841161019b57806360ad778414610478578063620658561461049757806363e2ca971461044f578063732214f8146104b657806376f78621146104c95780637d8d2f77146104e8575f80fd5b806337b9be8f146103d05780633a1cfff6146103ef5780635dc1f5351461040e5780635dd6a6cb1461043057806360305d621461044f575f80fd5b806320d91b7a1161021c57806320d91b7a1461030157806325e1c776146103205780632e2194d81461033f578063329c3e121461037657806335455ded146103a8575f80fd5b80630118acc4146102585780630322ed98146102795780630ba512d114610298578063151d30d1146102b75780631ec44724146102e2575b5f80fd5b348015610263575f80fd5b50610277610272366004614b41565b61079d565b005b348015610284575f80fd5b50610277610293366004614b7c565b6107ae565b3480156102a3575f80fd5b506102776102b2366004614b93565b610a41565b3480156102c2575f80fd5b506102cb600a81565b60405160ff90911681526020015b60405180910390f35b3480156102ed575f80fd5b506102776102fc366004614b41565b610b1e565b34801561030c575f80fd5b5061027761031b366004614baa565b610b2a565b34801561032b575f80fd5b5061027761033a366004614bf8565b6110de565b34801561034a575f80fd5b5061035e610359366004614b7c565b611152565b6040516001600160401b0390911681526020016102d9565b348015610381575f80fd5b506103906001600160991b0181565b6040516001600160a01b0390911681526020016102d9565b3480156103b3575f80fd5b506103bd61271081565b60405161ffff90911681526020016102d9565b3480156103db575f80fd5b506102776103ea366004614c2d565b6111a6565b3480156103fa575f80fd5b50610277610409366004614b41565b6111b9565b348015610419575f80fd5b506104226111c5565b6040519081526020016102d9565b34801561043b575f80fd5b5061027761044a366004614c2d565b6111d4565b34801561045a575f80fd5b50610463601481565b60405163ffffffff90911681526020016102d9565b348015610483575f80fd5b50610277610492366004614bf8565b6111e0565b3480156104a2575f80fd5b506104226104b1366004614c8f565b611433565b3480156104c1575f80fd5b506104225f81565b3480156104d4575f80fd5b506102776104e3366004614b41565b611453565b3480156104f3575f80fd5b50610277610502366004614c2d565b61145f565b348015610512575f80fd5b50610277610521366004614bf8565b61146b565b348015610531575f80fd5b506102cb603081565b348015610545575f80fd5b50610277610554366004614caa565b61166c565b348015610564575f80fd5b50610277610573366004614b7c565b61171d565b348015610583575f80fd5b50610422610592366004614cd8565b6117b1565b3480156105a2575f80fd5b506102776105b1366004614c2d565b61188a565b3480156105c1575f80fd5b506104226105d0366004614cd8565b611896565b6104226105e3366004614d02565b611a85565b3480156105f3575f80fd5b506104227f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610626575f80fd5b506103906005600160991b0181565b348015610640575f80fd5b5061027761064f366004614b7c565b611ab9565b34801561065f575f80fd5b5061035e611d12565b348015610673575f80fd5b506104227fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b3480156106a6575f80fd5b506102776106b5366004614b7c565b611d34565b6104226106c8366004614b7c565b611e50565b3480156106d8575f80fd5b506102cb601481565b3480156106ec575f80fd5b506107006106fb366004614cd8565b611e7c565b604080519283526001600160401b039091166020830152016102d9565b348015610728575f80fd5b5061073c610737366004614b7c565b611fff565b6040516102d99190614dd8565b348015610754575f80fd5b5061035e6202a30081565b34801561076a575f80fd5b50610277610779366004614caa565b61214e565b348015610789575f80fd5b50610422610798366004614e8e565b6121e5565b6107a98383835f61221d565b505050565b5f6107b7612249565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107f1576107f1614d63565b600581111561080257610802614d63565b815260200160018201805461081690614ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461084290614ef9565b801561088d5780601f106108645761010080835404028352916020019161088d565b820191905f5260205f20905b81548152906001019060200180831161087057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561090557610905614d63565b14610941575f8381526005830160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109df9190810190615034565b6040518263ffffffff1660e01b81526004016109fb9190615065565b6020604051808303815f875af1158015610a17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3b9190615077565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a8a575080546001600160401b03808416911610155b15610aa85760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ad28361226d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a3b8383835f612281565b5f610b33612249565b600781015490915060ff1615610b5c57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc39190615077565b836020013514610bec576040516372b0a7e760e11b815260208401356004820152602401610938565b30610bfd606085016040860161508e565b6001600160a01b031614610c4057610c1b606084016040850161508e565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610938565b5f610c4e60608501856150a9565b905090505f805b828163ffffffff161015610ed4575f610c7160608801886150a9565b8363ffffffff16818110610c8757610c876150ee565b9050602002810190610c999190615102565b610ca29061516d565b80516040519192505f916006880191610cba916151e8565b90815260200160405180910390205414610cea57805160405163a41f772f60e01b81526109389190600401615065565b805151601414610d10578051604051633e08a12560e11b81526109389190600401615065565b5f6002885f013584604051602001610d3f92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d59916151e8565b602060405180830381855afa158015610d74573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d979190615077565b90508086600601835f0151604051610daf91906151e8565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610def908261523d565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e5e908561530c565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610eb991906001600160401b0391909116815260200190565b60405180910390a3505080610ecd9061532c565b9050610c55565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610f17910460ff168361534e565b6001600160401b03161015610f4a57604051633e1a785160e01b81526001600160401b0382166004820152602401610938565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f6e876125b6565b604001516040518263ffffffff1660e01b8152600401610f8e9190615065565b602060405180830381865af4158015610fa9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fcd9190615077565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b815260040161100791906154a4565b5f60405180830381865af4158015611021573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110489190810190615034565b90505f60028260405161105b91906151e8565b602060405180830381855afa158015611076573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110999190615077565b90508281146110c55760405163baaea89d60e01b81526004810182905260248101849052604401610938565b5050506007909201805460ff1916600117905550505050565b6110e7826126cc565b611107576040516330efa98b60e01b815260048101839052602401610938565b5f61111183611fff565b519050600281600581111561112857611128614d63565b14611148578060405163170cc93360e21b81526004016109389190614f2b565b610a3b83836126f5565b5f8061115c61299b565b6003015461116a9084615538565b905080158061117f57506001600160401b0381115b156111a05760405163222d164360e21b815260048101849052602401610938565b92915050565b6111b284848484612281565b5050505050565b610a3b8383835f6129bf565b5f6111ce612249565b54919050565b610a3b84848484612c06565b5f6111e961299b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561122257611222614d63565b600381111561123357611233614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112a982611fff565b90506001835160038111156112c0576112c0614d63565b146112e1578251604051633b0d540d60e21b81526109389190600401615557565b6004815160058111156112f6576112f6614d63565b0361130c5761130486612c32565b505050505050565b8260a001516001600160401b031681608001516001600160401b031610156113ac575f8061133987611e7c565b915091508184146113675760405163fee3144560e01b81526004810183905260248101859052604401610938565b8460a001516001600160401b0316816001600160401b031610156113a957604051632e19bc2d60e11b81526001600160401b0382166004820152602401610938565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f61143c61299b565b600301546111a0906001600160401b038416615571565b6107a98383835f612c06565b6111b2848484846129bf565b611473612e03565b5f61147c61299b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156114b5576114b5614d63565b60038111156114c6576114c6614d63565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561153f5761153f614d63565b14611560578051604051633b0d540d60e21b81526109389190600401615557565b5f61156e8260400151611fff565b9050600461157f8360400151611fff565b51600581111561159157611591614d63565b141580156115b857508160c001516001600160401b031681608001516001600160401b0316105b15611646575f806115c886611e7c565b91509150818460400151146116015781846040015160405163fee3144560e01b8152600401610938929190918252602082015260400190565b806001600160401b03168460c001516001600160401b0316111561164357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610938565b50505b61164f85612c32565b50505061166860015f80516020615a4483398151915255565b5050565b5f61167561299b565b90506001600160a01b0382166116a95760405163caa903f960e01b81526001600160a01b0383166004820152602401610938565b5f8381526006820160205260409020546001600160a01b031633146116ef57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610938565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61172661299b565b90505f61173283611fff565b519050600481600581111561174957611749614d63565b14611769578060405163170cc93360e21b81526004016109389190614f2b565b5f8381526006830160205260409020546001600160a01b0316331461178e57336116ca565b5f8381526006830160205260409020546107a9906001600160a01b031684612e4d565b5f6117ba612e03565b5f6117c361299b565b90505f806117d085612e77565b915091506117dd826126cc565b6117eb5750915061186f9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b0391821691168061182d5750805b60048351600581111561184257611842614d63565b03611851576118518185612e4d565b611867826118628560400151611433565b61322c565b509193505050505b61188560015f80516020615a4483398151915255565b919050565b610a3b8484848461221d565b5f806118a0612249565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118c7876125b6565b604001516040518263ffffffff1660e01b81526004016118e79190615065565b6040805180830381865af4158015611901573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119259190615588565b915091508061194b57604051632d07135360e01b81528115156004820152602401610938565b5f8281526004840160205260409020805461196590614ef9565b90505f036119895760405163089938b360e11b815260048101839052602401610938565b60015f838152600580860160205260409091205460ff16908111156119b0576119b0614d63565b146119e3575f8281526005840160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b5f82815260048401602052604081206119fb91614a8d565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f611a8e612e03565b611a9a8484843461323f565b9050611ab260015f80516020615a4483398151915255565b9392505050565b5f611ac261299b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611afb57611afb614d63565b6003811115611b0c57611b0c614d63565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b8557611b85614d63565b14158015611ba65750600381516003811115611ba357611ba3614d63565b14155b15611bc7578051604051633b0d540d60e21b81526109389190600401615557565b5f611bd58260400151611fff565b905080606001516001600160401b03165f03611c07576040516339b894f960e21b815260048101859052602401610938565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c7593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c8f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cb69190810190615034565b6040518263ffffffff1660e01b8152600401611cd29190615065565b6020604051808303815f875af1158015611cee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b29190615077565b5f611d1b612249565b60030154600160401b90046001600160401b0316919050565b5f611d3d612249565b5f8381526004820160205260409020805491925090611d5b90614ef9565b90505f03611d7f5760405163089938b360e11b815260048101839052602401610938565b60015f838152600580840160205260409091205460ff1690811115611da657611da6614d63565b14611dd9575f8281526005820160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e1092016155ab565b6020604051808303815f875af1158015611e2c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a99190615077565b5f611e59612e03565b611e6482333461346e565b905061188560015f80516020615a4483398151915255565b5f805f611e88846125b6565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611ec89190615065565b606060405180830381865af4158015611ee3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f079190615635565b9250925092505f611f16612249565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f6a57604051632e19bc2d60e11b81526001600160401b0384166004820152602401610938565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611fea90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b612007614ac4565b5f612010612249565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff9091169081111561204a5761204a614d63565b600581111561205b5761205b614d63565b815260200160018201805461206f90614ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461209b90614ef9565b80156120e65780601f106120bd576101008083540402835291602001916120e6565b820191905f5260205f20905b8154815290600101906020018083116120c957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b0381166121805760405163caa903f960e01b81526001600160a01b0382166004820152602401610938565b5f61218961299b565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121b757336116ca565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806121ef612249565b905080600601848460405161220592919061566a565b90815260200160405180910390205491505092915050565b61222984848484612281565b610a3b57604051631036cf9160e11b815260048101859052602401610938565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b6122756136ae565b61227e816136f9565b50565b5f8061228b61299b565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156122c4576122c4614d63565b60038111156122d5576122d5614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61234b82611fff565b905060028351600381111561236257612362614d63565b14612383578251604051633b0d540d60e21b81526109389190600401615557565b60208301516001600160a01b0316331461241f575f8281526006850160205260409020546001600160a01b031633146123bc57336116ca565b5f82815260068501602052604090205460c08201516123eb91600160b01b90046001600160401b03169061530c565b6001600160401b031642101561241f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b60028151600581111561243457612434614d63565b036125565760028401546080840151612456916001600160401b03169061530c565b6001600160401b031642101561248a5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b871561249c5761249a82886126f5565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516124d59184916124d09190615679565b613773565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561251884888c61393d565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125ae9350505050565b60048151600581111561256b5761256b614d63565b036125925761257b83878b61393d565b5061258589612c32565b60019450505050506125ae565b805160405163170cc93360e21b81526109389190600401614f2b565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561261a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126419190810190615699565b915091508061266357604051636b2f19e960e01b815260040160405180910390fd5b815115612689578151604051636ba589a560e01b81526004810191909152602401610938565b60208201516001600160a01b0316156126c5576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b5092915050565b5f806126d661299b565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612740573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127679190810190615699565b915091508061278957604051636b2f19e960e01b815260040160405180910390fd5b5f61279261299b565b60058101548451919250146127c0578251604051636ba589a560e01b81526004810191909152602401610938565b60208301516001600160a01b0316156127fc576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b60208301516001600160a01b031615612838576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128759190615065565b6040805180830381865af415801561288f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b39190615729565b915091508188146128e15760405163fee3144560e01b81526004810183905260248101899052604401610938565b5f8881526006840160205260409020600101546001600160401b039081169082161115612972575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612990565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806129c961299b565b90506129d486613b2b565b5f6129de87611fff565b90506129e9876126cc565b6129f8576001925050506125ae565b5f8781526006830160205260409020546001600160a01b03163314612a1d57336116ca565b5f87815260068301602052604090205460c0820151612a4c91600160b01b90046001600160401b03169061530c565b6001600160401b03168160e001516001600160401b03161015612a935760e081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610938565b5f8615612aab57612aa488876126f5565b9050612ac9565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612aee90611433565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612b58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b7c9190615077565b90506001600160a01b038616612ba8575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612bc790849061574c565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612c12848484846129bf565b610a3b57604051635bff683f60e11b815260048101859052602401610938565b5f612c3b61299b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c7457612c74614d63565b6003811115612c8557612c85614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cf9613e16565b8260800151612d08919061530c565b6001600160401b0316421015612d3c5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d97575060208201515b5f80612da4838886613e31565b91509150612dbd85602001516118628760600151611433565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a44833981519152805460011901612e3457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a4483398151915255565b5f612e5661299b565b5f838152600a8201602052604081208054919055909150610a3b8482613ede565b5f612e80614ac4565b5f612e89612249565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612eb0886125b6565b604001516040518263ffffffff1660e01b8152600401612ed09190615065565b6040805180830381865af4158015612eea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0e9190615588565b915091508015612f3557604051632d07135360e01b81528115156004820152602401610938565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f6d57612f6d614d63565b6005811115612f7e57612f7e614d63565b8152602001600182018054612f9290614ef9565b80601f0160208091040260200160405190810160405280929190818152602001828054612fbe90614ef9565b80156130095780601f10612fe057610100808354040283529160200191613009565b820191905f5260205f20905b815481529060010190602001808311612fec57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561308157613081614d63565b141580156130a2575060018151600581111561309f5761309f614d63565b14155b156130c357805160405163170cc93360e21b81526109389190600401614f2b565b6003815160058111156130d8576130d8614d63565b036130e657600481526130eb565b600581525b83600601816020015160405161310191906151e8565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561314457613144614d63565b02179055506020820151600182019061315d908261523d565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116686001600160a01b03831682613f3c565b5f8061324961299b565b600281015490915061ffff600160401b90910481169086161080613272575061271061ffff8616115b1561329657604051635f12e6c360e11b815261ffff86166004820152602401610938565b60028101546001600160401b0390811690851610156132d2576040516202a06d60e11b81526001600160401b0385166004820152602401610938565b80548310806132e45750806001015483115b156133055760405163222d164360e21b815260048101849052602401610938565b825f61331082611152565b90505f6133d76133208a8061575f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133619250505060208c018c61575f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133a59250505060608d0160408e01614c8f565b6133b260608e018e6157a1565b6133bb906157b5565b6133c860808f018f6157a1565b6133d1906157b5565b87613fcf565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061347861299b565b90505f61348484611152565b90505f61349087611fff565b905061349b876126cc565b6134bb576040516330efa98b60e01b815260048101889052602401610938565b6002815160058111156134d0576134d0614d63565b146134f157805160405163170cc93360e21b81526109389190600401614f2b565b5f828260a00151613502919061530c565b905083600201600a9054906101000a90046001600160401b0316826040015161352b919061534e565b6001600160401b0316816001600160401b0316111561356857604051636d51fe0560e11b81526001600160401b0382166004820152602401610938565b5f806135748a84613773565b915091505f8a836040516020016135a292919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166136f757604051631afcd79f60e31b815260040160405180910390fd5b565b6137016136ae565b61370a816143b9565b6137126143d2565b61227e6060820135608083013561372f60c0850160a08601614c8f565b61373f60e0860160c0870161587c565b613750610100870160e08801615895565b61010087013561376861014089016101208a0161508e565b8861014001356143e2565b5f805f61377e612249565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137ae85826145a4565b5f6137b887614811565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561385c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138839190810190615034565b6040518263ffffffff1660e01b815260040161389f9190615065565b6020604051808303815f875af11580156138bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138df9190615077565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f8061394761299b565b90505f6139578660400151611fff565b90505f60038251600581111561396f5761396f614d63565b148061398d575060048251600581111561398b5761398b614d63565b145b1561399d575060e08101516139da565b6002825160058111156139b2576139b2614d63565b036139be5750426139da565b815160405163170cc93360e21b81526109389190600401614f2b565b86608001516001600160401b0316816001600160401b031611613a02575f9350505050611ab2565b600483015460608801515f916001600160a01b031690634f22429f90613a2790611433565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613aa8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613acc9190615077565b90506001600160a01b038716613ae457876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613b34612249565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b6e57613b6e614d63565b6005811115613b7f57613b7f614d63565b8152602001600182018054613b9390614ef9565b80601f0160208091040260200160405190810160405280929190818152602001828054613bbf90614ef9565b8015613c0a5780601f10613be157610100808354040283529160200191613c0a565b820191905f5260205f20905b815481529060010190602001808311613bed57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c8257613c82614d63565b14613cb5575f8381526005830160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613cfa57613cfa614d63565b021790555060208201516001820190613d13908261523d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613db38482613773565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613e08939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613e1f612249565b600101546001600160401b0316919050565b5f805f613e3c61299b565b5f86815260088201602052604081208054908290559192509081908015613ed0575f87815260068501602052604090205461271090613e8690600160a01b900461ffff1683615571565b613e909190615538565b91508184600a015f8981526020019081526020015f205f828254613eb4919061574c565b90915550613ec4905082826158b5565b9250613ed08984613ede565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613f2a575f80fd5b505af1158015611304573d5f803e3d5ffd5b80471015613f5f5760405163cd78605960e01b8152306004820152602401610938565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613fa8576040519150601f19603f3d011682016040523d82523d5f602084013e613fad565b606091505b50509050806107a957604051630a12f52160e11b815260040160405180910390fd5b5f613fd8612249565b6007015460ff16613ffc57604051637fab81e560e01b815260040160405180910390fd5b5f614005612249565b905042866001600160401b031611158061403457506140276202a3004261574c565b866001600160401b031610155b1561405d57604051635879da1360e11b81526001600160401b0387166004820152602401610938565b60038101546001600160401b039061408090600160401b9004821685831661574c565b11156140aa57604051633e1a785160e01b81526001600160401b0384166004820152602401610938565b6140b38561487a565b6140bc8461487a565b86516030146140e35786516040516326475b2f60e11b815260040161093891815260200190565b87516014146141075787604051633e08a12560e11b81526004016109389190615065565b5f801b816006018960405161411c91906151e8565b9081526020016040518091039020541461414b578760405163a41f772f60e01b81526004016109389190615065565b614155835f6145a4565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016141d5919061592e565b5f60405180830381865af41580156141ef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261421691908101906159e5565b5f82815260048601602052604090209193509150614234828261523d565b5081836006018b60405161424891906151e8565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614284908590600401615065565b6020604051808303815f875af11580156142a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142c49190615077565b5f8481526005860160205260409020805460ff191660019081178255919250016142ee8c8261523d565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690556143458b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a6040516143a2939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b6143c16136ae565b6143c9614999565b61227e816149a1565b6143da6136ae565b6136f7614a85565b6143ea6136ae565b5f6143f361299b565b905061ffff8616158061440b575061271061ffff8716115b1561442f57604051635f12e6c360e11b815261ffff87166004820152602401610938565b878911156144535760405163222d164360e21b8152600481018a9052602401610938565b60ff851615806144665750600a60ff8616115b156144895760405163170db35960e31b815260ff86166004820152602401610938565b614491613e16565b6001600160401b0316876001600160401b031610156144cd576040516202a06d60e11b81526001600160401b0388166004820152602401610938565b835f036144ed5760405163a733007160e01b815260040160405180910390fd5b8161450e57604051632f6bd1db60e01b815260048101839052602401610938565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145ad612249565b90505f826001600160401b0316846001600160401b031611156145db576145d48385615679565b90506145e8565b6145e58484615679565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580614655575060018401548151614651916001600160401b03169061574c565b8210155b1561467d576001600160401b038084166060830152828252604082015116602082015261469c565b828160600181815161468f919061530c565b6001600160401b03169052505b60608101516146ac90606461534e565b602082015160018601546001600160401b0392909216916146d79190600160401b900460ff1661534e565b6001600160401b0316101561471057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610938565b8581604001818151614722919061530c565b6001600160401b0316905250604081018051869190614742908390615679565b6001600160401b03169052506001840154604082015160649161477091600160401b90910460ff169061534e565b6001600160401b031610156147a9576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610938565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061481b612249565b5f848152600582016020526040902060020180549192509060089061484f90600160401b90046001600160401b0316615a28565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614893575060208101515115155b156148c757805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610938565b602081015151815163ffffffff16111561490a57805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610938565b60015b81602001515181101561166857602082015161492a6001836158b5565b8151811061493a5761493a6150ee565b60200260200101516001600160a01b031682602001518281518110614961576149616150ee565b60200260200101516001600160a01b0316101561499157604051630dbc8d5f60e31b815260040160405180910390fd5b60010161490d565b6136f76136ae565b6149a96136ae565b5f6149b2612249565b82358155905060146149ca6060840160408501615895565b60ff1611806149e957506149e46060830160408401615895565b60ff16155b15614a1d576149fe6060830160408401615895565b604051634a59bbff60e11b815260ff9091166004820152602401610938565b614a2d6060830160408401615895565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a5e6040830160208401614c8f565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612e3a6136ae565b508054614a9990614ef9565b5f825580601f10614aa8575050565b601f0160209004905f5260205f209081019061227e9190614b09565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614b1d575f8155600101614b0a565b5090565b801515811461227e575f80fd5b803563ffffffff81168114611885575f80fd5b5f805f60608486031215614b53575f80fd5b833592506020840135614b6581614b21565b9150614b7360408501614b2e565b90509250925092565b5f60208284031215614b8c575f80fd5b5035919050565b5f6101608284031215614ba4575f80fd5b50919050565b5f8060408385031215614bbb575f80fd5b82356001600160401b03811115614bd0575f80fd5b830160808186031215614be1575f80fd5b9150614bef60208401614b2e565b90509250929050565b5f8060408385031215614c09575f80fd5b82359150614bef60208401614b2e565b6001600160a01b038116811461227e575f80fd5b5f805f8060808587031215614c40575f80fd5b843593506020850135614c5281614b21565b9250614c6060408601614b2e565b91506060850135614c7081614c19565b939692955090935050565b6001600160401b038116811461227e575f80fd5b5f60208284031215614c9f575f80fd5b8135611ab281614c7b565b5f8060408385031215614cbb575f80fd5b823591506020830135614ccd81614c19565b809150509250929050565b5f60208284031215614ce8575f80fd5b611ab282614b2e565b803561ffff81168114611885575f80fd5b5f805f60608486031215614d14575f80fd5b83356001600160401b03811115614d29575f80fd5b840160a08187031215614d3a575f80fd5b9250614d4860208501614cf1565b91506040840135614d5881614c7b565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d8757614d87614d63565b9052565b5f5b83811015614da5578181015183820152602001614d8d565b50505f910152565b5f8151808452614dc4816020860160208601614d8b565b601f01601f19169290920160200192915050565b60208152614dea602082018351614d77565b5f6020830151610100806040850152614e07610120850183614dad565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614e4660a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e9f575f80fd5b82356001600160401b0380821115614eb5575f80fd5b818501915085601f830112614ec8575f80fd5b813581811115614ed6575f80fd5b866020828501011115614ee7575f80fd5b60209290920196919550909350505050565b600181811c90821680614f0d57607f821691505b602082108103614ba457634e487b7160e01b5f52602260045260245ffd5b602081016111a08284614d77565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f6f57614f6f614f39565b60405290565b604080519081016001600160401b0381118282101715614f6f57614f6f614f39565b604051601f8201601f191681016001600160401b0381118282101715614fbf57614fbf614f39565b604052919050565b5f6001600160401b03821115614fdf57614fdf614f39565b50601f01601f191660200190565b5f82601f830112614ffc575f80fd5b815161500f61500a82614fc7565b614f97565b818152846020838601011115615023575f80fd5b6125ae826020830160208701614d8b565b5f60208284031215615044575f80fd5b81516001600160401b03811115615059575f80fd5b6125ae84828501614fed565b602081525f611ab26020830184614dad565b5f60208284031215615087575f80fd5b5051919050565b5f6020828403121561509e575f80fd5b8135611ab281614c19565b5f808335601e198436030181126150be575f80fd5b8301803591506001600160401b038211156150d7575f80fd5b6020019150600581901b3603821315613936575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615116575f80fd5b9190910192915050565b5f82601f83011261512f575f80fd5b813561513d61500a82614fc7565b818152846020838601011115615151575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561517d575f80fd5b615185614f4d565b82356001600160401b038082111561519b575f80fd5b6151a736838701615120565b835260208501359150808211156151bc575f80fd5b506151c936828601615120565b60208301525060408301356151dd81614c7b565b604082015292915050565b5f8251615116818460208701614d8b565b601f8211156107a957805f5260205f20601f840160051c8101602085101561521e5750805b601f840160051c820191505b818110156111b2575f815560010161522a565b81516001600160401b0381111561525657615256614f39565b61526a816152648454614ef9565b846151f9565b602080601f83116001811461529d575f84156152865750858301515b5f19600386901b1c1916600185901b178555611304565b5f85815260208120601f198616915b828110156152cb578886015182559484019460019091019084016152ac565b50858210156152e857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126c5576126c56152f8565b5f63ffffffff808316818103615344576153446152f8565b6001019392505050565b6001600160401b03818116838216028082169190828114615371576153716152f8565b505092915050565b5f808335601e1984360301811261538e575f80fd5b83016020810192503590506001600160401b038111156153ac575f80fd5b803603821315613936575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561549757848303601f19018952813536889003605e1901811261541e575f80fd5b8701606061542c8280615379565b82875261543c83880182846153ba565b9250505061544c86830183615379565b8683038888015261545e8382846153ba565b92505050604080830135925061547383614c7b565b6001600160401b0392909216949091019390935297830197908301906001016153f9565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356154c881614c19565b6001600160a01b031660608381019190915283013536849003601e190181126154ef575f80fd5b83016020810190356001600160401b0381111561550a575f80fd5b8060051b360382131561551b575f80fd5b60808085015261552f60a0850182846153e2565b95945050505050565b5f8261555257634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061556b5761556b614d63565b91905290565b80820281158282048414176111a0576111a06152f8565b5f8060408385031215615599575f80fd5b825191506020830151614ccd81614b21565b5f60208083525f84546155bd81614ef9565b806020870152604060018084165f81146155de57600181146155fa57615627565b60ff19851660408a0152604084151560051b8a01019550615627565b895f5260205f205f5b8581101561561e5781548b8201860152908301908801615603565b8a016040019650505b509398975050505050505050565b5f805f60608486031215615647575f80fd5b83519250602084015161565981614c7b565b6040850151909250614d5881614c7b565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126c5576126c56152f8565b5f80604083850312156156aa575f80fd5b82516001600160401b03808211156156c0575f80fd5b90840190606082870312156156d3575f80fd5b6156db614f4d565b8251815260208301516156ed81614c19565b6020820152604083015182811115615703575f80fd5b61570f88828601614fed565b6040830152508094505050506020830151614ccd81614b21565b5f806040838503121561573a575f80fd5b825191506020830151614ccd81614c7b565b808201808211156111a0576111a06152f8565b5f808335601e19843603018112615774575f80fd5b8301803591506001600160401b0382111561578d575f80fd5b602001915036819003821315613936575f80fd5b5f8235603e19833603018112615116575f80fd5b5f604082360312156157c5575f80fd5b6157cd614f75565b6157d683614b2e565b81526020808401356001600160401b03808211156157f2575f80fd5b9085019036601f830112615804575f80fd5b81358181111561581657615816614f39565b8060051b9150615827848301614f97565b8181529183018401918481019036841115615840575f80fd5b938501935b8385101561586a578435925061585a83614c19565b8282529385019390850190615845565b94860194909452509295945050505050565b5f6020828403121561588c575f80fd5b611ab282614cf1565b5f602082840312156158a5575f80fd5b813560ff81168114611ab2575f80fd5b818103818111156111a0576111a06152f8565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156159235784516001600160a01b031682529383019360019290920191908301906158fa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615954610100840182614dad565b90506040840151601f19808584030160608601526159728383614dad565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159a283836158c8565b925060a08601519150808584030160c0860152506159c082826158c8565b91505060c08401516159dd60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159f6575f80fd5b8251915060208301516001600160401b03811115615a12575f80fd5b615a1e85828601614fed565b9150509250929050565b5f6001600160401b03808316818103615344576153446152f856fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220c19ae8f31c532736e1432f7571a1f2b2bd478d36426ad979b9746f2a8d97fb3e64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615be6380380615be683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a998061014d5f395ff3fe608060405260043610610254575f3560e01c806380dd672f1161013f578063ba3a4b97116100b3578063c974d1b611610078578063c974d1b6146106cd578063ce161f14146106e1578063d5f20ff61461071d578063df93d8de14610749578063fb8b11dd1461075f578063fd7ac5e71461077e575f80fd5b8063ba3a4b9714610635578063bb0b193814610654578063bc5fbfec14610668578063bee0a03f1461069b578063c599e24f146106ba575f80fd5b80639ae06447116101045780639ae0644714610597578063a3a65e48146105b6578063a9778a7a146103a8578063af2f5feb146105d5578063afb98096146105e8578063b771b3bc1461061b575f80fd5b806380dd672f146105075780638280a25a146105265780638ef34c981461053a57806393e24598146105595780639681d94014610578575f80fd5b806337b9be8f116101d657806360ad77841161019b57806360ad778414610478578063620658561461049757806363e2ca971461044f578063732214f8146104b657806376f78621146104c95780637d8d2f77146104e8575f80fd5b806337b9be8f146103d05780633a1cfff6146103ef5780635dc1f5351461040e5780635dd6a6cb1461043057806360305d621461044f575f80fd5b806320d91b7a1161021c57806320d91b7a1461030157806325e1c776146103205780632e2194d81461033f578063329c3e121461037657806335455ded146103a8575f80fd5b80630118acc4146102585780630322ed98146102795780630ba512d114610298578063151d30d1146102b75780631ec44724146102e2575b5f80fd5b348015610263575f80fd5b50610277610272366004614b41565b61079d565b005b348015610284575f80fd5b50610277610293366004614b7c565b6107ae565b3480156102a3575f80fd5b506102776102b2366004614b93565b610a41565b3480156102c2575f80fd5b506102cb600a81565b60405160ff90911681526020015b60405180910390f35b3480156102ed575f80fd5b506102776102fc366004614b41565b610b1e565b34801561030c575f80fd5b5061027761031b366004614baa565b610b2a565b34801561032b575f80fd5b5061027761033a366004614bf8565b6110de565b34801561034a575f80fd5b5061035e610359366004614b7c565b611152565b6040516001600160401b0390911681526020016102d9565b348015610381575f80fd5b506103906001600160991b0181565b6040516001600160a01b0390911681526020016102d9565b3480156103b3575f80fd5b506103bd61271081565b60405161ffff90911681526020016102d9565b3480156103db575f80fd5b506102776103ea366004614c2d565b6111a6565b3480156103fa575f80fd5b50610277610409366004614b41565b6111b9565b348015610419575f80fd5b506104226111c5565b6040519081526020016102d9565b34801561043b575f80fd5b5061027761044a366004614c2d565b6111d4565b34801561045a575f80fd5b50610463601481565b60405163ffffffff90911681526020016102d9565b348015610483575f80fd5b50610277610492366004614bf8565b6111e0565b3480156104a2575f80fd5b506104226104b1366004614c8f565b611433565b3480156104c1575f80fd5b506104225f81565b3480156104d4575f80fd5b506102776104e3366004614b41565b611453565b3480156104f3575f80fd5b50610277610502366004614c2d565b61145f565b348015610512575f80fd5b50610277610521366004614bf8565b61146b565b348015610531575f80fd5b506102cb603081565b348015610545575f80fd5b50610277610554366004614caa565b61166c565b348015610564575f80fd5b50610277610573366004614b7c565b61171d565b348015610583575f80fd5b50610422610592366004614cd8565b6117b1565b3480156105a2575f80fd5b506102776105b1366004614c2d565b61188a565b3480156105c1575f80fd5b506104226105d0366004614cd8565b611896565b6104226105e3366004614d02565b611a85565b3480156105f3575f80fd5b506104227f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610626575f80fd5b506103906005600160991b0181565b348015610640575f80fd5b5061027761064f366004614b7c565b611ab9565b34801561065f575f80fd5b5061035e611d12565b348015610673575f80fd5b506104227fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b3480156106a6575f80fd5b506102776106b5366004614b7c565b611d34565b6104226106c8366004614b7c565b611e50565b3480156106d8575f80fd5b506102cb601481565b3480156106ec575f80fd5b506107006106fb366004614cd8565b611e7c565b604080519283526001600160401b039091166020830152016102d9565b348015610728575f80fd5b5061073c610737366004614b7c565b611fff565b6040516102d99190614dd8565b348015610754575f80fd5b5061035e6202a30081565b34801561076a575f80fd5b50610277610779366004614caa565b61214e565b348015610789575f80fd5b50610422610798366004614e8e565b6121e5565b6107a98383835f61221d565b505050565b5f6107b7612249565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff16908111156107f1576107f1614d63565b600581111561080257610802614d63565b815260200160018201805461081690614ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461084290614ef9565b801561088d5780601f106108645761010080835404028352916020019161088d565b820191905f5260205f20905b81548152906001019060200180831161087057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561090557610905614d63565b14610941575f8381526005830160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156109b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109df9190810190615034565b6040518263ffffffff1660e01b81526004016109fb9190615065565b6020604051808303815f875af1158015610a17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3b9190615077565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a8a575080546001600160401b03808416911610155b15610aa85760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ad28361226d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610a3b8383835f612281565b5f610b33612249565b600781015490915060ff1615610b5c57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc39190615077565b836020013514610bec576040516372b0a7e760e11b815260208401356004820152602401610938565b30610bfd606085016040860161508e565b6001600160a01b031614610c4057610c1b606084016040850161508e565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610938565b5f610c4e60608501856150a9565b905090505f805b828163ffffffff161015610ed4575f610c7160608801886150a9565b8363ffffffff16818110610c8757610c876150ee565b9050602002810190610c999190615102565b610ca29061516d565b80516040519192505f916006880191610cba916151e8565b90815260200160405180910390205414610cea57805160405163a41f772f60e01b81526109389190600401615065565b805151601414610d10578051604051633e08a12560e11b81526109389190600401615065565b5f6002885f013584604051602001610d3f92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610d59916151e8565b602060405180830381855afa158015610d74573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d979190615077565b90508086600601835f0151604051610daf91906151e8565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610def908261523d565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b031990931692909217909155610e5e908561530c565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d78460400151604051610eb991906001600160401b0391909116815260200190565b60405180910390a3505080610ecd9061532c565b9050610c55565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610f17910460ff168361534e565b6001600160401b03161015610f4a57604051633e1a785160e01b81526001600160401b0382166004820152602401610938565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610f6e876125b6565b604001516040518263ffffffff1660e01b8152600401610f8e9190615065565b602060405180830381865af4158015610fa9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fcd9190615077565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b815260040161100791906154a4565b5f60405180830381865af4158015611021573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110489190810190615034565b90505f60028260405161105b91906151e8565b602060405180830381855afa158015611076573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110999190615077565b90508281146110c55760405163baaea89d60e01b81526004810182905260248101849052604401610938565b5050506007909201805460ff1916600117905550505050565b6110e7826126cc565b611107576040516330efa98b60e01b815260048101839052602401610938565b5f61111183611fff565b519050600281600581111561112857611128614d63565b14611148578060405163170cc93360e21b81526004016109389190614f2b565b610a3b83836126f5565b5f8061115c61299b565b6003015461116a9084615538565b905080158061117f57506001600160401b0381115b156111a05760405163222d164360e21b815260048101849052602401610938565b92915050565b6111b284848484612281565b5050505050565b610a3b8383835f6129bf565b5f6111ce612249565b54919050565b610a3b84848484612c06565b5f6111e961299b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561122257611222614d63565b600381111561123357611233614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112a982611fff565b90506001835160038111156112c0576112c0614d63565b146112e1578251604051633b0d540d60e21b81526109389190600401615557565b6004815160058111156112f6576112f6614d63565b0361130c5761130486612c32565b505050505050565b8260a001516001600160401b031681608001516001600160401b031610156113ac575f8061133987611e7c565b915091508184146113675760405163fee3144560e01b81526004810183905260248101859052604401610938565b8460a001516001600160401b0316816001600160401b031610156113a957604051632e19bc2d60e11b81526001600160401b0382166004820152602401610938565b50505b5f868152600785016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252839188917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a3505050505050565b5f61143c61299b565b600301546111a0906001600160401b038416615571565b6107a98383835f612c06565b6111b2848484846129bf565b611473612e03565b5f61147c61299b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156114b5576114b5614d63565b60038111156114c6576114c6614d63565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561153f5761153f614d63565b14611560578051604051633b0d540d60e21b81526109389190600401615557565b5f61156e8260400151611fff565b9050600461157f8360400151611fff565b51600581111561159157611591614d63565b141580156115b857508160c001516001600160401b031681608001516001600160401b0316105b15611646575f806115c886611e7c565b91509150818460400151146116015781846040015160405163fee3144560e01b8152600401610938929190918252602082015260400190565b806001600160401b03168460c001516001600160401b0316111561164357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610938565b50505b61164f85612c32565b50505061166860015f80516020615a4483398151915255565b5050565b5f61167561299b565b90506001600160a01b0382166116a95760405163caa903f960e01b81526001600160a01b0383166004820152602401610938565b5f8381526006820160205260409020546001600160a01b031633146116ef57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610938565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61172661299b565b90505f61173283611fff565b519050600481600581111561174957611749614d63565b14611769578060405163170cc93360e21b81526004016109389190614f2b565b5f8381526006830160205260409020546001600160a01b0316331461178e57336116ca565b5f8381526006830160205260409020546107a9906001600160a01b031684612e4d565b5f6117ba612e03565b5f6117c361299b565b90505f806117d085612e77565b915091506117dd826126cc565b6117eb5750915061186f9050565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b0391821691168061182d5750805b60048351600581111561184257611842614d63565b03611851576118518185612e4d565b611867826118628560400151611433565b61322c565b509193505050505b61188560015f80516020615a4483398151915255565b919050565b610a3b8484848461221d565b5f806118a0612249565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118c7876125b6565b604001516040518263ffffffff1660e01b81526004016118e79190615065565b6040805180830381865af4158015611901573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119259190615588565b915091508061194b57604051632d07135360e01b81528115156004820152602401610938565b5f8281526004840160205260409020805461196590614ef9565b90505f036119895760405163089938b360e11b815260048101839052602401610938565b60015f838152600580860160205260409091205460ff16908111156119b0576119b0614d63565b146119e3575f8281526005840160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b5f82815260048401602052604081206119fb91614a8d565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f611a8e612e03565b611a9a8484843461323f565b9050611ab260015f80516020615a4483398151915255565b9392505050565b5f611ac261299b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611afb57611afb614d63565b6003811115611b0c57611b0c614d63565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611b8557611b85614d63565b14158015611ba65750600381516003811115611ba357611ba3614d63565b14155b15611bc7578051604051633b0d540d60e21b81526109389190600401615557565b5f611bd58260400151611fff565b905080606001516001600160401b03165f03611c07576040516339b894f960e21b815260048101859052602401610938565b604080830151606083015160a0840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c7593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611c8f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cb69190810190615034565b6040518263ffffffff1660e01b8152600401611cd29190615065565b6020604051808303815f875af1158015611cee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b29190615077565b5f611d1b612249565b60030154600160401b90046001600160401b0316919050565b5f611d3d612249565b5f8381526004820160205260409020805491925090611d5b90614ef9565b90505f03611d7f5760405163089938b360e11b815260048101839052602401610938565b60015f838152600580840160205260409091205460ff1690811115611da657611da6614d63565b14611dd9575f8281526005820160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e1092016155ab565b6020604051808303815f875af1158015611e2c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a99190615077565b5f611e59612e03565b611e6482333461346e565b905061188560015f80516020615a4483398151915255565b5f805f611e88846125b6565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b8152600401611ec89190615065565b606060405180830381865af4158015611ee3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f079190615635565b9250925092505f611f16612249565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b909204161015611f6a57604051632e19bc2d60e11b81526001600160401b0384166004820152602401610938565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff990611fea90869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b612007614ac4565b5f612010612249565b5f84815260058083016020526040918290208251610100810190935280549394509192839160ff9091169081111561204a5761204a614d63565b600581111561205b5761205b614d63565b815260200160018201805461206f90614ef9565b80601f016020809104026020016040519081016040528092919081815260200182805461209b90614ef9565b80156120e65780601f106120bd576101008083540402835291602001916120e6565b820191905f5260205f20905b8154815290600101906020018083116120c957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b6001600160a01b0381166121805760405163caa903f960e01b81526001600160a01b0382166004820152602401610938565b5f61218961299b565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146121b757336116ca565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f806121ef612249565b905080600601848460405161220592919061566a565b90815260200160405180910390205491505092915050565b61222984848484612281565b610a3b57604051631036cf9160e11b815260048101859052602401610938565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b6122756136ae565b61227e816136f9565b50565b5f8061228b61299b565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156122c4576122c4614d63565b60038111156122d5576122d5614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61234b82611fff565b905060028351600381111561236257612362614d63565b14612383578251604051633b0d540d60e21b81526109389190600401615557565b60208301516001600160a01b0316331461241f575f8281526006850160205260409020546001600160a01b031633146123bc57336116ca565b5f82815260068501602052604090205460c08201516123eb91600160b01b90046001600160401b03169061530c565b6001600160401b031642101561241f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b60028151600581111561243457612434614d63565b036125565760028401546080840151612456916001600160401b03169061530c565b6001600160401b031642101561248a5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b871561249c5761249a82886126f5565b505b5f8981526007850160205260409020805460ff19166003179055606083015160a08201516124d59184916124d09190615679565b613773565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561251884888c61393d565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506125ae9350505050565b60048151600581111561256b5761256b614d63565b036125925761257b83878b61393d565b5061258589612c32565b60019450505050506125ae565b805160405163170cc93360e21b81526109389190600401614f2b565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561261a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126419190810190615699565b915091508061266357604051636b2f19e960e01b815260040160405180910390fd5b815115612689578151604051636ba589a560e01b81526004810191909152602401610938565b60208201516001600160a01b0316156126c5576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b5092915050565b5f806126d661299b565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612740573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127679190810190615699565b915091508061278957604051636b2f19e960e01b815260040160405180910390fd5b5f61279261299b565b60058101548451919250146127c0578251604051636ba589a560e01b81526004810191909152602401610938565b60208301516001600160a01b0316156127fc576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b60208301516001600160a01b031615612838576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610938565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016128759190615065565b6040805180830381865af415801561288f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b39190615729565b915091508188146128e15760405163fee3144560e01b81526004810183905260248101899052604401610938565b5f8881526006840160205260409020600101546001600160401b039081169082161115612972575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612990565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806129c961299b565b90506129d486613b2b565b5f6129de87611fff565b90506129e9876126cc565b6129f8576001925050506125ae565b5f8781526006830160205260409020546001600160a01b03163314612a1d57336116ca565b5f87815260068301602052604090205460c0820151612a4c91600160b01b90046001600160401b03169061530c565b6001600160401b03168160e001516001600160401b03161015612a935760e081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610938565b5f8615612aab57612aa488876126f5565b9050612ac9565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612aee90611433565b60c086015160e0808801516040519185901b6001600160e01b031916825260048201939093526001600160401b0391821660248201819052604482015291811660648301528516608482015260a401602060405180830381865afa158015612b58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b7c9190615077565b90506001600160a01b038616612ba8575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612bc790849061574c565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b612c12848484846129bf565b610a3b57604051635bff683f60e11b815260048101859052602401610938565b5f612c3b61299b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c7457612c74614d63565b6003811115612c8557612c85614d63565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cf9613e16565b8260800151612d08919061530c565b6001600160401b0316421015612d3c5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610938565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680612d97575060208201515b5f80612da4838886613e31565b91509150612dbd85602001516118628760600151611433565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80516020615a44833981519152805460011901612e3457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60015f80516020615a4483398151915255565b5f612e5661299b565b5f838152600a8201602052604081208054919055909150610a3b8482613ede565b5f612e80614ac4565b5f612e89612249565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612eb0886125b6565b604001516040518263ffffffff1660e01b8152600401612ed09190615065565b6040805180830381865af4158015612eea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0e9190615588565b915091508015612f3557604051632d07135360e01b81528115156004820152602401610938565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff90911690811115612f6d57612f6d614d63565b6005811115612f7e57612f7e614d63565b8152602001600182018054612f9290614ef9565b80601f0160208091040260200160405190810160405280929190818152602001828054612fbe90614ef9565b80156130095780601f10612fe057610100808354040283529160200191613009565b820191905f5260205f20905b815481529060010190602001808311612fec57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c0909101529091508151600581111561308157613081614d63565b141580156130a2575060018151600581111561309f5761309f614d63565b14155b156130c357805160405163170cc93360e21b81526109389190600401614f2b565b6003815160058111156130d8576130d8614d63565b036130e657600481526130eb565b600581525b83600601816020015160405161310191906151e8565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561314457613144614d63565b02179055506020820151600182019061315d908261523d565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b6116686001600160a01b03831682613f3c565b5f8061324961299b565b600281015490915061ffff600160401b90910481169086161080613272575061271061ffff8616115b1561329657604051635f12e6c360e11b815261ffff86166004820152602401610938565b60028101546001600160401b0390811690851610156132d2576040516202a06d60e11b81526001600160401b0385166004820152602401610938565b80548310806132e45750806001015483115b156133055760405163222d164360e21b815260048101849052602401610938565b825f61331082611152565b90505f6133d76133208a8061575f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133619250505060208c018c61575f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133a59250505060608d0160408e01614c8f565b6133b260608e018e6157a1565b6133bb906157b5565b6133c860808f018f6157a1565b6133d1906157b5565b87613fcf565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061347861299b565b90505f61348484611152565b90505f61349087611fff565b905061349b876126cc565b6134bb576040516330efa98b60e01b815260048101889052602401610938565b6002815160058111156134d0576134d0614d63565b146134f157805160405163170cc93360e21b81526109389190600401614f2b565b5f828260a00151613502919061530c565b905083600201600a9054906101000a90046001600160401b0316826040015161352b919061534e565b6001600160401b0316816001600160401b0316111561356857604051636d51fe0560e11b81526001600160401b0382166004820152602401610938565b5f806135748a84613773565b915091505f8a836040516020016135a292919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166136f757604051631afcd79f60e31b815260040160405180910390fd5b565b6137016136ae565b61370a816143b9565b6137126143d2565b61227e6060820135608083013561372f60c0850160a08601614c8f565b61373f60e0860160c0870161587c565b613750610100870160e08801615895565b61010087013561376861014089016101208a0161508e565b8861014001356143e2565b5f805f61377e612249565b5f868152600582016020526040902060020154909150600160c01b90046001600160401b03166137ae85826145a4565b5f6137b887614811565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561385c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526138839190810190615034565b6040518263ffffffff1660e01b815260040161389f9190615065565b6020604051808303815f875af11580156138bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138df9190615077565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b5f8061394761299b565b90505f6139578660400151611fff565b90505f60038251600581111561396f5761396f614d63565b148061398d575060048251600581111561398b5761398b614d63565b145b1561399d575060e08101516139da565b6002825160058111156139b2576139b2614d63565b036139be5750426139da565b815160405163170cc93360e21b81526109389190600401614f2b565b86608001516001600160401b0316816001600160401b031611613a02575f9350505050611ab2565b600483015460608801515f916001600160a01b031690634f22429f90613a2790611433565b60c086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa158015613aa8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613acc9190615077565b90506001600160a01b038716613ae457876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b5f613b34612249565b5f838152600580830160205260408083208151610100810190925280549495509293909291839160ff1690811115613b6e57613b6e614d63565b6005811115613b7f57613b7f614d63565b8152602001600182018054613b9390614ef9565b80601f0160208091040260200160405190810160405280929190818152602001828054613bbf90614ef9565b8015613c0a5780601f10613be157610100808354040283529160200191613c0a565b820191905f5260205f20905b815481529060010190602001808311613bed57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115613c8257613c82614d63565b14613cb5575f8381526005830160205260409081902054905163170cc93360e21b81526109389160ff1690600401614f2b565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115613cfa57613cfa614d63565b021790555060208201516001820190613d13908261523d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f613db38482613773565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051613e08939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b5f613e1f612249565b600101546001600160401b0316919050565b5f805f613e3c61299b565b5f86815260088201602052604081208054908290559192509081908015613ed0575f87815260068501602052604090205461271090613e8690600160a01b900461ffff1683615571565b613e909190615538565b91508184600a015f8981526020019081526020015f205f828254613eb4919061574c565b90915550613ec4905082826158b5565b9250613ed08984613ede565b509097909650945050505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613f2a575f80fd5b505af1158015611304573d5f803e3d5ffd5b80471015613f5f5760405163cd78605960e01b8152306004820152602401610938565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613fa8576040519150601f19603f3d011682016040523d82523d5f602084013e613fad565b606091505b50509050806107a957604051630a12f52160e11b815260040160405180910390fd5b5f613fd8612249565b6007015460ff16613ffc57604051637fab81e560e01b815260040160405180910390fd5b5f614005612249565b905042866001600160401b031611158061403457506140276202a3004261574c565b866001600160401b031610155b1561405d57604051635879da1360e11b81526001600160401b0387166004820152602401610938565b60038101546001600160401b039061408090600160401b9004821685831661574c565b11156140aa57604051633e1a785160e01b81526001600160401b0384166004820152602401610938565b6140b38561487a565b6140bc8461487a565b86516030146140e35786516040516326475b2f60e11b815260040161093891815260200190565b87516014146141075787604051633e08a12560e11b81526004016109389190615065565b5f801b816006018960405161411c91906151e8565b9081526020016040518091039020541461414b578760405163a41f772f60e01b81526004016109389190615065565b614155835f6145a4565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016141d5919061592e565b5f60405180830381865af41580156141ef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261421691908101906159e5565b5f82815260048601602052604090209193509150614234828261523d565b5081836006018b60405161424891906151e8565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614284908590600401615065565b6020604051808303815f875af11580156142a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142c49190615077565b5f8481526005860160205260409020805460ff191660019081178255919250016142ee8c8261523d565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690556143458b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a6040516143a2939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b6143c16136ae565b6143c9614999565b61227e816149a1565b6143da6136ae565b6136f7614a85565b6143ea6136ae565b5f6143f361299b565b905061ffff8616158061440b575061271061ffff8716115b1561442f57604051635f12e6c360e11b815261ffff87166004820152602401610938565b878911156144535760405163222d164360e21b8152600481018a9052602401610938565b60ff851615806144665750600a60ff8616115b156144895760405163170db35960e31b815260ff86166004820152602401610938565b614491613e16565b6001600160401b0316876001600160401b031610156144cd576040516202a06d60e11b81526001600160401b0388166004820152602401610938565b835f036144ed5760405163a733007160e01b815260040160405180910390fd5b8161450e57604051632f6bd1db60e01b815260048101839052602401610938565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f6145ad612249565b90505f826001600160401b0316846001600160401b031611156145db576145d48385615679565b90506145e8565b6145e58484615679565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580614655575060018401548151614651916001600160401b03169061574c565b8210155b1561467d576001600160401b038084166060830152828252604082015116602082015261469c565b828160600181815161468f919061530c565b6001600160401b03169052505b60608101516146ac90606461534e565b602082015160018601546001600160401b0392909216916146d79190600160401b900460ff1661534e565b6001600160401b0316101561471057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610938565b8581604001818151614722919061530c565b6001600160401b0316905250604081018051869190614742908390615679565b6001600160401b03169052506001840154604082015160649161477091600160401b90910460ff169061534e565b6001600160401b031610156147a9576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610938565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8061481b612249565b5f848152600582016020526040902060020180549192509060089061484f90600160401b90046001600160401b0316615a28565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b805163ffffffff16158015614893575060208101515115155b156148c757805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610938565b602081015151815163ffffffff16111561490a57805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610938565b60015b81602001515181101561166857602082015161492a6001836158b5565b8151811061493a5761493a6150ee565b60200260200101516001600160a01b031682602001518281518110614961576149616150ee565b60200260200101516001600160a01b0316101561499157604051630dbc8d5f60e31b815260040160405180910390fd5b60010161490d565b6136f76136ae565b6149a96136ae565b5f6149b2612249565b82358155905060146149ca6060840160408501615895565b60ff1611806149e957506149e46060830160408401615895565b60ff16155b15614a1d576149fe6060830160408401615895565b604051634a59bbff60e11b815260ff9091166004820152602401610938565b614a2d6060830160408401615895565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a5e6040830160208401614c8f565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612e3a6136ae565b508054614a9990614ef9565b5f825580601f10614aa8575050565b601f0160209004905f5260205f209081019061227e9190614b09565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b80821115614b1d575f8155600101614b0a565b5090565b801515811461227e575f80fd5b803563ffffffff81168114611885575f80fd5b5f805f60608486031215614b53575f80fd5b833592506020840135614b6581614b21565b9150614b7360408501614b2e565b90509250925092565b5f60208284031215614b8c575f80fd5b5035919050565b5f6101608284031215614ba4575f80fd5b50919050565b5f8060408385031215614bbb575f80fd5b82356001600160401b03811115614bd0575f80fd5b830160808186031215614be1575f80fd5b9150614bef60208401614b2e565b90509250929050565b5f8060408385031215614c09575f80fd5b82359150614bef60208401614b2e565b6001600160a01b038116811461227e575f80fd5b5f805f8060808587031215614c40575f80fd5b843593506020850135614c5281614b21565b9250614c6060408601614b2e565b91506060850135614c7081614c19565b939692955090935050565b6001600160401b038116811461227e575f80fd5b5f60208284031215614c9f575f80fd5b8135611ab281614c7b565b5f8060408385031215614cbb575f80fd5b823591506020830135614ccd81614c19565b809150509250929050565b5f60208284031215614ce8575f80fd5b611ab282614b2e565b803561ffff81168114611885575f80fd5b5f805f60608486031215614d14575f80fd5b83356001600160401b03811115614d29575f80fd5b840160a08187031215614d3a575f80fd5b9250614d4860208501614cf1565b91506040840135614d5881614c7b565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d8757614d87614d63565b9052565b5f5b83811015614da5578181015183820152602001614d8d565b50505f910152565b5f8151808452614dc4816020860160208601614d8b565b601f01601f19169290920160200192915050565b60208152614dea602082018351614d77565b5f6020830151610100806040850152614e07610120850183614dad565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151614e4660a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f8060208385031215614e9f575f80fd5b82356001600160401b0380821115614eb5575f80fd5b818501915085601f830112614ec8575f80fd5b813581811115614ed6575f80fd5b866020828501011115614ee7575f80fd5b60209290920196919550909350505050565b600181811c90821680614f0d57607f821691505b602082108103614ba457634e487b7160e01b5f52602260045260245ffd5b602081016111a08284614d77565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f6f57614f6f614f39565b60405290565b604080519081016001600160401b0381118282101715614f6f57614f6f614f39565b604051601f8201601f191681016001600160401b0381118282101715614fbf57614fbf614f39565b604052919050565b5f6001600160401b03821115614fdf57614fdf614f39565b50601f01601f191660200190565b5f82601f830112614ffc575f80fd5b815161500f61500a82614fc7565b614f97565b818152846020838601011115615023575f80fd5b6125ae826020830160208701614d8b565b5f60208284031215615044575f80fd5b81516001600160401b03811115615059575f80fd5b6125ae84828501614fed565b602081525f611ab26020830184614dad565b5f60208284031215615087575f80fd5b5051919050565b5f6020828403121561509e575f80fd5b8135611ab281614c19565b5f808335601e198436030181126150be575f80fd5b8301803591506001600160401b038211156150d7575f80fd5b6020019150600581901b3603821315613936575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615116575f80fd5b9190910192915050565b5f82601f83011261512f575f80fd5b813561513d61500a82614fc7565b818152846020838601011115615151575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561517d575f80fd5b615185614f4d565b82356001600160401b038082111561519b575f80fd5b6151a736838701615120565b835260208501359150808211156151bc575f80fd5b506151c936828601615120565b60208301525060408301356151dd81614c7b565b604082015292915050565b5f8251615116818460208701614d8b565b601f8211156107a957805f5260205f20601f840160051c8101602085101561521e5750805b601f840160051c820191505b818110156111b2575f815560010161522a565b81516001600160401b0381111561525657615256614f39565b61526a816152648454614ef9565b846151f9565b602080601f83116001811461529d575f84156152865750858301515b5f19600386901b1c1916600185901b178555611304565b5f85815260208120601f198616915b828110156152cb578886015182559484019460019091019084016152ac565b50858210156152e857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156126c5576126c56152f8565b5f63ffffffff808316818103615344576153446152f8565b6001019392505050565b6001600160401b03818116838216028082169190828114615371576153716152f8565b505092915050565b5f808335601e1984360301811261538e575f80fd5b83016020810192503590506001600160401b038111156153ac575f80fd5b803603821315613936575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561549757848303601f19018952813536889003605e1901811261541e575f80fd5b8701606061542c8280615379565b82875261543c83880182846153ba565b9250505061544c86830183615379565b8683038888015261545e8382846153ba565b92505050604080830135925061547383614c7b565b6001600160401b0392909216949091019390935297830197908301906001016153f9565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356154c881614c19565b6001600160a01b031660608381019190915283013536849003601e190181126154ef575f80fd5b83016020810190356001600160401b0381111561550a575f80fd5b8060051b360382131561551b575f80fd5b60808085015261552f60a0850182846153e2565b95945050505050565b5f8261555257634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061556b5761556b614d63565b91905290565b80820281158282048414176111a0576111a06152f8565b5f8060408385031215615599575f80fd5b825191506020830151614ccd81614b21565b5f60208083525f84546155bd81614ef9565b806020870152604060018084165f81146155de57600181146155fa57615627565b60ff19851660408a0152604084151560051b8a01019550615627565b895f5260205f205f5b8581101561561e5781548b8201860152908301908801615603565b8a016040019650505b509398975050505050505050565b5f805f60608486031215615647575f80fd5b83519250602084015161565981614c7b565b6040850151909250614d5881614c7b565b818382375f9101908152919050565b6001600160401b038281168282160390808211156126c5576126c56152f8565b5f80604083850312156156aa575f80fd5b82516001600160401b03808211156156c0575f80fd5b90840190606082870312156156d3575f80fd5b6156db614f4d565b8251815260208301516156ed81614c19565b6020820152604083015182811115615703575f80fd5b61570f88828601614fed565b6040830152508094505050506020830151614ccd81614b21565b5f806040838503121561573a575f80fd5b825191506020830151614ccd81614c7b565b808201808211156111a0576111a06152f8565b5f808335601e19843603018112615774575f80fd5b8301803591506001600160401b0382111561578d575f80fd5b602001915036819003821315613936575f80fd5b5f8235603e19833603018112615116575f80fd5b5f604082360312156157c5575f80fd5b6157cd614f75565b6157d683614b2e565b81526020808401356001600160401b03808211156157f2575f80fd5b9085019036601f830112615804575f80fd5b81358181111561581657615816614f39565b8060051b9150615827848301614f97565b8181529183018401918481019036841115615840575f80fd5b938501935b8385101561586a578435925061585a83614c19565b8282529385019390850190615845565b94860194909452509295945050505050565b5f6020828403121561588c575f80fd5b611ab282614cf1565b5f602082840312156158a5575f80fd5b813560ff81168114611ab2575f80fd5b818103818111156111a0576111a06152f8565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156159235784516001600160a01b031682529383019360019290920191908301906158fa565b509695505050505050565b60208152815160208201525f602083015160e06040840152615954610100840182614dad565b90506040840151601f19808584030160608601526159728383614dad565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159a283836158c8565b925060a08601519150808584030160c0860152506159c082826158c8565b91505060c08401516159dd60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159f6575f80fd5b8251915060208301516001600160401b03811115615a12575f80fd5b615a1e85828601614fed565b9150509250929050565b5f6001600160401b03808316818103615344576153446152f856fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122032091ffc723a6dfec6806a0059316735961b7ecad27a6da2c86224c3a069939664736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -3320,7 +3320,7 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseUptime // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220f730711c5b5760a4acff40008a9e3ea299c9a38a322da3ee6c00fb3fc9503a9d64736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220e6b22cfbb2dc3686c9e5d5c46b42e65620ca6777a1371e31c12b720ad3c60ea464736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index 782eb29a2..158752fb4 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -92,7 +92,7 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedValidationID\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedValidationID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"CompletedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"CompletedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"registrationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"validatorWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"weightUpdateMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitiatedValidatorWeightUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes20\",\"name\":\"nodeID\",\"type\":\"bytes20\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"RegisteredInitialValidator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_ID_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRemoval\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorWeightUpdate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sentNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receivedNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TotalWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subnetID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161390a38038061390a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bd8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610153575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f1414610300578063d588c18f14610330578063d5f20ff614610343578063df93d8de14610363578063f2fde38b1461036d578063fd7ac5e714610380575f80fd5b8063a3a65e4814610265578063b771b3bc14610278578063bb0b193814610286578063bc5fbfec146102d1578063bee0a03f146102e5578063c974d1b6146102f8575f80fd5b8063732214f811610110578063732214f8146101c75780638280a25a146101ce5780638da5cb5b146101e85780639681d9401461022c57806397fb70d41461023f5780639ba96b8614610252575f80fd5b80630322ed981461015757806320d91b7a1461016c5780635dc1f5351461017f57806360305d62146101a257806363e2ca97146101a2578063715018a6146101bf575b5f80fd5b61016a61016536600461295e565b610393565b005b61016a61017a36600461298d565b610631565b5f80516020613748833981519152545b6040519081526020015b60405180910390f35b6101aa601481565b60405163ffffffff9091168152602001610199565b61016a610c0a565b61018f5f81565b6101d6603081565b60405160ff9091168152602001610199565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b039091168152602001610199565b61018f61023a3660046129db565b610c1d565b61016a61024d36600461295e565b610c30565b61018f610260366004612a08565b610c44565b61018f6102733660046129db565b610d1a565b6102146005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b039091168152602001610199565b61018f5f8051602061374883398151915281565b61016a6102f336600461295e565b610f0c565b6101d6601481565b61031361030e3660046129db565b61104d565b604080519283526001600160401b03909116602083015201610199565b61016a61033e366004612a6e565b6111dc565b61035661035136600461295e565b6112ea565b6040516101999190612b20565b6102b96202a30081565b61016a61037b366004612bd6565b611444565b61018f61038e366004612bf8565b61147e565b5f8181525f8051602061376883398151915260205260408082208151610100810190925280545f8051602061374883398151915293929190829060ff1660058111156103e1576103e1612a9f565b60058111156103f2576103f2612a9f565b815260200160018201805461040690612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461043290612c63565b801561047d5780601f106104545761010080835404028352916020019161047d565b820191905f5260205f20905b81548152906001019060200180831161046057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104f5576104f5612a9f565b14610531575f8381526005830160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156105a8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105cf9190810190612dac565b6040518263ffffffff1660e01b81526004016105eb9190612ddd565b6020604051808303815f875af1158015610607573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062b9190612def565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137488339815191529060ff161561068357604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ea9190612def565b836020013514610713576040516372b0a7e760e11b815260208401356004820152602401610528565b306107246060850160408601612bd6565b6001600160a01b031614610767576107426060840160408501612bd6565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610528565b5f6107756060850185612e06565b905090505f805b828163ffffffff1610156109fb575f6107986060880188612e06565b8363ffffffff168181106107ae576107ae612e4b565b90506020028101906107c09190612e5f565b6107c990612eca565b80516040519192505f9160068801916107e191612f45565b9081526020016040518091039020541461081157805160405163a41f772f60e01b81526105289190600401612ddd565b805151601414610837578051604051633e08a12560e11b81526105289190600401612ddd565b5f6002885f01358460405160200161086692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261088091612f45565b602060405180830381855afa15801561089b573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108be9190612def565b90508086600601835f01516040516108d69190612f45565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906109169082612fa1565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109859085613074565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d784604001516040516109e091906001600160401b0391909116815260200190565b60405180910390a35050806109f490613094565b905061077c565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610a43910460ff16836130b6565b6001600160401b03161015610a7657604051633e1a785160e01b81526001600160401b0382166004820152602401610528565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a9a876114d9565b604001516040518263ffffffff1660e01b8152600401610aba9190612ddd565b602060405180830381865af4158015610ad5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af99190612def565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610b33919061320c565b5f60405180830381865af4158015610b4d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b749190810190612dac565b90505f600282604051610b879190612f45565b602060405180830381855afa158015610ba2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610bc59190612def565b9050828114610bf15760405163baaea89d60e01b81526004810182905260248101849052604401610528565b5050506007909201805460ff1916600117905550505050565b610c126115ef565b610c1b5f61164a565b565b5f80610c28836116ba565b509392505050565b610c386115ef565b610c4181611a72565b50565b5f610c4d6115ef565b610d11610c5a84806132a0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9b9250505060208601866132a0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610cdf9250505060608701604088016132e2565b610cec60608801886132fd565b610cf590613311565b610d0260808901896132fd565b610d0b90613311565b87611d68565b90505b92915050565b5f5f80516020613748833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610d4e876114d9565b604001516040518263ffffffff1660e01b8152600401610d6e9190612ddd565b6040805180830381865af4158015610d88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dac91906133e7565b9150915080610dd257604051632d07135360e01b81528115156004820152602401610528565b5f82815260048401602052604090208054610dec90612c63565b90505f03610e105760405163089938b360e11b815260048101839052602401610528565b60015f838152600580860160205260409091205460ff1690811115610e3757610e37612a9f565b14610e6a575f8281526005840160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b5f8281526004840160205260408120610e82916128ca565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137488339815191529190610f5390612c63565b90505f03610f775760405163089938b360e11b815260048101839052602401610528565b60015f838152600580840160205260409091205460ff1690811115610f9e57610f9e612a9f565b14610fd1575f8281526005820160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb926110089201613408565b6020604051808303815f875af1158015611024573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110489190612def565b505050565b5f805f611059846114d9565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110999190612ddd565b606060405180830381865af41580156110b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d89190613492565b9250925092505f6110f35f8051602061374883398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561114757604051632e19bc2d60e11b81526001600160401b0384166004820152602401610528565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9906111c790869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112205750825b90505f826001600160401b0316600114801561123b5750303b155b905081158015611249575080155b156112675760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561129157845460ff60401b1916600160401b1785555b61129b878761216c565b83156112e157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112f2612901565b5f8281525f805160206137688339815191526020526040908190208151610100810190925280545f80516020613748833981519152929190829060ff16600581111561134057611340612a9f565b600581111561135157611351612a9f565b815260200160018201805461136590612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461139190612c63565b80156113dc5780601f106113b3576101008083540402835291602001916113dc565b820191905f5260205f20905b8154815290600101906020018083116113bf57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b61144c6115ef565b6001600160a01b03811661147557604051631e4fbdf760e01b81525f6004820152602401610528565b610c418161164a565b6040515f905f80516020613748833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906114c190869086906134d2565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561153d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261156491908101906134e1565b915091508061158657604051636b2f19e960e01b815260040160405180910390fd5b8151156115ac578151604051636ba589a560e01b81526004810191909152602401610528565b60208201516001600160a01b0316156115e8576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610528565b5092915050565b336116217f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c1b5760405163118cdaa760e01b8152336004820152602401610528565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f6116c3612901565b5f805160206137488339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116f6886114d9565b604001516040518263ffffffff1660e01b81526004016117169190612ddd565b6040805180830381865af4158015611730573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175491906133e7565b91509150801561177b57604051632d07135360e01b81528115156004820152602401610528565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff909116908111156117b3576117b3612a9f565b60058111156117c4576117c4612a9f565b81526020016001820180546117d890612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461180490612c63565b801561184f5780601f106118265761010080835404028352916020019161184f565b820191905f5260205f20905b81548152906001019060200180831161183257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156118c7576118c7612a9f565b141580156118e857506001815160058111156118e5576118e5612a9f565b14155b1561190957805160405163170cc93360e21b81526105289190600401612c9b565b60038151600581111561191e5761191e612a9f565b0361192c5760048152611931565b600581525b8360060181602001516040516119479190612f45565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561198a5761198a612a9f565b0217905550602082015160018201906119a39082612fa1565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376883398151915260205260408082208151610100810190925280545f8051602061374883398151915293929190829060ff166005811115611ac057611ac0612a9f565b6005811115611ad157611ad1612a9f565b8152602001600182018054611ae590612c63565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1190612c63565b8015611b5c5780601f10611b3357610100808354040283529160200191611b5c565b820191905f5260205f20905b815481529060010190602001808311611b3f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611bd457611bd4612a9f565b14611c07575f8381526005830160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c4c57611c4c612a9f565b021790555060208201516001820190611c659082612fa1565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611d05848261218a565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d5a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611dac57604051637fab81e560e01b815260040160405180910390fd5b5f80516020613748833981519152426001600160401b038716111580611de75750611dda6202a3004261356e565b866001600160401b031610155b15611e1057604051635879da1360e11b81526001600160401b0387166004820152602401610528565b60038101546001600160401b0390611e3390600160401b9004821685831661356e565b1115611e5d57604051633e1a785160e01b81526001600160401b0384166004820152602401610528565b611e6685612361565b611e6f84612361565b8651603014611e965786516040516326475b2f60e11b815260040161052891815260200190565b8751601414611eba5787604051633e08a12560e11b81526004016105289190612ddd565b5f801b8160060189604051611ecf9190612f45565b90815260200160405180910390205414611efe578760405163a41f772f60e01b81526004016105289190612ddd565b611f08835f612480565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f8891906135e7565b5f60405180830381865af4158015611fa2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611fc99190810190613696565b5f82815260048601602052604090209193509150611fe78282612fa1565b5081836006018b604051611ffb9190612f45565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612037908590600401612ddd565b6020604051808303815f875af1158015612053573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120779190612def565b5f8481526005860160205260409020805460ff191660019081178255919250016120a18c82612fa1565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690556120f88b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a604051612155939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b6121746126ea565b61217d82612733565b6121868161274c565b5050565b5f8281525f80516020613768833981519152602052604081206002015481905f8051602061374883398151915290600160c01b90046001600160401b03166121d28582612480565b5f6121dc8761275d565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612280573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122a79190810190612dac565b6040518263ffffffff1660e01b81526004016122c39190612ddd565b6020604051808303815f875af11580156122df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123039190612def565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff1615801561237a575060208101515115155b156123ae57805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610528565b602081015151815163ffffffff1611156123f157805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610528565b60015b8160200151518110156121865760208201516124116001836136d9565b8151811061242157612421612e4b565b60200260200101516001600160a01b03168260200151828151811061244857612448612e4b565b60200260200101516001600160a01b0316101561247857604051630dbc8d5f60e31b815260040160405180910390fd5b6001016123f4565b5f805160206137488339815191525f6001600160401b0380841690851611156124b4576124ad83856136ec565b90506124c1565b6124be84846136ec565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061252e57506001840154815161252a916001600160401b03169061356e565b8210155b15612556576001600160401b0380841660608301528282526040820151166020820152612575565b82816060018181516125689190613074565b6001600160401b03169052505b60608101516125859060646130b6565b602082015160018601546001600160401b0392909216916125b09190600160401b900460ff166130b6565b6001600160401b031610156125e957606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610528565b85816040018181516125fb9190613074565b6001600160401b031690525060408101805186919061261b9083906136ec565b6001600160401b03169052506001840154604082015160649161264991600160401b90910460ff16906130b6565b6001600160401b03161015612682576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610528565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c1b57604051631afcd79f60e31b815260040160405180910390fd5b61273b6126ea565b6127436127d2565b610c41816127da565b6127546126ea565b610c41816128c2565b5f8181525f805160206137688339815191526020526040812060020180545f8051602061374883398151915291906008906127a790600160401b90046001600160401b031661370c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610c1b6126ea565b6127e26126ea565b80355f8051602061374883398151915290815560146128076060840160408501613727565b60ff16118061282657506128216060830160408401613727565b60ff16155b1561285a5761283b6060830160408401613727565b604051634a59bbff60e11b815260ff9091166004820152602401610528565b61286a6060830160408401613727565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561289b60408301602084016132e2565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b61144c6126ea565b5080546128d690612c63565b5f825580601f106128e5575050565b601f0160209004905f5260205f2090810190610c419190612946565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561295a575f8155600101612947565b5090565b5f6020828403121561296e575f80fd5b5035919050565b803563ffffffff81168114612988575f80fd5b919050565b5f806040838503121561299e575f80fd5b82356001600160401b038111156129b3575f80fd5b8301608081860312156129c4575f80fd5b91506129d260208401612975565b90509250929050565b5f602082840312156129eb575f80fd5b610d1182612975565b6001600160401b0381168114610c41575f80fd5b5f8060408385031215612a19575f80fd5b82356001600160401b03811115612a2e575f80fd5b830160a08186031215612a3f575f80fd5b91506020830135612a4f816129f4565b809150509250929050565b6001600160a01b0381168114610c41575f80fd5b5f808284036080811215612a80575f80fd5b6060811215612a8d575f80fd5b508291506060830135612a4f81612a5a565b634e487b7160e01b5f52602160045260245ffd5b60068110612acf57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612aed578181015183820152602001612ad5565b50505f910152565b5f8151808452612b0c816020860160208601612ad3565b601f01601f19169290920160200192915050565b60208152612b32602082018351612ab3565b5f6020830151610100806040850152612b4f610120850183612af5565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b8e60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612be6575f80fd5b8135612bf181612a5a565b9392505050565b5f8060208385031215612c09575f80fd5b82356001600160401b0380821115612c1f575f80fd5b818501915085601f830112612c32575f80fd5b813581811115612c40575f80fd5b866020828501011115612c51575f80fd5b60209290920196919550909350505050565b600181811c90821680612c7757607f821691505b602082108103612c9557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610d148284612ab3565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612cdf57612cdf612ca9565b60405290565b604080519081016001600160401b0381118282101715612cdf57612cdf612ca9565b604051601f8201601f191681016001600160401b0381118282101715612d2f57612d2f612ca9565b604052919050565b5f6001600160401b03821115612d4f57612d4f612ca9565b50601f01601f191660200190565b5f82601f830112612d6c575f80fd5b8151612d7f612d7a82612d37565b612d07565b818152846020838601011115612d93575f80fd5b612da4826020830160208701612ad3565b949350505050565b5f60208284031215612dbc575f80fd5b81516001600160401b03811115612dd1575f80fd5b612da484828501612d5d565b602081525f610d116020830184612af5565b5f60208284031215612dff575f80fd5b5051919050565b5f808335601e19843603018112612e1b575f80fd5b8301803591506001600160401b03821115612e34575f80fd5b6020019150600581901b360382131561235a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612e73575f80fd5b9190910192915050565b5f82601f830112612e8c575f80fd5b8135612e9a612d7a82612d37565b818152846020838601011115612eae575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612eda575f80fd5b612ee2612cbd565b82356001600160401b0380821115612ef8575f80fd5b612f0436838701612e7d565b83526020850135915080821115612f19575f80fd5b50612f2636828601612e7d565b6020830152506040830135612f3a816129f4565b604082015292915050565b5f8251612e73818460208701612ad3565b601f82111561104857805f5260205f20601f840160051c81016020851015612f7b5750805b601f840160051c820191505b81811015612f9a575f8155600101612f87565b5050505050565b81516001600160401b03811115612fba57612fba612ca9565b612fce81612fc88454612c63565b84612f56565b602080601f831160018114613001575f8415612fea5750858301515b5f19600386901b1c1916600185901b178555613058565b5f85815260208120601f198616915b8281101561302f57888601518255948401946001909101908401613010565b508582101561304c57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115e8576115e8613060565b5f63ffffffff8083168181036130ac576130ac613060565b6001019392505050565b6001600160401b038181168382160280821691908281146130d9576130d9613060565b505092915050565b5f808335601e198436030181126130f6575f80fd5b83016020810192503590506001600160401b03811115613114575f80fd5b80360382131561235a575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131ff57848303601f19018952813536889003605e19018112613186575f80fd5b8701606061319482806130e1565b8287526131a48388018284613122565b925050506131b4868301836130e1565b868303888801526131c6838284613122565b9250505060408083013592506131db836129f4565b6001600160401b039290921694909101939093529783019790830190600101613161565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561323081612a5a565b6001600160a01b031660608381019190915283013536849003601e19018112613257575f80fd5b83016020810190356001600160401b03811115613272575f80fd5b8060051b3603821315613283575f80fd5b60808085015261329760a08501828461314a565b95945050505050565b5f808335601e198436030181126132b5575f80fd5b8301803591506001600160401b038211156132ce575f80fd5b60200191503681900382131561235a575f80fd5b5f602082840312156132f2575f80fd5b8135612bf1816129f4565b5f8235603e19833603018112612e73575f80fd5b5f60408236031215613321575f80fd5b613329612ce5565b61333283612975565b81526020808401356001600160401b038082111561334e575f80fd5b9085019036601f830112613360575f80fd5b81358181111561337257613372612ca9565b8060051b9150613383848301612d07565b818152918301840191848101903684111561339c575f80fd5b938501935b838510156133c657843592506133b683612a5a565b82825293850193908501906133a1565b94860194909452509295945050505050565b80518015158114612988575f80fd5b5f80604083850312156133f8575f80fd5b825191506129d2602084016133d8565b5f60208083525f845461341a81612c63565b806020870152604060018084165f811461343b576001811461345757613484565b60ff19851660408a0152604084151560051b8a01019550613484565b895f5260205f205f5b8581101561347b5781548b8201860152908301908801613460565b8a016040019650505b509398975050505050505050565b5f805f606084860312156134a4575f80fd5b8351925060208401516134b6816129f4565b60408501519092506134c7816129f4565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134f2575f80fd5b82516001600160401b0380821115613508575f80fd5b908401906060828703121561351b575f80fd5b613523612cbd565b82518152602083015161353581612a5a565b602082015260408301518281111561354b575f80fd5b61355788828601612d5d565b60408301525093506129d2915050602084016133d8565b80820180821115610d1457610d14613060565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135dc5784516001600160a01b031682529383019360019290920191908301906135b3565b509695505050505050565b60208152815160208201525f602083015160e0604084015261360d610100840182612af5565b90506040840151601f198085840301606086015261362b8383612af5565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261365b8383613581565b925060a08601519150808584030160c0860152506136798282613581565b91505060c0840151610c2860e08501826001600160401b03169052565b5f80604083850312156136a7575f80fd5b8251915060208301516001600160401b038111156136c3575f80fd5b6136cf85828601612d5d565b9150509250929050565b81810381811115610d1457610d14613060565b6001600160401b038281168282160390808211156115e8576115e8613060565b5f6001600160401b038083168181036130ac576130ac613060565b5f60208284031215613737575f80fd5b813560ff81168114612bf1575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a2646970667358221220e5798878c1848fd60791996a6cad40b871755c605197f0cbfef4c2a9efd9eac464736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b5060405161390a38038061390a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6137bd8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610153575f3560e01c8063a3a65e48116100bf578063ce161f1411610079578063ce161f1414610300578063d588c18f14610330578063d5f20ff614610343578063df93d8de14610363578063f2fde38b1461036d578063fd7ac5e714610380575f80fd5b8063a3a65e4814610265578063b771b3bc14610278578063bb0b193814610286578063bc5fbfec146102d1578063bee0a03f146102e5578063c974d1b6146102f8575f80fd5b8063732214f811610110578063732214f8146101c75780638280a25a146101ce5780638da5cb5b146101e85780639681d9401461022c57806397fb70d41461023f5780639ba96b8614610252575f80fd5b80630322ed981461015757806320d91b7a1461016c5780635dc1f5351461017f57806360305d62146101a257806363e2ca97146101a2578063715018a6146101bf575b5f80fd5b61016a61016536600461295e565b610393565b005b61016a61017a36600461298d565b610631565b5f80516020613748833981519152545b6040519081526020015b60405180910390f35b6101aa601481565b60405163ffffffff9091168152602001610199565b61016a610c0a565b61018f5f81565b6101d6603081565b60405160ff9091168152602001610199565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b039091168152602001610199565b61018f61023a3660046129db565b610c1d565b61016a61024d36600461295e565b610c30565b61018f610260366004612a08565b610c44565b61018f6102733660046129db565b610d1a565b6102146005600160991b0181565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0354600160401b90046001600160401b03165b6040516001600160401b039091168152602001610199565b61018f5f8051602061374883398151915281565b61016a6102f336600461295e565b610f0c565b6101d6601481565b61031361030e3660046129db565b61104d565b604080519283526001600160401b03909116602083015201610199565b61016a61033e366004612a6e565b6111dc565b61035661035136600461295e565b6112ea565b6040516101999190612b20565b6102b96202a30081565b61016a61037b366004612bd6565b611444565b61018f61038e366004612bf8565b61147e565b5f8181525f8051602061376883398151915260205260408082208151610100810190925280545f8051602061374883398151915293929190829060ff1660058111156103e1576103e1612a9f565b60058111156103f2576103f2612a9f565b815260200160018201805461040690612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461043290612c63565b801561047d5780601f106104545761010080835404028352916020019161047d565b820191905f5260205f20905b81548152906001019060200180831161046057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156104f5576104f5612a9f565b14610531575f8381526005830160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156105a8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105cf9190810190612dac565b6040518263ffffffff1660e01b81526004016105eb9190612ddd565b6020604051808303815f875af1158015610607573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062b9190612def565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206137488339815191529060ff161561068357604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ea9190612def565b836020013514610713576040516372b0a7e760e11b815260208401356004820152602401610528565b306107246060850160408601612bd6565b6001600160a01b031614610767576107426060840160408501612bd6565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610528565b5f6107756060850185612e06565b905090505f805b828163ffffffff1610156109fb575f6107986060880188612e06565b8363ffffffff168181106107ae576107ae612e4b565b90506020028101906107c09190612e5f565b6107c990612eca565b80516040519192505f9160068801916107e191612f45565b9081526020016040518091039020541461081157805160405163a41f772f60e01b81526105289190600401612ddd565b805151601414610837578051604051633e08a12560e11b81526105289190600401612ddd565b5f6002885f01358460405160200161086692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261088091612f45565b602060405180830381855afa15801561089b573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108be9190612def565b90508086600601835f01516040516108d69190612f45565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff1916600217815582516001909101906109169082612fa1565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b0394851667ffffffffffffffff60801b90941693909317600160c01b858516021790556003018054429093166001600160801b0319909316929092179091556109859085613074565b8251602001519094506bffffffffffffffffffffffff1916817f9d9c026e2cadfec89cccc2cd72705360eca1beba24774f3363f4bb33faabc7d784604001516040516109e091906001600160401b0391909116815260200190565b60405180910390a35050806109f490613094565b905061077c565b506003830180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384168102919091179091556001840154606491610a43910460ff16836130b6565b6001600160401b03161015610a7657604051633e1a785160e01b81526001600160401b0382166004820152602401610528565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610a9a876114d9565b604001516040518263ffffffff1660e01b8152600401610aba9190612ddd565b602060405180830381865af4158015610ad5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af99190612def565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610b33919061320c565b5f60405180830381865af4158015610b4d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b749190810190612dac565b90505f600282604051610b879190612f45565b602060405180830381855afa158015610ba2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610bc59190612def565b9050828114610bf15760405163baaea89d60e01b81526004810182905260248101849052604401610528565b5050506007909201805460ff1916600117905550505050565b610c126115ef565b610c1b5f61164a565b565b5f80610c28836116ba565b509392505050565b610c386115ef565b610c4181611a72565b50565b5f610c4d6115ef565b610d11610c5a84806132a0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c9b9250505060208601866132a0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610cdf9250505060608701604088016132e2565b610cec60608801886132fd565b610cf590613311565b610d0260808901896132fd565b610d0b90613311565b87611d68565b90505b92915050565b5f5f80516020613748833981519152818073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f610d4e876114d9565b604001516040518263ffffffff1660e01b8152600401610d6e9190612ddd565b6040805180830381865af4158015610d88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dac91906133e7565b9150915080610dd257604051632d07135360e01b81528115156004820152602401610528565b5f82815260048401602052604090208054610dec90612c63565b90505f03610e105760405163089938b360e11b815260048101839052602401610528565b60015f838152600580860160205260409091205460ff1690811115610e3757610e37612a9f565b14610e6a575f8281526005840160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b5f8281526004840160205260408120610e82916128ca565b5f828152600584016020908152604091829020805460ff1916600290811782556003820180546001600160401b0342811667ffffffffffffffff19909216919091179091559101549251600160c01b90930416825283917f967ae87813a3b5f201dd9bcba778d457176eafe6f41facee1c718091d3952d06910160405180910390a2509392505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206137488339815191529190610f5390612c63565b90505f03610f775760405163089938b360e11b815260048101839052602401610528565b60015f838152600580840160205260409091205460ff1690811115610f9e57610f9e612a9f565b14610fd1575f8281526005820160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb926110089201613408565b6020604051808303815f875af1158015611024573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110489190612def565b505050565b5f805f611059846114d9565b90505f805f73__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f85604001516040518263ffffffff1660e01b81526004016110999190612ddd565b606060405180830381865af41580156110b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d89190613492565b9250925092505f6110f35f8051602061374883398151915290565b5f8581526005820160205260409020600201549091506001600160401b03808516600160401b90920416101561114757604051632e19bc2d60e11b81526001600160401b0384166004820152602401610528565b5f8481526005820160205260409081902060020180546001600160401b038616600160801b0267ffffffffffffffff60801b199091161790555184907fc917996591802ecedcfced71321d4bb5320f7dfbacf5477dffe1dbf8b8839ff9906111c790869086906001600160401b0392831681529116602082015260400190565b60405180910390a25091969095509350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112205750825b90505f826001600160401b0316600114801561123b5750303b155b905081158015611249575080155b156112675760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561129157845460ff60401b1916600160401b1785555b61129b878761216c565b83156112e157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6112f2612901565b5f8281525f805160206137688339815191526020526040908190208151610100810190925280545f80516020613748833981519152929190829060ff16600581111561134057611340612a9f565b600581111561135157611351612a9f565b815260200160018201805461136590612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461139190612c63565b80156113dc5780601f106113b3576101008083540402835291602001916113dc565b820191905f5260205f20905b8154815290600101906020018083116113bf57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039093015480841660a08401520490911660c0909101529392505050565b61144c6115ef565b6001600160a01b03811661147557604051631e4fbdf760e01b81525f6004820152602401610528565b610c418161164a565b6040515f905f80516020613748833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906114c190869086906134d2565b90815260200160405180910390205491505092915050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561153d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261156491908101906134e1565b915091508061158657604051636b2f19e960e01b815260040160405180910390fd5b8151156115ac578151604051636ba589a560e01b81526004810191909152602401610528565b60208201516001600160a01b0316156115e8576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610528565b5092915050565b336116217f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c1b5760405163118cdaa760e01b8152336004820152602401610528565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f6116c3612901565b5f805160206137488339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116f6886114d9565b604001516040518263ffffffff1660e01b81526004016117169190612ddd565b6040805180830381865af4158015611730573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175491906133e7565b91509150801561177b57604051632d07135360e01b81528115156004820152602401610528565b5f8281526005808501602052604080832081516101008101909252805491929091839160ff909116908111156117b3576117b3612a9f565b60058111156117c4576117c4612a9f565b81526020016001820180546117d890612c63565b80601f016020809104026020016040519081016040528092919081815260200182805461180490612c63565b801561184f5780601f106118265761010080835404028352916020019161184f565b820191905f5260205f20905b81548152906001019060200180831161183257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b80830482166040850152600160801b830482166060850152600160c01b9092048116608084015260039384015480821660a0850152919091041660c090910152909150815160058111156118c7576118c7612a9f565b141580156118e857506001815160058111156118e5576118e5612a9f565b14155b1561190957805160405163170cc93360e21b81526105289190600401612c9b565b60038151600581111561191e5761191e612a9f565b0361192c5760048152611931565b600581525b8360060181602001516040516119479190612f45565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561198a5761198a612a9f565b0217905550602082015160018201906119a39082612fa1565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08601516003909501805460e09097015195841696909116959095179390911602919091179091555183907fafaccef7080649a725bc30a35359a257a4a27225be352875c80bdf6b5f04080c905f90a29196919550909350505050565b5f8181525f8051602061376883398151915260205260408082208151610100810190925280545f8051602061374883398151915293929190829060ff166005811115611ac057611ac0612a9f565b6005811115611ad157611ad1612a9f565b8152602001600182018054611ae590612c63565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1190612c63565b8015611b5c5780601f10611b3357610100808354040283529160200191611b5c565b820191905f5260205f20905b815481529060010190602001808311611b3f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b80830482166040860152600160801b830482166060860152600160c01b9092048116608085015260039094015480851660a08501520490921660c09091015290915081516005811115611bd457611bd4612a9f565b14611c07575f8381526005830160205260409081902054905163170cc93360e21b81526105289160ff1690600401612c9b565b60038152426001600160401b031660e08201525f83815260058381016020526040909120825181548493839160ff1916906001908490811115611c4c57611c4c612a9f565b021790555060208201516001820190611c659082612fa1565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b0316600160801b928716929092026001600160c01b031691909117600160c01b918616919091021790925560c08501516003909401805460e090960151948416959091169490941792909116021790555f611d05848261218a565b915050837fbae388a94e7f18411fe57098f12f418b8e1a8273e0532a90188a3a059b897273828460a0015142604051611d5a939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a250505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16611dac57604051637fab81e560e01b815260040160405180910390fd5b5f80516020613748833981519152426001600160401b038716111580611de75750611dda6202a3004261356e565b866001600160401b031610155b15611e1057604051635879da1360e11b81526001600160401b0387166004820152602401610528565b60038101546001600160401b0390611e3390600160401b9004821685831661356e565b1115611e5d57604051633e1a785160e01b81526001600160401b0384166004820152602401610528565b611e6685612361565b611e6f84612361565b8651603014611e965786516040516326475b2f60e11b815260040161052891815260200190565b8751601414611eba5787604051633e08a12560e11b81526004016105289190612ddd565b5f801b8160060189604051611ecf9190612f45565b90815260200160405180910390205414611efe578760405163a41f772f60e01b81526004016105289190612ddd565b611f08835f612480565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63eb97ce516040518060e00160405280865f015481526020018d81526020018c81526020018b6001600160401b031681526020018a8152602001898152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401611f8891906135e7565b5f60405180830381865af4158015611fa2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611fc99190810190613696565b5f82815260048601602052604090209193509150611fe78282612fa1565b5081836006018b604051611ffb9190612f45565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90612037908590600401612ddd565b6020604051808303815f875af1158015612053573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120779190612def565b5f8481526005860160205260409020805460ff191660019081178255919250016120a18c82612fa1565b505f8381526005850160205260409020600281018054600160c01b6001600160401b038a1690810267ffffffffffffffff60801b9092161717905560030180546001600160801b03191690556120f88b6020015190565b6bffffffffffffffffffffffff1916837f5881be437bdcb008bfa5f20e32d3e335ccf8ab90ef2818852a251625260af35d838c8a604051612155939291909283526001600160401b03918216602084015216604082015260600190565b60405180910390a350909998505050505050505050565b6121746126ea565b61217d82612733565b6121868161274c565b5050565b5f8281525f80516020613768833981519152602052604081206002015481905f8051602061374883398151915290600160c01b90046001600160401b03166121d28582612480565b5f6121dc8761275d565b5f88815260058501602052604080822060020180546001600160c01b0316600160c01b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015612280573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122a79190810190612dac565b6040518263ffffffff1660e01b81526004016122c39190612ddd565b6020604051808303815f875af11580156122df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123039190612def565b604080516001600160401b038581168252602082018490528a1681830152905191925089917f6e350dd49b060d87f297206fd309234ed43156d890ced0f139ecf704310481d39181900360600190a2909450925050505b9250929050565b805163ffffffff1615801561237a575060208101515115155b156123ae57805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610528565b602081015151815163ffffffff1611156123f157805160208201515160405163c08a0f1d60e01b815263ffffffff90921660048301526024820152604401610528565b60015b8160200151518110156121865760208201516124116001836136d9565b8151811061242157612421612e4b565b60200260200101516001600160a01b03168260200151828151811061244857612448612e4b565b60200260200101516001600160a01b0316101561247857604051630dbc8d5f60e31b815260040160405180910390fd5b6001016123f4565b5f805160206137488339815191525f6001600160401b0380841690851611156124b4576124ad83856136ec565b90506124c1565b6124be84846136ec565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061252e57506001840154815161252a916001600160401b03169061356e565b8210155b15612556576001600160401b0380841660608301528282526040820151166020820152612575565b82816060018181516125689190613074565b6001600160401b03169052505b60608101516125859060646130b6565b602082015160018601546001600160401b0392909216916125b09190600160401b900460ff166130b6565b6001600160401b031610156125e957606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610528565b85816040018181516125fb9190613074565b6001600160401b031690525060408101805186919061261b9083906136ec565b6001600160401b03169052506001840154604082015160649161264991600160401b90910460ff16906130b6565b6001600160401b03161015612682576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610528565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c1b57604051631afcd79f60e31b815260040160405180910390fd5b61273b6126ea565b6127436127d2565b610c41816127da565b6127546126ea565b610c41816128c2565b5f8181525f805160206137688339815191526020526040812060020180545f8051602061374883398151915291906008906127a790600160401b90046001600160401b031661370c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610c1b6126ea565b6127e26126ea565b80355f8051602061374883398151915290815560146128076060840160408501613727565b60ff16118061282657506128216060830160408401613727565b60ff16155b1561285a5761283b6060830160408401613727565b604051634a59bbff60e11b815260ff9091166004820152602401610528565b61286a6060830160408401613727565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561289b60408301602084016132e2565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b61144c6126ea565b5080546128d690612c63565b5f825580601f106128e5575050565b601f0160209004905f5260205f2090810190610c419190612946565b604080516101008101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561295a575f8155600101612947565b5090565b5f6020828403121561296e575f80fd5b5035919050565b803563ffffffff81168114612988575f80fd5b919050565b5f806040838503121561299e575f80fd5b82356001600160401b038111156129b3575f80fd5b8301608081860312156129c4575f80fd5b91506129d260208401612975565b90509250929050565b5f602082840312156129eb575f80fd5b610d1182612975565b6001600160401b0381168114610c41575f80fd5b5f8060408385031215612a19575f80fd5b82356001600160401b03811115612a2e575f80fd5b830160a08186031215612a3f575f80fd5b91506020830135612a4f816129f4565b809150509250929050565b6001600160a01b0381168114610c41575f80fd5b5f808284036080811215612a80575f80fd5b6060811215612a8d575f80fd5b508291506060830135612a4f81612a5a565b634e487b7160e01b5f52602160045260245ffd5b60068110612acf57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612aed578181015183820152602001612ad5565b50505f910152565b5f8151808452612b0c816020860160208601612ad3565b601f01601f19169290920160200192915050565b60208152612b32602082018351612ab3565b5f6020830151610100806040850152612b4f610120850183612af5565b915060408501516001600160401b03808216606087015280606088015116608087015250506080850151612b8e60a08601826001600160401b03169052565b5060a08501516001600160401b03811660c08601525060c08501516001600160401b03811660e08601525060e08501516001600160401b038116858301525090949350505050565b5f60208284031215612be6575f80fd5b8135612bf181612a5a565b9392505050565b5f8060208385031215612c09575f80fd5b82356001600160401b0380821115612c1f575f80fd5b818501915085601f830112612c32575f80fd5b813581811115612c40575f80fd5b866020828501011115612c51575f80fd5b60209290920196919550909350505050565b600181811c90821680612c7757607f821691505b602082108103612c9557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610d148284612ab3565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715612cdf57612cdf612ca9565b60405290565b604080519081016001600160401b0381118282101715612cdf57612cdf612ca9565b604051601f8201601f191681016001600160401b0381118282101715612d2f57612d2f612ca9565b604052919050565b5f6001600160401b03821115612d4f57612d4f612ca9565b50601f01601f191660200190565b5f82601f830112612d6c575f80fd5b8151612d7f612d7a82612d37565b612d07565b818152846020838601011115612d93575f80fd5b612da4826020830160208701612ad3565b949350505050565b5f60208284031215612dbc575f80fd5b81516001600160401b03811115612dd1575f80fd5b612da484828501612d5d565b602081525f610d116020830184612af5565b5f60208284031215612dff575f80fd5b5051919050565b5f808335601e19843603018112612e1b575f80fd5b8301803591506001600160401b03821115612e34575f80fd5b6020019150600581901b360382131561235a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612e73575f80fd5b9190910192915050565b5f82601f830112612e8c575f80fd5b8135612e9a612d7a82612d37565b818152846020838601011115612eae575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215612eda575f80fd5b612ee2612cbd565b82356001600160401b0380821115612ef8575f80fd5b612f0436838701612e7d565b83526020850135915080821115612f19575f80fd5b50612f2636828601612e7d565b6020830152506040830135612f3a816129f4565b604082015292915050565b5f8251612e73818460208701612ad3565b601f82111561104857805f5260205f20601f840160051c81016020851015612f7b5750805b601f840160051c820191505b81811015612f9a575f8155600101612f87565b5050505050565b81516001600160401b03811115612fba57612fba612ca9565b612fce81612fc88454612c63565b84612f56565b602080601f831160018114613001575f8415612fea5750858301515b5f19600386901b1c1916600185901b178555613058565b5f85815260208120601f198616915b8281101561302f57888601518255948401946001909101908401613010565b508582101561304c57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156115e8576115e8613060565b5f63ffffffff8083168181036130ac576130ac613060565b6001019392505050565b6001600160401b038181168382160280821691908281146130d9576130d9613060565b505092915050565b5f808335601e198436030181126130f6575f80fd5b83016020810192503590506001600160401b03811115613114575f80fd5b80360382131561235a575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156131ff57848303601f19018952813536889003605e19018112613186575f80fd5b8701606061319482806130e1565b8287526131a48388018284613122565b925050506131b4868301836130e1565b868303888801526131c6838284613122565b9250505060408083013592506131db836129f4565b6001600160401b039290921694909101939093529783019790830190600101613161565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561323081612a5a565b6001600160a01b031660608381019190915283013536849003601e19018112613257575f80fd5b83016020810190356001600160401b03811115613272575f80fd5b8060051b3603821315613283575f80fd5b60808085015261329760a08501828461314a565b95945050505050565b5f808335601e198436030181126132b5575f80fd5b8301803591506001600160401b038211156132ce575f80fd5b60200191503681900382131561235a575f80fd5b5f602082840312156132f2575f80fd5b8135612bf1816129f4565b5f8235603e19833603018112612e73575f80fd5b5f60408236031215613321575f80fd5b613329612ce5565b61333283612975565b81526020808401356001600160401b038082111561334e575f80fd5b9085019036601f830112613360575f80fd5b81358181111561337257613372612ca9565b8060051b9150613383848301612d07565b818152918301840191848101903684111561339c575f80fd5b938501935b838510156133c657843592506133b683612a5a565b82825293850193908501906133a1565b94860194909452509295945050505050565b80518015158114612988575f80fd5b5f80604083850312156133f8575f80fd5b825191506129d2602084016133d8565b5f60208083525f845461341a81612c63565b806020870152604060018084165f811461343b576001811461345757613484565b60ff19851660408a0152604084151560051b8a01019550613484565b895f5260205f205f5b8581101561347b5781548b8201860152908301908801613460565b8a016040019650505b509398975050505050505050565b5f805f606084860312156134a4575f80fd5b8351925060208401516134b6816129f4565b60408501519092506134c7816129f4565b809150509250925092565b818382375f9101908152919050565b5f80604083850312156134f2575f80fd5b82516001600160401b0380821115613508575f80fd5b908401906060828703121561351b575f80fd5b613523612cbd565b82518152602083015161353581612a5a565b602082015260408301518281111561354b575f80fd5b61355788828601612d5d565b60408301525093506129d2915050602084016133d8565b80820180821115610d1457610d14613060565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156135dc5784516001600160a01b031682529383019360019290920191908301906135b3565b509695505050505050565b60208152815160208201525f602083015160e0604084015261360d610100840182612af5565b90506040840151601f198085840301606086015261362b8383612af5565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261365b8383613581565b925060a08601519150808584030160c0860152506136798282613581565b91505060c0840151610c2860e08501826001600160401b03169052565b5f80604083850312156136a7575f80fd5b8251915060208301516001600160401b038111156136c3575f80fd5b6136cf85828601612d5d565b9150509250929050565b81810381811115610d1457610d14613060565b6001600160401b038281168282160390808211156115e8576115e8613060565b5f6001600160401b038083168181036130ac576130ac613060565b5f60208284031215613737575f80fd5b813560ff81168114612bf1575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb05a26469706673582212200bb95de6882243142371e06f61dc2c6b18a57b2e92eda6a30dd3387496955e8b64736f6c63430008190033", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. @@ -2228,7 +2228,7 @@ func (_PoAValidatorManager *PoAValidatorManagerFilterer) ParseRegisteredInitialV // ValidatorMessagesMetaData contains all meta data concerning the ValidatorMessages contract. var ValidatorMessagesMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"InvalidBLSPublicKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"}],\"name\":\"InvalidCodecID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"actual\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"}],\"name\":\"packConversionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"packL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"packL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"validationPeriod\",\"type\":\"tuple\"}],\"name\":\"packRegisterL1ValidatorMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"conversionID\",\"type\":\"bytes32\"}],\"name\":\"packSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"packValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorRegistrationMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackL1ValidatorWeightMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackRegisterL1ValidatorMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structValidatorMessages.ValidationPeriod\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackSubnetToL1ConversionMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"unpackValidationUptimeMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220f730711c5b5760a4acff40008a9e3ea299c9a38a322da3ee6c00fb3fc9503a9d64736f6c63430008190033", + Bin: "0x61217b610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b1575f3560e01c8063854a893f11610079578063854a893f146101b257806387418b8e1461020f5780639b83546514610222578063a699c13514610242578063e1d68f3014610255578063eb97ce5114610268575f80fd5b8063021de88f146100b5578063088c2463146100e25780634d8478841461011257806350782b0f146101335780637f7c427a1461016b575b5f80fd5b6100c86100c33660046118a9565b610289565b604080519283529015156020830152015b60405180910390f35b6100f56100f03660046118a9565b61044a565b604080519283526001600160401b039091166020830152016100d9565b6101256101203660046118a9565b61063b565b6040519081526020016100d9565b6101466101413660046118a9565b6107c8565b604080519384526001600160401b0392831660208501529116908201526060016100d9565b6101a56101793660046118e2565b604080515f60208201819052602282015260268082019390935281518082039093018352604601905290565b6040516100d99190611946565b6101a56101c036600461197a565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b6101a561021d3660046119eb565b610a1e565b6102356102303660046118a9565b610b60565b6040516100d99190611bb4565b6101a5610250366004611c6b565b6114ab565b6101a5610263366004611c9d565b6114ef565b61027b610276366004611d80565b611525565b6040516100d9929190611e7c565b5f8082516027146102c457825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044015b60405180910390fd5b5f805b6002811015610313576102db816001611ea8565b6102e6906008611ebb565b61ffff168582815181106102fc576102fc611ed2565b016020015160f81c901b91909117906001016102c7565b5061ffff81161561033d5760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561039857610354816003611ea8565b61035f906008611ebb565b63ffffffff1686610371836002611ee6565b8151811061038157610381611ed2565b016020015160f81c901b9190911790600101610340565b5063ffffffff81166002146103c057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015610415576103d781601f611ea8565b6103e2906008611ebb565b876103ee836006611ee6565b815181106103fe576103fe611ed2565b016020015160f81c901b91909117906001016103c3565b505f8660268151811061042a5761042a611ed2565b016020015191976001600160f81b03199092161515965090945050505050565b5f808251602e1461048057825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016102bb565b5f805b60028110156104cf57610497816001611ea8565b6104a2906008611ebb565b61ffff168582815181106104b8576104b8611ed2565b016020015160f81c901b9190911790600101610483565b5061ffff8116156104f95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561055457610510816003611ea8565b61051b906008611ebb565b63ffffffff168661052d836002611ee6565b8151811061053d5761053d611ed2565b016020015160f81c901b91909117906001016104fc565b5063ffffffff81161561057a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156105cf5761059181601f611ea8565b61059c906008611ebb565b876105a8836006611ee6565b815181106105b8576105b8611ed2565b016020015160f81c901b919091179060010161057d565b505f805b600881101561062e576105e7816007611ea8565b6105f2906008611ebb565b6001600160401b031688610607836026611ee6565b8151811061061757610617611ed2565b016020015160f81c901b91909117906001016105d3565b5090969095509350505050565b5f815160261461067057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016102bb565b5f805b60028110156106bf57610687816001611ea8565b610692906008611ebb565b61ffff168482815181106106a8576106a8611ed2565b016020015160f81c901b9190911790600101610673565b5061ffff8116156106e95760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b600481101561074457610700816003611ea8565b61070b906008611ebb565b63ffffffff168561071d836002611ee6565b8151811061072d5761072d611ed2565b016020015160f81c901b91909117906001016106ec565b5063ffffffff81161561076a57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156107bf5761078181601f611ea8565b61078c906008611ebb565b86610798836006611ee6565b815181106107a8576107a8611ed2565b016020015160f81c901b919091179060010161076d565b50949350505050565b5f805f83516036146107ff57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016102bb565b5f805b600281101561084e57610816816001611ea8565b610821906008611ebb565b61ffff1686828151811061083757610837611ed2565b016020015160f81c901b9190911790600101610802565b5061ffff8116156108785760405163407b587360e01b815261ffff821660048201526024016102bb565b5f805b60048110156108d35761088f816003611ea8565b61089a906008611ebb565b63ffffffff16876108ac836002611ee6565b815181106108bc576108bc611ed2565b016020015160f81c901b919091179060010161087b565b5063ffffffff81166003146108fb57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156109505761091281601f611ea8565b61091d906008611ebb565b88610929836006611ee6565b8151811061093957610939611ed2565b016020015160f81c901b91909117906001016108fe565b505f805b60088110156109af57610968816007611ea8565b610973906008611ebb565b6001600160401b031689610988836026611ee6565b8151811061099857610998611ed2565b016020015160f81c901b9190911790600101610954565b505f805b6008811015610a0e576109c7816007611ea8565b6109d2906008611ebb565b6001600160401b03168a6109e783602e611ee6565b815181106109f7576109f7611ed2565b016020015160f81c901b91909117906001016109b3565b5091989097509095509350505050565b80516020808301516040808501516060868101515192515f95810186905260228101969096526042860193909352600560e21b60628601526bffffffffffffffffffffffff1990831b16606685015260e01b6001600160e01b031916607a84015291607e0160405160208183030381529060405290505f5b836060015151811015610b59578184606001518281518110610aba57610aba611ed2565b60200260200101515f01515185606001518381518110610adc57610adc611ed2565b60200260200101515f015186606001518481518110610afd57610afd611ed2565b60200260200101516020015187606001518581518110610b1f57610b1f611ed2565b602002602001015160400151604051602001610b3f959493929190611ef9565b60408051601f198184030181529190529150600101610a96565b5092915050565b610b68611712565b5f610b71611712565b5f805b6002811015610bcf57610b88816001611ea8565b610b93906008611ebb565b61ffff1686610ba863ffffffff871684611ee6565b81518110610bb857610bb8611ed2565b016020015160f81c901b9190911790600101610b74565b5061ffff811615610bf95760405163407b587360e01b815261ffff821660048201526024016102bb565b610c04600284611f72565b9250505f805b6004811015610c6957610c1e816003611ea8565b610c29906008611ebb565b63ffffffff16868563ffffffff1683610c429190611ee6565b81518110610c5257610c52611ed2565b016020015160f81c901b9190911790600101610c0a565b5063ffffffff8116600114610c9157604051635b60892f60e01b815260040160405180910390fd5b610c9c600484611f72565b9250505f805b6020811015610cf957610cb681601f611ea8565b610cc1906008611ebb565b86610cd263ffffffff871684611ee6565b81518110610ce257610ce2611ed2565b016020015160f81c901b9190911790600101610ca2565b50808252610d08602084611f72565b9250505f805b6004811015610d6d57610d22816003611ea8565b610d2d906008611ebb565b63ffffffff16868563ffffffff1683610d469190611ee6565b81518110610d5657610d56611ed2565b016020015160f81c901b9190911790600101610d0e565b50610d79600484611f72565b92505f8163ffffffff166001600160401b03811115610d9a57610d9a61176c565b6040519080825280601f01601f191660200182016040528015610dc4576020820181803683370190505b5090505f5b8263ffffffff16811015610e335786610de863ffffffff871683611ee6565b81518110610df857610df8611ed2565b602001015160f81c60f81b828281518110610e1557610e15611ed2565b60200101906001600160f81b03191690815f1a905350600101610dc9565b5060208301819052610e458285611f72565b604080516030808252606082019092529195505f92506020820181803683370190505090505f5b6030811015610ed15786610e8663ffffffff871683611ee6565b81518110610e9657610e96611ed2565b602001015160f81c60f81b828281518110610eb357610eb3611ed2565b60200101906001600160f81b03191690815f1a905350600101610e6c565b5060408301819052610ee4603085611f72565b9350505f805b6008811015610f4a57610efe816007611ea8565b610f09906008611ebb565b6001600160401b031687610f2363ffffffff881684611ee6565b81518110610f3357610f33611ed2565b016020015160f81c901b9190911790600101610eea565b506001600160401b0381166060840152610f65600885611f72565b9350505f805f5b6004811015610fcb57610f80816003611ea8565b610f8b906008611ebb565b63ffffffff16888763ffffffff1683610fa49190611ee6565b81518110610fb457610fb4611ed2565b016020015160f81c901b9190911790600101610f6c565b50610fd7600486611f72565b94505f5b600481101561103a57610fef816003611ea8565b610ffa906008611ebb565b63ffffffff16888763ffffffff16836110139190611ee6565b8151811061102357611023611ed2565b016020015160f81c901b9290921791600101610fdb565b50611046600486611f72565b94505f8263ffffffff166001600160401b038111156110675761106761176c565b604051908082528060200260200182016040528015611090578160200160208202803683370190505b5090505f5b8363ffffffff16811015611178576040805160148082528183019092525f916020820181803683370190505090505f5b601481101561112a578a6110df63ffffffff8b1683611ee6565b815181106110ef576110ef611ed2565b602001015160f81c60f81b82828151811061110c5761110c611ed2565b60200101906001600160f81b03191690815f1a9053506001016110c5565b505f601482015190508084848151811061114657611146611ed2565b6001600160a01b039092166020928302919091019091015261116960148a611f72565b98505050806001019050611095565b506040805180820190915263ffffffff9092168252602082015260808401525f80805b60048110156111fa576111af816003611ea8565b6111ba906008611ebb565b63ffffffff16898863ffffffff16836111d39190611ee6565b815181106111e3576111e3611ed2565b016020015160f81c901b919091179060010161119b565b50611206600487611f72565b95505f5b60048110156112695761121e816003611ea8565b611229906008611ebb565b63ffffffff16898863ffffffff16836112429190611ee6565b8151811061125257611252611ed2565b016020015160f81c901b929092179160010161120a565b50611275600487611f72565b95505f8263ffffffff166001600160401b038111156112965761129661176c565b6040519080825280602002602001820160405280156112bf578160200160208202803683370190505b5090505f5b8363ffffffff168110156113a7576040805160148082528183019092525f916020820181803683370190505090505f5b6014811015611359578b61130e63ffffffff8c1683611ee6565b8151811061131e5761131e611ed2565b602001015160f81c60f81b82828151811061133b5761133b611ed2565b60200101906001600160f81b03191690815f1a9053506001016112f4565b505f601482015190508084848151811061137557611375611ed2565b6001600160a01b039092166020928302919091019091015261139860148b611f72565b995050508060010190506112c4565b506040805180820190915263ffffffff9092168252602082015260a08501525f6113d18284611f72565b6113dc906014611f8f565b6113e785607a611f72565b6113f19190611f72565b90508063ffffffff1688511461142d57875160405163cc92daa160e01b815263ffffffff918216600482015290821660248201526044016102bb565b5f805b600881101561149057611444816007611ea8565b61144f906008611ebb565b6001600160401b03168a61146963ffffffff8b1684611ee6565b8151811061147957611479611ed2565b016020015160f81c901b9190911790600101611430565b506001600160401b031660c086015250929695505050505050565b6040515f6020820152600160e11b60228201526026810183905281151560f81b60468201526060906047015b60405160208183030381529060405290505b92915050565b6040515f602082018190526022820152602681018390526001600160c01b031960c083901b166046820152606090604e016114d7565b5f606082604001515160301461154e5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f9861158f988a986001989297929690959094909390929101611fb7565b60405160208183030381529060405290505f5b84608001516020015151811015611601578185608001516020015182815181106115ce576115ce611ed2565b60200260200101516040516020016115e7929190612071565b60408051601f1981840301815291905291506001016115a2565b5060a08401518051602091820151516040516116219385939291016120a7565b60405160208183030381529060405290505f5b8460a00151602001515181101561169357818560a0015160200151828151811061166057611660611ed2565b6020026020010151604051602001611679929190612071565b60408051601f198184030181529190529150600101611634565b5060c08401516040516116aa9183916020016120e2565b60405160208183030381529060405290506002816040516116cb9190612113565b602060405180830381855afa1580156116e6573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611709919061212e565b94909350915050565b6040805160e0810182525f808252606060208084018290528385018290528184018390528451808601865283815280820183905260808501528451808601909552918452908301529060a082019081525f60209091015290565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156117a2576117a261176c565b60405290565b604051606081016001600160401b03811182821017156117a2576117a261176c565b604080519081016001600160401b03811182821017156117a2576117a261176c565b60405160e081016001600160401b03811182821017156117a2576117a261176c565b604051601f8201601f191681016001600160401b03811182821017156118365761183661176c565b604052919050565b5f82601f83011261184d575f80fd5b81356001600160401b038111156118665761186661176c565b611879601f8201601f191660200161180e565b81815284602083860101111561188d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156118b9575f80fd5b81356001600160401b038111156118ce575f80fd5b6118da8482850161183e565b949350505050565b5f602082840312156118f2575f80fd5b5035919050565b5f5b838110156119135781810151838201526020016118fb565b50505f910152565b5f81518084526119328160208601602086016118f9565b601f01601f19169290920160200192915050565b602081525f611958602083018461191b565b9392505050565b80356001600160401b0381168114611975575f80fd5b919050565b5f805f6060848603121561198c575f80fd5b8335925061199c6020850161195f565b91506119aa6040850161195f565b90509250925092565b80356001600160a01b0381168114611975575f80fd5b5f6001600160401b038211156119e1576119e161176c565b5060051b60200190565b5f60208083850312156119fc575f80fd5b82356001600160401b0380821115611a12575f80fd5b9084019060808287031215611a25575f80fd5b611a2d611780565b823581528383013584820152611a45604084016119b3565b604082015260608084013583811115611a5c575f80fd5b80850194505087601f850112611a70575f80fd5b8335611a83611a7e826119c9565b61180e565b81815260059190911b8501860190868101908a831115611aa1575f80fd5b8787015b83811015611b3a57803587811115611abb575f80fd5b8801808d03601f1901861315611acf575f80fd5b611ad76117a8565b8a82013589811115611ae7575f80fd5b611af58f8d8386010161183e565b825250604082013589811115611b09575f80fd5b611b178f8d8386010161183e565b8c83015250611b2787830161195f565b6040820152845250918801918801611aa5565b506060850152509198975050505050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015611ba95784516001600160a01b03168252938301936001929092019190830190611b80565b509695505050505050565b60208152815160208201525f602083015160e06040840152611bda61010084018261191b565b90506040840151601f1980858403016060860152611bf8838361191b565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152611c288383611b4e565b925060a08601519150808584030160c086015250611c468282611b4e565b91505060c0840151611c6360e08501826001600160401b03169052565b509392505050565b5f8060408385031215611c7c575f80fd5b8235915060208301358015158114611c92575f80fd5b809150509250929050565b5f8060408385031215611cae575f80fd5b82359150611cbe6020840161195f565b90509250929050565b5f60408284031215611cd7575f80fd5b611cdf6117ca565b9050813563ffffffff81168114611cf4575f80fd5b81526020828101356001600160401b03811115611d0f575f80fd5b8301601f81018513611d1f575f80fd5b8035611d2d611a7e826119c9565b81815260059190911b82018301908381019087831115611d4b575f80fd5b928401925b82841015611d7057611d61846119b3565b82529284019290840190611d50565b8085870152505050505092915050565b5f60208284031215611d90575f80fd5b81356001600160401b0380821115611da6575f80fd5b9083019060e08286031215611db9575f80fd5b611dc16117ec565b82358152602083013582811115611dd6575f80fd5b611de28782860161183e565b602083015250604083013582811115611df9575f80fd5b611e058782860161183e565b604083015250611e176060840161195f565b6060820152608083013582811115611e2d575f80fd5b611e3987828601611cc7565b60808301525060a083013582811115611e50575f80fd5b611e5c87828601611cc7565b60a083015250611e6e60c0840161195f565b60c082015295945050505050565b828152604060208201525f6118da604083018461191b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114e9576114e9611e94565b80820281158282048414176114e9576114e9611e94565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114e9576114e9611e94565b5f8651611f0a818460208b016118f9565b60e087901b6001600160e01b0319169083019081528551611f32816004840160208a016118f9565b8551910190611f488160048401602089016118f9565b60c09490941b6001600160c01b031916600491909401908101939093525050600c01949350505050565b63ffffffff818116838216019080821115610b5957610b59611e94565b63ffffffff818116838216028082169190828114611faf57611faf611e94565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651611ffd81602a850160208b016118f9565b86519083019061201481602a840160208b016118f9565b60c087901b6001600160c01b031916602a9290910191820152612046603282018660e01b6001600160e01b0319169052565b61205f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516120828184602088016118f9565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516120b88184602089016118f9565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516120f38184602088016118f9565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f82516121248184602087016118f9565b9190910192915050565b5f6020828403121561213e575f80fd5b505191905056fea2646970667358221220e6b22cfbb2dc3686c9e5d5c46b42e65620ca6777a1371e31c12b720ad3c60ea464736f6c63430008190033", } // ValidatorMessagesABI is the input ABI used to generate the binding from. diff --git a/contracts/validator-manager/ACP99Manager.sol b/contracts/validator-manager/ACP99Manager.sol index 795272d48..5288aa4e3 100644 --- a/contracts/validator-manager/ACP99Manager.sol +++ b/contracts/validator-manager/ACP99Manager.sol @@ -75,7 +75,9 @@ struct Validator { */ abstract contract ACP99Manager { /// @notice Emitted when an initial validator is registered. - event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight); + event RegisteredInitialValidator( + bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight + ); /// @notice Emitted when a validator registration to the L1 is initiated. event InitiatedValidatorRegistration( bytes32 indexed validationID, diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 0faa92f22..33d232b20 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -363,10 +363,7 @@ abstract contract ValidatorManager is delete $._pendingRegisterValidationMessages[validationID]; $._validationPeriods[validationID].status = ValidatorStatus.Active; $._validationPeriods[validationID].startTime = uint64(block.timestamp); - emit CompletedValidatorRegistration( - validationID, - $._validationPeriods[validationID].weight - ); + emit CompletedValidatorRegistration(validationID, $._validationPeriods[validationID].weight); return validationID; } diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 9b5f3856b..e8a76849c 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -20,8 +20,7 @@ import {ACP99Manager, ConversionData, InitialValidator, PChainOwner} from "../AC abstract contract ValidatorManagerTest is Test { bytes32 public constant DEFAULT_SUBNET_ID = bytes32(hex"1234567812345678123456781234567812345678123456781234567812345678"); - bytes public constant DEFAULT_NODE_ID = - bytes(hex"1234123412341234123412341234123412341234"); + bytes public constant DEFAULT_NODE_ID = bytes(hex"1234123412341234123412341234123412341234"); bytes public constant DEFAULT_INITIAL_VALIDATOR_NODE_ID_1 = bytes(hex"2341234123412341234123412341234123412341"); bytes public constant DEFAULT_INITIAL_VALIDATOR_NODE_ID_2 = @@ -58,7 +57,9 @@ abstract contract ValidatorManagerTest is Test { // Used to create unique validator IDs in {_newNodeID} uint64 public nodeIDCounter = 0; - event RegisteredInitialValidator(bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight); + event RegisteredInitialValidator( + bytes32 indexed validationID, bytes20 indexed nodeID, uint64 weight + ); event InitiatedValidatorRegistration( bytes32 indexed validationID,