diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 1d15e91e9..f982f4c70 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -104,7 +104,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\":\"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\":[{\"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\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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: "0x608060405234801561000f575f80fd5b50604051615f84380380615f8483398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e378061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614d7b565b61057a565b005b610256610266366004614db6565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614d7b565b61081b565b6102566102ab366004614dcd565b610827565b6102566102be366004614e1b565b610ddd565b6102d66102d1366004614db6565b610e51565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614e50565b610ea5565b61025661032b366004614d7b565b610eb8565b61025661033e366004614e9e565b610ec4565b610356610351366004614edc565b610f87565b604051908152602001610281565b610256610372366004614e50565b610fbc565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614e1b565b610fc8565b6103566103b5366004614f43565b611290565b6102d66103c8366004614db6565b6112b0565b6103565f81565b6102566103e2366004614d7b565b6112c4565b6102566103f5366004614e50565b6112d0565b610256610408366004614e1b565b6112dc565b610273603081565b610256610423366004614f5e565b611516565b610256610436366004614db6565b6115c7565b610256610449366004614e50565b61165b565b61035661045c366004614f8c565b611667565b61025661046f366004614fac565b611693565b610256610482366004614e9e565b611772565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614db6565b611968565b6103565f80516020615da283398151915281565b610256610509366004614db6565b611bc1565b610273601481565b610529610524366004614db6565b611cfd565b6040516102819190615054565b6102d66202a30081565b6103565f80516020615d8283398151915281565b610256610562366004614f5e565b611e4c565b6103566105753660046150d4565b611f13565b6105868383835f611f6e565b505050565b5f8181525f80516020615dc28339815191526020526040808220815160e0810190925280545f80516020615da283398151915293929190829060ff1660058111156105d8576105d8614fdf565b60058111156105e9576105e9614fdf565b81526020016001820180546105fd9061513f565b80601f01602080910402602001604051908101604052809291908181526020018280546106299061513f565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614fdf565b1461071b575f8381526005830160205260409081902054905163170cc93360e21b81526107129160ff1690600401615177565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b99190810190615280565b6040518263ffffffff1660e01b81526004016107d591906152b1565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081591906152c3565b50505050565b6108158383835f611f9a565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615da28339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e091906152c3565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a60608501604086016152da565b6001600160a01b03161461095d5761093860608401604085016152da565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b60608501856152f5565b905090505f805b828163ffffffff161015610bd3575f61098e60608801886152f5565b8363ffffffff168181106109a4576109a461533a565b90506020028101906109b6919061534e565b6109bf906153b9565b80516040519192505f9160068801916109d791615434565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b815261071291906004016152b1565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a5091615434565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e91906152c3565b90508086600601835f0151604051610aa69190615434565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610ae69082615489565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610b669085615558565b8251604051919550610b7791615434565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610bcc90615578565b9050610972565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c16910460ff168361559a565b6001600160401b03161015610c4957604051633e1a785160e01b81526001600160401b0382166004820152602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c6d876122c7565b604001516040518263ffffffff1660e01b8152600401610c8d91906152b1565b602060405180830381865af4158015610ca8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccc91906152c3565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d0691906156f0565b5f60405180830381865af4158015610d20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d479190810190615280565b90505f600282604051610d5a9190615434565b602060405180830381855afa158015610d75573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d9891906152c3565b9050828114610dc45760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506007909201805460ff1916600117905550505050565b610de6826123dd565b610e06576040516330efa98b60e01b815260048101839052602401610712565b5f610e1083611cfd565b5190506002816005811115610e2757610e27614fdf565b14610e47578060405163170cc93360e21b81526004016107129190615177565b6108158383612406565b5f80610e5b6126a5565b60030154610e699084615784565b9050801580610e7e57506001600160401b0381115b15610e9f5760405163222d164360e21b815260048101849052602401610712565b92915050565b610eb184848484611f9a565b5050505050565b6108158383835f6126c9565b610ecc612906565b5f610ed56126a5565b90505f80610ee28461293d565b91509150610eef826123dd565b610efb57505050610f6e565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f2e5750805b600483516005811115610f4357610f43614fdf565b03610f5257610f528185612cf5565b610f6882610f638560400151611290565b612d1f565b50505050505b610f8460015f80516020615de283398151915255565b50565b5f610f90612906565b610f9c85858585612d55565b9050610fb460015f80516020615de283398151915255565b949350505050565b61081584848484612ed5565b5f610fd16126a5565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561100a5761100a614fdf565b600381111561101b5761101b614fdf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61109182611cfd565b90506001835160038111156110a8576110a8614fdf565b146110c9578251604051633b0d540d60e21b815261071291906004016157a3565b6004815160058111156110de576110de614fdf565b036110f4576110ec86612f01565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f611119896122c7565b604001516040518263ffffffff1660e01b815260040161113991906152b1565b606060405180830381865af4158015611154573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117891906157bd565b50915091508184146111a557846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111de5750806001600160401b03168560a001516001600160401b0316115b1561120757604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6112996126a5565b60030154610e9f906001600160401b0384166157fd565b5f6112ba82611cfd565b6080015192915050565b6105868383835f612ed5565b610eb1848484846126c9565b6112e4612906565b5f6112ed6126a5565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561132657611326614fdf565b600381111561133757611337614fdf565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113b0576113b0614fdf565b146113d1578051604051633b0d540d60e21b815261071291906004016157a3565b60046113e08260400151611cfd565b5160058111156113f2576113f2614fdf565b146114f1575f611401846122c7565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161144091906152b1565b606060405180830381865af415801561145b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147f91906157bd565b5091509150818460400151146114ab5760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114ed57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114fa84612f01565b505061151260015f80516020615de283398151915255565b5050565b5f61151f6126a5565b90506001600160a01b0382166115535760405163caa903f960e01b81526001600160a01b0383166004820152602401610712565b5f8381526006820160205260409020546001600160a01b0316331461159957335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6115d06126a5565b90505f6115dc83611cfd565b51905060048160058111156115f3576115f3614fdf565b14611613578060405163170cc93360e21b81526004016107129190615177565b5f8381526006830160205260409020546001600160a01b031633146116385733611574565b5f838152600683016020526040902054610586906001600160a01b031684612cf5565b61081584848484611f6e565b5f611670612906565b61167b83338461310e565b9050610e9f60015f80516020615de283398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806116dc575080546001600160401b03808416911610155b156116fa5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556117258484613353565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615da28339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117a5866122c7565b604001516040518263ffffffff1660e01b81526004016117c591906152b1565b6040805180830381865af41580156117df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118039190615814565b915091508061182957604051632d07135360e01b81528115156004820152602401610712565b5f828152600484016020526040902080546118439061513f565b90505f036118675760405163089938b360e11b815260048101839052602401610712565b60015f838152600580860160205260409091205460ff169081111561188e5761188e614fdf565b146118c1575f8281526005840160205260409081902054905163170cc93360e21b81526107129160ff1690600401615177565b5f82815260048401602052604081206118d991614cca565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f6119716126a5565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119aa576119aa614fdf565b60038111156119bb576119bb614fdf565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a3457611a34614fdf565b14158015611a555750600381516003811115611a5257611a52614fdf565b14155b15611a76578051604051633b0d540d60e21b815261071291906004016157a3565b5f611a848260400151611cfd565b905080606001516001600160401b03165f03611ab6576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b2493906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b3e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b659190810190615280565b6040518263ffffffff1660e01b8152600401611b8191906152b1565b6020604051808303815f875af1158015611b9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb191906152c3565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615da28339815191529190611c089061513f565b90505f03611c2c5760405163089938b360e11b815260048101839052602401610712565b60015f838152600580840160205260409091205460ff1690811115611c5357611c53614fdf565b14611c86575f8281526005820160205260409081902054905163170cc93360e21b81526107129160ff1690600401615177565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611cbd9201615837565b6020604051808303815f875af1158015611cd9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058691906152c3565b611d05614d01565b5f8281525f80516020615dc2833981519152602052604090819020815160e0810190925280545f80516020615da2833981519152929190829060ff166005811115611d5257611d52614fdf565b6005811115611d6357611d63614fdf565b8152602001600182018054611d779061513f565b80601f0160208091040260200160405190810160405280929190818152602001828054611da39061513f565b8015611dee5780601f10611dc557610100808354040283529160200191611dee565b820191905f5260205f20905b815481529060010190602001808311611dd157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611e7e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611e876126a5565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611eb55733611574565b336001600160a01b03831603611ee4575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615da2833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611f5690869086906158c1565b90815260200160405180910390205491505092915050565b611f7a84848484611f9a565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611fa46126a5565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611fdd57611fdd614fdf565b6003811115611fee57611fee614fdf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61206482611cfd565b905060028351600381111561207b5761207b614fdf565b1461209c578251604051633b0d540d60e21b815261071291906004016157a3565b60208301516001600160a01b03163314612138575f8281526006850160205260409020546001600160a01b031633146120d55733611574565b5f82815260068501602052604090205460a082015161210491600160b01b90046001600160401b031690615558565b6001600160401b03164210156121385760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561214d5761214d614fdf565b0361226f576002840154608084015161216f916001600160401b031690615558565b6001600160401b03164210156121a35760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121b5576121b38288612406565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516121ee9184916121e991906158d0565b61336d565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561223184888c613544565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fb49350505050565b60048151600581111561228457612284614fdf565b036122ab5761229483878b613544565b5061229e89612f01565b6001945050505050610fb4565b805160405163170cc93360e21b81526107129190600401615177565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561232b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261235291908101906158f0565b915091508061237457604051636b2f19e960e01b815260040160405180910390fd5b81511561239a578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b0316156123d6576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f806123e76126a5565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612451573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261247891908101906158f0565b915091508061249a57604051636b2f19e960e01b815260040160405180910390fd5b5f6124a36126a5565b60058101548451919250146124d1578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b03161561250d576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b031615612549576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161258691906152b1565b6040805180830381865af41580156125a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125c49190615980565b915091508188146125eb5760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b03908116908216111561267c575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261269a565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126d36126a5565b90505f6126df87613729565b90506126ea876123dd565b6126f957600192505050610fb4565b5f8781526006830160205260409020546001600160a01b0316331461271e5733611574565b5f87815260068301602052604090205460a082015161274d91600160b01b90046001600160401b031690615558565b6001600160401b03168160c001516001600160401b031610156127945760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f86156127ac576127a58887612406565b90506127ca565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906127ef90611290565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612858573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287c91906152c3565b90506001600160a01b0386166128a8575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906128c79084906159a3565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615de283398151915280546001190161293757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612946614d01565b5f80516020615da28339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612979886122c7565b604001516040518263ffffffff1660e01b815260040161299991906152b1565b6040805180830381865af41580156129b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129d79190615814565b9150915080156129fe57604051632d07135360e01b81528115156004820152602401610712565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612a3557612a35614fdf565b6005811115612a4657612a46614fdf565b8152602001600182018054612a5a9061513f565b80601f0160208091040260200160405190810160405280929190818152602001828054612a869061513f565b8015612ad15780601f10612aa857610100808354040283529160200191612ad1565b820191905f5260205f20905b815481529060010190602001808311612ab457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b3c57612b3c614fdf565b14158015612b5d5750600181516005811115612b5a57612b5a614fdf565b14155b15612b7e57805160405163170cc93360e21b81526107129190600401615177565b600381516005811115612b9357612b93614fdf565b03612ba15760048152612ba6565b600581525b836006018160200151604051612bbc9190615434565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612bff57612bff614fdf565b021790555060208201516001820190612c189082615489565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612cbe57612cbe614fdf565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612cfe6126a5565b5f838152600a82016020526040812080549190559091506108158482613a0e565b5f80516020615d8283398151915254611512906001600160a01b03168383613a84565b60015f80516020615de283398151915255565b5f80612d5f6126a5565b600281015490915061ffff600160401b90910481169086161080612d88575061271061ffff8616115b15612dac57604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612de8576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612dfa5750806001015483115b15612e1b5760405163222d164360e21b815260048101849052602401610712565b5f612e2584613ae3565b90505f612e3182610e51565b90505f612e3e8983613b06565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b612ee1848484846126c9565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612f0a6126a5565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f4357612f43614fdf565b6003811115612f5457612f54614fdf565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612ff17fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130009190615558565b6001600160401b03164210156130345760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b031680613084575060208201516130a2565b5f858152600985016020526040902080546001600160a01b03191690555b5f806130af838886614078565b915091506130c88560200151610f638760600151611290565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131186126a5565b90505f6131276102d185613ae3565b90505f61313387611cfd565b905061313e876123dd565b61315e576040516330efa98b60e01b815260048101889052602401610712565b60028151600581111561317357613173614fdf565b1461319457805160405163170cc93360e21b81526107129190600401615177565b5f8282608001516131a59190615558565b905083600201600a9054906101000a90046001600160401b031682604001516131ce919061559a565b6001600160401b0316816001600160401b0316111561320b57604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f806132178a8461336d565b915091505f8a8360405160200161324592919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61335b614125565b61336482614170565b611512816141ea565b5f8281525f80516020615dc2833981519152602052604081206002015481905f80516020615da283398151915290600160801b90046001600160401b03166133b58582614252565b5f6133bf876144bc565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613468573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261348f9190810190615280565b6040518263ffffffff1660e01b81526004016134ab91906152b1565b6020604051808303815f875af11580156134c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134eb91906152c3565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061354e6126a5565b90505f61355e8660400151611cfd565b90505f60038251600581111561357657613576614fdf565b1480613594575060048251600581111561359257613592614fdf565b145b156135a4575060c08101516135e1565b6002825160058111156135b9576135b9614fdf565b036135c55750426135e1565b815160405163170cc93360e21b81526107129190600401615177565b86608001516001600160401b0316816001600160401b031611613609575f935050505061334c565b600483015460608801515f916001600160a01b031690634f22429f9061362e90611290565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156136af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136d391906152c3565b5f878152600886016020526040902081905590506001600160a01b0387161561269a575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b613731614d01565b5f8281525f80516020615dc28339815191526020526040808220815160e0810190925280545f80516020615da283398151915293929190829060ff16600581111561377e5761377e614fdf565b600581111561378f5761378f614fdf565b81526020016001820180546137a39061513f565b80601f01602080910402602001604051908101604052809291908181526020018280546137cf9061513f565b801561381a5780601f106137f15761010080835404028352916020019161381a565b820191905f5260205f20905b8154815290600101906020018083116137fd57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561388857613888614fdf565b146138bb575f8481526005830160205260409081902054905163170cc93360e21b81526107129160ff1690600401615177565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff191690600190849081111561390057613900614fdf565b0217905550602082015160018201906139199082615489565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139b7858261336d565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b5f5f80516020615d8283398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a69575f80fd5b505af1158015613a7b573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614531565b5f610e9f825f80516020615d82833981519152546001600160a01b031690614592565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613b4a57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615da283398151915242613b696060860160408701614f43565b6001600160401b0316111580613ba35750613b876202a300426159a3565b613b976060860160408701614f43565b6001600160401b031610155b15613bdd57613bb86060850160408601614f43565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b60038101546001600160401b0390613c0090600160401b900482168583166159a3565b1115613c2a57604051633e1a785160e01b81526001600160401b0384166004820152602401610712565b613c3f613c3a60608601866159b6565b61459e565b613c4f613c3a60808601866159b6565b6030613c5e60208601866159ca565b905014613c9057613c7260208501856159ca565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c9a84806159ca565b90505f03613cc757613cac84806159ca565b604051633e08a12560e11b8152600401610712929190615a0c565b5f60068201613cd686806159ca565b604051613ce49291906158c1565b90815260200160405180910390205414613d1d57613d0284806159ca565b60405163a41f772f60e01b8152600401610712929190615a0c565b613d27835f614252565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d648a806159ca565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613dac908b018b6159ca565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613df560608b0160408c01614f43565b6001600160401b03168152602001613e1060608b018b6159b6565b613e1990615a1f565b8152602001613e2b60808b018b6159b6565b613e3490615a1f565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e629190615b4c565b5f60405180830381865af4158015613e7c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613ea39190810190615c03565b5f82815260048601602052604090209193509150613ec18282615489565b508160068401613ed188806159ca565b604051613edf9291906158c1565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613f1b9085906004016152b1565b6020604051808303815f875af1158015613f37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f5b91906152c3565b5f8481526005860160205260409020805460ff191660011790559050613f8187806159ca565b5f858152600587016020526040902060010191613f9f919083615c46565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613ffe88806159ca565b60405161400c9291906158c1565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b604001602081019061404a9190614f43565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f6140836126a5565b5f86815260088201602052604081208054908290559192509081908015614117575f878152600685016020526040902054612710906140cd90600160a01b900461ffff16836157fd565b6140d79190615784565b91508184600a015f8981526020019081526020015f205f8282546140fb91906159a3565b9091555061410b90508282615cff565b92506141178984613a0e565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661416e57604051631afcd79f60e31b815260040160405180910390fd5b565b614178614125565b61418181614707565b614189614720565b610f84606082013560808301356141a660c0850160a08601614f43565b6141b660e0860160c08701615d12565b6141c7610100870160e08801615d2b565b6101008701356141df61014089016101208a016152da565b886101400135614730565b6141f2614125565b5f80516020615d828339815191526001600160a01b03821661423257604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615da28339815191525f6001600160401b0380841690851611156142865761427f83856158d0565b9050614293565b61429084846158d0565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806143005750600184015481516142fc916001600160401b0316906159a3565b8210155b15614328576001600160401b0380841660608301528282526040820151166020820152614347565b828160600181815161433a9190615558565b6001600160401b03169052505b606081015161435790606461559a565b602082015160018601546001600160401b0392909216916143829190600160401b900460ff1661559a565b6001600160401b031610156143bb57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b85816040018181516143cd9190615558565b6001600160401b03169052506040810180518691906143ed9083906158d0565b6001600160401b03169052506001840154604082015160649161441b91600160401b90910460ff169061559a565b6001600160401b03161015614454576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610712565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615dc28339815191526020526040812060020180545f80516020615da2833981519152919060089061450690600160401b90046001600160401b0316615d4b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6145456001600160a01b03841683614915565b905080515f141580156145695750808060200190518101906145679190615d66565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f61334c833384614922565b6145ab6020820182614e9e565b63ffffffff161580156145cb57506145c660208201826152f5565b151590505b15614612576145dd6020820182614e9e565b6145ea60208301836152f5565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b61461f60208201826152f5565b905061462e6020830183614e9e565b63ffffffff161115614647576145dd6020820182614e9e565b60015b61465760208301836152f5565b90508110156115125761466d60208301836152f5565b614678600184615cff565b8181106146875761468761533a565b905060200201602081019061469c91906152da565b6001600160a01b03166146b260208401846152f5565b838181106146c2576146c261533a565b90506020020160208101906146d791906152da565b6001600160a01b031610156146ff57604051630dbc8d5f60e31b815260040160405180910390fd5b60010161464a565b61470f614125565b614717614a85565b610f8481614a8d565b614728614125565b61416e614b75565b614738614125565b5f6147416126a5565b905061ffff86161580614759575061271061ffff8716115b1561477d57604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156147a15760405163222d164360e21b8152600481018a9052602401610712565b60ff851615806147b45750600a60ff8616115b156147d75760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b0316101561483e576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f0361485e5760405163a733007160e01b815260040160405180910390fd5b8161487f57604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061334c83835f614b7d565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614968573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061498c91906152c3565b90506149a36001600160a01b038616853086614c0c565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156149e7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a0b91906152c3565b9050818111614a715760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b614a7b8282615cff565b9695505050505050565b61416e614125565b614a95614125565b80355f80516020615da28339815191529081556014614aba6060840160408501615d2b565b60ff161180614ad95750614ad46060830160408401615d2b565b60ff16155b15614b0d57614aee6060830160408401615d2b565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614b1d6060830160408401615d2b565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b4e6040830160208401614f43565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d42614125565b606081471015614ba25760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614bbd9190615434565b5f6040518083038185875af1925050503d805f8114614bf7576040519150601f19603f3d011682016040523d82523d5f602084013e614bfc565b606091505b5091509150614a7b868383614c45565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613ab1565b606082614c5a57614c5582614ca1565b61334c565b8151158015614c7157506001600160a01b0384163b155b15614c9a57604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b508061334c565b805115614cb15780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614cd69061513f565b5f825580601f10614ce5575050565b601f0160209004905f5260205f2090810190610f849190614d3e565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614d52575f8155600101614d3f565b5090565b8015158114610f84575f80fd5b803563ffffffff81168114614d76575f80fd5b919050565b5f805f60608486031215614d8d575f80fd5b833592506020840135614d9f81614d56565b9150614dad60408501614d63565b90509250925092565b5f60208284031215614dc6575f80fd5b5035919050565b5f8060408385031215614dde575f80fd5b82356001600160401b03811115614df3575f80fd5b830160808186031215614e04575f80fd5b9150614e1260208401614d63565b90509250929050565b5f8060408385031215614e2c575f80fd5b82359150614e1260208401614d63565b6001600160a01b0381168114610f84575f80fd5b5f805f8060808587031215614e63575f80fd5b843593506020850135614e7581614d56565b9250614e8360408601614d63565b91506060850135614e9381614e3c565b939692955090935050565b5f60208284031215614eae575f80fd5b61334c82614d63565b803561ffff81168114614d76575f80fd5b6001600160401b0381168114610f84575f80fd5b5f805f8060808587031215614eef575f80fd5b84356001600160401b03811115614f04575f80fd5b850160a08188031215614f15575f80fd5b9350614f2360208601614eb7565b92506040850135614f3381614ec8565b9396929550929360600135925050565b5f60208284031215614f53575f80fd5b813561334c81614ec8565b5f8060408385031215614f6f575f80fd5b823591506020830135614f8181614e3c565b809150509250929050565b5f8060408385031215614f9d575f80fd5b50508035926020909101359150565b5f80828403610180811215614fbf575f80fd5b61016080821215614fce575f80fd5b8493508301359050614f8181614e3c565b634e487b7160e01b5f52602160045260245ffd5b6006811061500357615003614fdf565b9052565b5f5b83811015615021578181015183820152602001615009565b50505f910152565b5f8151808452615040816020860160208601615007565b601f01601f19169290920160200192915050565b60208152615066602082018351614ff3565b5f602083015160e06040840152615081610100840182615029565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156150e5575f80fd5b82356001600160401b03808211156150fb575f80fd5b818501915085601f83011261510e575f80fd5b81358181111561511c575f80fd5b86602082850101111561512d575f80fd5b60209290920196919550909350505050565b600181811c9082168061515357607f821691505b60208210810361517157634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e9f8284614ff3565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151bb576151bb615185565b60405290565b604080519081016001600160401b03811182821017156151bb576151bb615185565b604051601f8201601f191681016001600160401b038111828210171561520b5761520b615185565b604052919050565b5f6001600160401b0382111561522b5761522b615185565b50601f01601f191660200190565b5f82601f830112615248575f80fd5b815161525b61525682615213565b6151e3565b81815284602083860101111561526f575f80fd5b610fb4826020830160208701615007565b5f60208284031215615290575f80fd5b81516001600160401b038111156152a5575f80fd5b610fb484828501615239565b602081525f61334c6020830184615029565b5f602082840312156152d3575f80fd5b5051919050565b5f602082840312156152ea575f80fd5b813561334c81614e3c565b5f808335601e1984360301811261530a575f80fd5b8301803591506001600160401b03821115615323575f80fd5b6020019150600581901b360382131561353d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615362575f80fd5b9190910192915050565b5f82601f83011261537b575f80fd5b813561538961525682615213565b81815284602083860101111561539d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153c9575f80fd5b6153d1615199565b82356001600160401b03808211156153e7575f80fd5b6153f33683870161536c565b83526020850135915080821115615408575f80fd5b506154153682860161536c565b602083015250604083013561542981614ec8565b604082015292915050565b5f8251615362818460208701615007565b601f82111561058657805f5260205f20601f840160051c8101602085101561546a5750805b601f840160051c820191505b81811015610eb1575f8155600101615476565b81516001600160401b038111156154a2576154a2615185565b6154b6816154b0845461513f565b84615445565b602080601f8311600181146154e9575f84156154d25750858301515b5f19600386901b1c1916600185901b1785556110ec565b5f85815260208120601f198616915b82811015615517578886015182559484019460019091019084016154f8565b508582101561553457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156123d6576123d6615544565b5f63ffffffff80831681810361559057615590615544565b6001019392505050565b6001600160401b038181168382160280821691908281146155bd576155bd615544565b505092915050565b5f808335601e198436030181126155da575f80fd5b83016020810192503590506001600160401b038111156155f8575f80fd5b80360382131561353d575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156e357848303601f19018952813536889003605e1901811261566a575f80fd5b8701606061567882806155c5565b8287526156888388018284615606565b92505050615698868301836155c5565b868303888801526156aa838284615606565b9250505060408083013592506156bf83614ec8565b6001600160401b039290921694909101939093529783019790830190600101615645565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561571481614e3c565b6001600160a01b031660608381019190915283013536849003601e1901811261573b575f80fd5b83016020810190356001600160401b03811115615756575f80fd5b8060051b3603821315615767575f80fd5b60808085015261577b60a08501828461562e565b95945050505050565b5f8261579e57634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157b7576157b7614fdf565b91905290565b5f805f606084860312156157cf575f80fd5b8351925060208401516157e181614ec8565b60408501519092506157f281614ec8565b809150509250925092565b8082028115828204841417610e9f57610e9f615544565b5f8060408385031215615825575f80fd5b825191506020830151614f8181614d56565b5f60208083525f84546158498161513f565b806020870152604060018084165f811461586a5760018114615886576158b3565b60ff19851660408a0152604084151560051b8a010195506158b3565b895f5260205f205f5b858110156158aa5781548b820186015290830190880161588f565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038281168282160390808211156123d6576123d6615544565b5f8060408385031215615901575f80fd5b82516001600160401b0380821115615917575f80fd5b908401906060828703121561592a575f80fd5b615932615199565b82518152602083015161594481614e3c565b602082015260408301518281111561595a575f80fd5b61596688828601615239565b6040830152508094505050506020830151614f8181614d56565b5f8060408385031215615991575f80fd5b825191506020830151614f8181614ec8565b80820180821115610e9f57610e9f615544565b5f8235603e19833603018112615362575f80fd5b5f808335601e198436030181126159df575f80fd5b8301803591506001600160401b038211156159f8575f80fd5b60200191503681900382131561353d575f80fd5b602081525f610fb4602083018486615606565b5f60408236031215615a2f575f80fd5b615a376151c1565b615a4083614d63565b81526020808401356001600160401b0380821115615a5c575f80fd5b9085019036601f830112615a6e575f80fd5b813581811115615a8057615a80615185565b8060051b9150615a918483016151e3565b8181529183018401918481019036841115615aaa575f80fd5b938501935b83851015615ad45784359250615ac483614e3c565b8282529385019390850190615aaf565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b415784516001600160a01b03168252938301936001929092019190830190615b18565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b72610100840182615029565b90506040840151601f1980858403016060860152615b908383615029565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615bc08383615ae6565b925060a08601519150808584030160c086015250615bde8282615ae6565b91505060c0840151615bfb60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c14575f80fd5b8251915060208301516001600160401b03811115615c30575f80fd5b615c3c85828601615239565b9150509250929050565b6001600160401b03831115615c5d57615c5d615185565b615c7183615c6b835461513f565b83615445565b5f601f841160018114615ca2575f8515615c8b5750838201355b5f19600387901b1c1916600186901b178355610eb1565b5f83815260208120601f198716915b82811015615cd15786850135825560209485019460019092019101615cb1565b5086821015615ced575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e9f57610e9f615544565b5f60208284031215615d22575f80fd5b61334c82614eb7565b5f60208284031215615d3b575f80fd5b813560ff8116811461334c575f80fd5b5f6001600160401b0380831681810361559057615590615544565b5f60208284031215615d76575f80fd5b815161334c81614d5656fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212201d9cfd5b0280db7693fed39f2f049911c82ae5ecc9eabc00c2d3eadec24799b464736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615f3b380380615f3b83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615dee8061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614d32565b61057a565b005b610256610266366004614d6d565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614d32565b61081b565b6102566102ab366004614d84565b610827565b6102566102be366004614dd2565b610ddd565b6102d66102d1366004614d6d565b610e51565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614e07565b610ea5565b61025661032b366004614d32565b610eb8565b61025661033e366004614e55565b610ec4565b610356610351366004614e93565b610f87565b604051908152602001610281565b610256610372366004614e07565b610fbc565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614dd2565b610fc8565b6103566103b5366004614efa565b611290565b6102d66103c8366004614d6d565b6112b0565b6103565f81565b6102566103e2366004614d32565b6112c4565b6102566103f5366004614e07565b6112d0565b610256610408366004614dd2565b6112dc565b610273603081565b610256610423366004614f15565b611516565b610256610436366004614d6d565b6115c7565b610256610449366004614e07565b61165b565b61035661045c366004614f43565b611667565b61025661046f366004614f63565b611693565b610256610482366004614e55565b611772565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614d6d565b611968565b6103565f80516020615d5983398151915281565b610256610509366004614d6d565b611bc1565b610273601481565b610529610524366004614d6d565b611cfd565b604051610281919061500b565b6102d66202a30081565b6103565f80516020615d3983398151915281565b610256610562366004614f15565b611e4c565b61035661057536600461508b565b611ee3565b6105868383835f611f3e565b505050565b5f8181525f80516020615d798339815191526020526040808220815160e0810190925280545f80516020615d5983398151915293929190829060ff1660058111156105d8576105d8614f96565b60058111156105e9576105e9614f96565b81526020016001820180546105fd906150f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610629906150f6565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614f96565b1461071b575f8381526005830160205260409081902054905163170cc93360e21b81526107129160ff169060040161512e565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b99190810190615237565b6040518263ffffffff1660e01b81526004016107d59190615268565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610815919061527a565b50505050565b6108158383835f611f6a565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615d598339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e0919061527a565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a6060850160408601615291565b6001600160a01b03161461095d576109386060840160408501615291565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b60608501856152ac565b905090505f805b828163ffffffff161015610bd3575f61098e60608801886152ac565b8363ffffffff168181106109a4576109a46152f1565b90506020028101906109b69190615305565b6109bf90615370565b80516040519192505f9160068801916109d7916153eb565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b81526107129190600401615268565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a50916153eb565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e919061527a565b90508086600601835f0151604051610aa691906153eb565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610ae69082615440565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610b66908561550f565b8251604051919550610b77916153eb565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610bcc9061552f565b9050610972565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c16910460ff1683615551565b6001600160401b03161015610c4957604051633e1a785160e01b81526001600160401b0382166004820152602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c6d87612297565b604001516040518263ffffffff1660e01b8152600401610c8d9190615268565b602060405180830381865af4158015610ca8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccc919061527a565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d0691906156a7565b5f60405180830381865af4158015610d20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d479190810190615237565b90505f600282604051610d5a91906153eb565b602060405180830381855afa158015610d75573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d98919061527a565b9050828114610dc45760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506007909201805460ff1916600117905550505050565b610de6826123ad565b610e06576040516330efa98b60e01b815260048101839052602401610712565b5f610e1083611cfd565b5190506002816005811115610e2757610e27614f96565b14610e47578060405163170cc93360e21b8152600401610712919061512e565b61081583836123d6565b5f80610e5b612675565b60030154610e69908461573b565b9050801580610e7e57506001600160401b0381115b15610e9f5760405163222d164360e21b815260048101849052602401610712565b92915050565b610eb184848484611f6a565b5050505050565b6108158383835f612699565b610ecc6128d6565b5f610ed5612675565b90505f80610ee28461290d565b91509150610eef826123ad565b610efb57505050610f6e565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f2e5750805b600483516005811115610f4357610f43614f96565b03610f5257610f528185612cc5565b610f6882610f638560400151611290565b612cef565b50505050505b610f8460015f80516020615d9983398151915255565b50565b5f610f906128d6565b610f9c85858585612d25565b9050610fb460015f80516020615d9983398151915255565b949350505050565b61081584848484612ea5565b5f610fd1612675565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561100a5761100a614f96565b600381111561101b5761101b614f96565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61109182611cfd565b90506001835160038111156110a8576110a8614f96565b146110c9578251604051633b0d540d60e21b8152610712919060040161575a565b6004815160058111156110de576110de614f96565b036110f4576110ec86612ed1565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61111989612297565b604001516040518263ffffffff1660e01b81526004016111399190615268565b606060405180830381865af4158015611154573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111789190615774565b50915091508184146111a557846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111de5750806001600160401b03168560a001516001600160401b0316115b1561120757604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f611299612675565b60030154610e9f906001600160401b0384166157b4565b5f6112ba82611cfd565b6080015192915050565b6105868383835f612ea5565b610eb184848484612699565b6112e46128d6565b5f6112ed612675565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561132657611326614f96565b600381111561133757611337614f96565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113b0576113b0614f96565b146113d1578051604051633b0d540d60e21b8152610712919060040161575a565b60046113e08260400151611cfd565b5160058111156113f2576113f2614f96565b146114f1575f61140184612297565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114409190615268565b606060405180830381865af415801561145b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147f9190615774565b5091509150818460400151146114ab5760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114ed57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114fa84612ed1565b505061151260015f80516020615d9983398151915255565b5050565b5f61151f612675565b90506001600160a01b0382166115535760405163caa903f960e01b81526001600160a01b0383166004820152602401610712565b5f8381526006820160205260409020546001600160a01b0316331461159957335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6115d0612675565b90505f6115dc83611cfd565b51905060048160058111156115f3576115f3614f96565b14611613578060405163170cc93360e21b8152600401610712919061512e565b5f8381526006830160205260409020546001600160a01b031633146116385733611574565b5f838152600683016020526040902054610586906001600160a01b031684612cc5565b61081584848484611f3e565b5f6116706128d6565b61167b8333846130bc565b9050610e9f60015f80516020615d9983398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806116dc575080546001600160401b03808416911610155b156116fa5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556117258484613301565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d598339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117a586612297565b604001516040518263ffffffff1660e01b81526004016117c59190615268565b6040805180830381865af41580156117df573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180391906157cb565b915091508061182957604051632d07135360e01b81528115156004820152602401610712565b5f82815260048401602052604090208054611843906150f6565b90505f036118675760405163089938b360e11b815260048101839052602401610712565b60015f838152600580860160205260409091205460ff169081111561188e5761188e614f96565b146118c1575f8281526005840160205260409081902054905163170cc93360e21b81526107129160ff169060040161512e565b5f82815260048401602052604081206118d991614c81565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f611971612675565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119aa576119aa614f96565b60038111156119bb576119bb614f96565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a3457611a34614f96565b14158015611a555750600381516003811115611a5257611a52614f96565b14155b15611a76578051604051633b0d540d60e21b8152610712919060040161575a565b5f611a848260400151611cfd565b905080606001516001600160401b03165f03611ab6576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b2493906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b3e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b659190810190615237565b6040518263ffffffff1660e01b8152600401611b819190615268565b6020604051808303815f875af1158015611b9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb1919061527a565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615d598339815191529190611c08906150f6565b90505f03611c2c5760405163089938b360e11b815260048101839052602401610712565b60015f838152600580840160205260409091205460ff1690811115611c5357611c53614f96565b14611c86575f8281526005820160205260409081902054905163170cc93360e21b81526107129160ff169060040161512e565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611cbd92016157ee565b6020604051808303815f875af1158015611cd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610586919061527a565b611d05614cb8565b5f8281525f80516020615d79833981519152602052604090819020815160e0810190925280545f80516020615d59833981519152929190829060ff166005811115611d5257611d52614f96565b6005811115611d6357611d63614f96565b8152602001600182018054611d77906150f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611da3906150f6565b8015611dee5780601f10611dc557610100808354040283529160200191611dee565b820191905f5260205f20905b815481529060010190602001808311611dd157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611e7e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611e87612675565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611eb55733611574565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615d59833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611f269086908690615878565b90815260200160405180910390205491505092915050565b611f4a84848484611f6a565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611f74612675565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611fad57611fad614f96565b6003811115611fbe57611fbe614f96565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61203482611cfd565b905060028351600381111561204b5761204b614f96565b1461206c578251604051633b0d540d60e21b8152610712919060040161575a565b60208301516001600160a01b03163314612108575f8281526006850160205260409020546001600160a01b031633146120a55733611574565b5f82815260068501602052604090205460a08201516120d491600160b01b90046001600160401b03169061550f565b6001600160401b03164210156121085760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561211d5761211d614f96565b0361223f576002840154608084015161213f916001600160401b03169061550f565b6001600160401b03164210156121735760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121855761218382886123d6565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516121be9184916121b99190615887565b61331b565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561220184888c6134f2565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fb49350505050565b60048151600581111561225457612254614f96565b0361227b5761226483878b6134f2565b5061226e89612ed1565b6001945050505050610fb4565b805160405163170cc93360e21b8152610712919060040161512e565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156122fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261232291908101906158a7565b915091508061234457604051636b2f19e960e01b815260040160405180910390fd5b81511561236a578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b0316156123a6576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f806123b7612675565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612421573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261244891908101906158a7565b915091508061246a57604051636b2f19e960e01b815260040160405180910390fd5b5f612473612675565b60058101548451919250146124a1578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b0316156124dd576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b031615612519576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016125569190615268565b6040805180830381865af4158015612570573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125949190615937565b915091508188146125bb5760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b03908116908216111561264c575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261266a565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126a3612675565b90505f6126af876136e0565b90506126ba876123ad565b6126c957600192505050610fb4565b5f8781526006830160205260409020546001600160a01b031633146126ee5733611574565b5f87815260068301602052604090205460a082015161271d91600160b01b90046001600160401b03169061550f565b6001600160401b03168160c001516001600160401b031610156127645760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f861561277c5761277588876123d6565b905061279a565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906127bf90611290565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612828573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061284c919061527a565b90506001600160a01b038616612878575f8981526006850160205260409020546001600160a01b031695505b5f898152600a850160205260408120805483929061289790849061595a565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615d9983398151915280546001190161290757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612916614cb8565b5f80516020615d598339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61294988612297565b604001516040518263ffffffff1660e01b81526004016129699190615268565b6040805180830381865af4158015612983573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129a791906157cb565b9150915080156129ce57604051632d07135360e01b81528115156004820152602401610712565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612a0557612a05614f96565b6005811115612a1657612a16614f96565b8152602001600182018054612a2a906150f6565b80601f0160208091040260200160405190810160405280929190818152602001828054612a56906150f6565b8015612aa15780601f10612a7857610100808354040283529160200191612aa1565b820191905f5260205f20905b815481529060010190602001808311612a8457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b0c57612b0c614f96565b14158015612b2d5750600181516005811115612b2a57612b2a614f96565b14155b15612b4e57805160405163170cc93360e21b8152610712919060040161512e565b600381516005811115612b6357612b63614f96565b03612b715760048152612b76565b600581525b836006018160200151604051612b8c91906153eb565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612bcf57612bcf614f96565b021790555060208201516001820190612be89082615440565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612c8e57612c8e614f96565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612cce612675565b5f838152600a820160205260408120805491905590915061081584826139c5565b5f80516020615d3983398151915254611512906001600160a01b03168383613a3b565b60015f80516020615d9983398151915255565b5f80612d2f612675565b600281015490915061ffff600160401b90910481169086161080612d58575061271061ffff8616115b15612d7c57604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612db8576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612dca5750806001015483115b15612deb5760405163222d164360e21b815260048101849052602401610712565b5f612df584613a9a565b90505f612e0182610e51565b90505f612e0e8983613abd565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b612eb184848484612699565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612eda612675565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f1357612f13614f96565b6003811115612f2457612f24614f96565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612fc17fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612fd0919061550f565b6001600160401b03164210156130045760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b031680613050575060208201515b5f8061305d83888661402f565b915091506130768560200151610f638760600151611290565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806130c6612675565b90505f6130d56102d185613a9a565b90505f6130e187611cfd565b90506130ec876123ad565b61310c576040516330efa98b60e01b815260048101889052602401610712565b60028151600581111561312157613121614f96565b1461314257805160405163170cc93360e21b8152610712919060040161512e565b5f828260800151613153919061550f565b905083600201600a9054906101000a90046001600160401b0316826040015161317c9190615551565b6001600160401b0316816001600160401b031611156131b957604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f806131c58a8461331b565b915091505f8a836040516020016131f392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133096140dc565b61331282614127565b611512816141a1565b5f8281525f80516020615d79833981519152602052604081206002015481905f80516020615d5983398151915290600160801b90046001600160401b03166133638582614209565b5f61336d87614473565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613416573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261343d9190810190615237565b6040518263ffffffff1660e01b81526004016134599190615268565b6020604051808303815f875af1158015613475573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613499919061527a565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806134fc612675565b90505f61350c8660400151611cfd565b90505f60038251600581111561352457613524614f96565b1480613542575060048251600581111561354057613540614f96565b145b15613552575060c081015161358f565b60028251600581111561356757613567614f96565b0361357357504261358f565b815160405163170cc93360e21b8152610712919060040161512e565b86608001516001600160401b0316816001600160401b0316116135b7575f93505050506132fa565b600483015460608801515f916001600160a01b031690634f22429f906135dc90611290565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561365d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613681919061527a565b90506001600160a01b03871661369957876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b6136e8614cb8565b5f8281525f80516020615d798339815191526020526040808220815160e0810190925280545f80516020615d5983398151915293929190829060ff16600581111561373557613735614f96565b600581111561374657613746614f96565b815260200160018201805461375a906150f6565b80601f0160208091040260200160405190810160405280929190818152602001828054613786906150f6565b80156137d15780601f106137a8576101008083540402835291602001916137d1565b820191905f5260205f20905b8154815290600101906020018083116137b457829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561383f5761383f614f96565b14613872575f8481526005830160205260409081902054905163170cc93360e21b81526107129160ff169060040161512e565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff19169060019084908111156138b7576138b7614f96565b0217905550602082015160018201906138d09082615440565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f61396e858261331b565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b5f5f80516020615d3983398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a20575f80fd5b505af1158015613a32573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144e8565b5f610e9f825f80516020615d39833981519152546001600160a01b031690614549565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613b0157604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d5983398151915242613b206060860160408701614efa565b6001600160401b0316111580613b5a5750613b3e6202a3004261595a565b613b4e6060860160408701614efa565b6001600160401b031610155b15613b9457613b6f6060850160408601614efa565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b60038101546001600160401b0390613bb790600160401b9004821685831661595a565b1115613be157604051633e1a785160e01b81526001600160401b0384166004820152602401610712565b613bf6613bf1606086018661596d565b614555565b613c06613bf1608086018661596d565b6030613c156020860186615981565b905014613c4757613c296020850185615981565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c518480615981565b90505f03613c7e57613c638480615981565b604051633e08a12560e11b81526004016107129291906159c3565b5f60068201613c8d8680615981565b604051613c9b929190615878565b90815260200160405180910390205414613cd457613cb98480615981565b60405163a41f772f60e01b81526004016107129291906159c3565b613cde835f614209565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d1b8a80615981565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d63908b018b615981565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613dac60608b0160408c01614efa565b6001600160401b03168152602001613dc760608b018b61596d565b613dd0906159d6565b8152602001613de260808b018b61596d565b613deb906159d6565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e199190615b03565b5f60405180830381865af4158015613e33573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e5a9190810190615bba565b5f82815260048601602052604090209193509150613e788282615440565b508160068401613e888880615981565b604051613e96929190615878565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613ed2908590600401615268565b6020604051808303815f875af1158015613eee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f12919061527a565b5f8481526005860160205260409020805460ff191660011790559050613f388780615981565b5f858152600587016020526040902060010191613f56919083615bfd565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613fb58880615981565b604051613fc3929190615878565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906140019190614efa565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61403a612675565b5f868152600882016020526040812080549082905591925090819080156140ce575f8781526006850160205260409020546127109061408490600160a01b900461ffff16836157b4565b61408e919061573b565b91508184600a015f8981526020019081526020015f205f8282546140b2919061595a565b909155506140c290508282615cb6565b92506140ce89846139c5565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661412557604051631afcd79f60e31b815260040160405180910390fd5b565b61412f6140dc565b614138816146be565b6141406146d7565b610f846060820135608083013561415d60c0850160a08601614efa565b61416d60e0860160c08701615cc9565b61417e610100870160e08801615ce2565b61010087013561419661014089016101208a01615291565b8861014001356146e7565b6141a96140dc565b5f80516020615d398339815191526001600160a01b0382166141e957604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d598339815191525f6001600160401b03808416908516111561423d576142368385615887565b905061424a565b6142478484615887565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142b75750600184015481516142b3916001600160401b03169061595a565b8210155b156142df576001600160401b03808416606083015282825260408201511660208201526142fe565b82816060018181516142f1919061550f565b6001600160401b03169052505b606081015161430e906064615551565b602082015160018601546001600160401b0392909216916143399190600160401b900460ff16615551565b6001600160401b0316101561437257606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b8581604001818151614384919061550f565b6001600160401b03169052506040810180518691906143a4908390615887565b6001600160401b0316905250600184015460408201516064916143d291600160401b90910460ff1690615551565b6001600160401b0316101561440b576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610712565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615d798339815191526020526040812060020180545f80516020615d5983398151915291906008906144bd90600160401b90046001600160401b0316615d02565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6144fc6001600160a01b038416836148cc565b905080515f1415801561452057508080602001905181019061451e9190615d1d565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f6132fa8333846148d9565b6145626020820182614e55565b63ffffffff16158015614582575061457d60208201826152ac565b151590505b156145c9576145946020820182614e55565b6145a160208301836152ac565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b6145d660208201826152ac565b90506145e56020830183614e55565b63ffffffff1611156145fe576145946020820182614e55565b60015b61460e60208301836152ac565b90508110156115125761462460208301836152ac565b61462f600184615cb6565b81811061463e5761463e6152f1565b90506020020160208101906146539190615291565b6001600160a01b031661466960208401846152ac565b83818110614679576146796152f1565b905060200201602081019061468e9190615291565b6001600160a01b031610156146b657604051630dbc8d5f60e31b815260040160405180910390fd5b600101614601565b6146c66140dc565b6146ce614a3c565b610f8481614a44565b6146df6140dc565b614125614b2c565b6146ef6140dc565b5f6146f8612675565b905061ffff86161580614710575061271061ffff8716115b1561473457604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156147585760405163222d164360e21b8152600481018a9052602401610712565b60ff8516158061476b5750600a60ff8616115b1561478e5760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156147f5576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f036148155760405163a733007160e01b815260040160405180910390fd5b8161483657604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b60606132fa83835f614b34565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa15801561491f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614943919061527a565b905061495a6001600160a01b038616853086614bc3565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561499e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149c2919061527a565b9050818111614a285760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b614a328282615cb6565b9695505050505050565b6141256140dc565b614a4c6140dc565b80355f80516020615d598339815191529081556014614a716060840160408501615ce2565b60ff161180614a905750614a8b6060830160408401615ce2565b60ff16155b15614ac457614aa56060830160408401615ce2565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614ad46060830160408401615ce2565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b056040830160208401614efa565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d126140dc565b606081471015614b595760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614b7491906153eb565b5f6040518083038185875af1925050503d805f8114614bae576040519150601f19603f3d011682016040523d82523d5f602084013e614bb3565b606091505b5091509150614a32868383614bfc565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613a68565b606082614c1157614c0c82614c58565b6132fa565b8151158015614c2857506001600160a01b0384163b155b15614c5157604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b50806132fa565b805115614c685780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c8d906150f6565b5f825580601f10614c9c575050565b601f0160209004905f5260205f2090810190610f849190614cf5565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614d09575f8155600101614cf6565b5090565b8015158114610f84575f80fd5b803563ffffffff81168114614d2d575f80fd5b919050565b5f805f60608486031215614d44575f80fd5b833592506020840135614d5681614d0d565b9150614d6460408501614d1a565b90509250925092565b5f60208284031215614d7d575f80fd5b5035919050565b5f8060408385031215614d95575f80fd5b82356001600160401b03811115614daa575f80fd5b830160808186031215614dbb575f80fd5b9150614dc960208401614d1a565b90509250929050565b5f8060408385031215614de3575f80fd5b82359150614dc960208401614d1a565b6001600160a01b0381168114610f84575f80fd5b5f805f8060808587031215614e1a575f80fd5b843593506020850135614e2c81614d0d565b9250614e3a60408601614d1a565b91506060850135614e4a81614df3565b939692955090935050565b5f60208284031215614e65575f80fd5b6132fa82614d1a565b803561ffff81168114614d2d575f80fd5b6001600160401b0381168114610f84575f80fd5b5f805f8060808587031215614ea6575f80fd5b84356001600160401b03811115614ebb575f80fd5b850160a08188031215614ecc575f80fd5b9350614eda60208601614e6e565b92506040850135614eea81614e7f565b9396929550929360600135925050565b5f60208284031215614f0a575f80fd5b81356132fa81614e7f565b5f8060408385031215614f26575f80fd5b823591506020830135614f3881614df3565b809150509250929050565b5f8060408385031215614f54575f80fd5b50508035926020909101359150565b5f80828403610180811215614f76575f80fd5b61016080821215614f85575f80fd5b8493508301359050614f3881614df3565b634e487b7160e01b5f52602160045260245ffd5b60068110614fba57614fba614f96565b9052565b5f5b83811015614fd8578181015183820152602001614fc0565b50505f910152565b5f8151808452614ff7816020860160208601614fbe565b601f01601f19169290920160200192915050565b6020815261501d602082018351614faa565b5f602083015160e06040840152615038610100840182614fe0565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f806020838503121561509c575f80fd5b82356001600160401b03808211156150b2575f80fd5b818501915085601f8301126150c5575f80fd5b8135818111156150d3575f80fd5b8660208285010111156150e4575f80fd5b60209290920196919550909350505050565b600181811c9082168061510a57607f821691505b60208210810361512857634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e9f8284614faa565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151725761517261513c565b60405290565b604080519081016001600160401b03811182821017156151725761517261513c565b604051601f8201601f191681016001600160401b03811182821017156151c2576151c261513c565b604052919050565b5f6001600160401b038211156151e2576151e261513c565b50601f01601f191660200190565b5f82601f8301126151ff575f80fd5b815161521261520d826151ca565b61519a565b818152846020838601011115615226575f80fd5b610fb4826020830160208701614fbe565b5f60208284031215615247575f80fd5b81516001600160401b0381111561525c575f80fd5b610fb4848285016151f0565b602081525f6132fa6020830184614fe0565b5f6020828403121561528a575f80fd5b5051919050565b5f602082840312156152a1575f80fd5b81356132fa81614df3565b5f808335601e198436030181126152c1575f80fd5b8301803591506001600160401b038211156152da575f80fd5b6020019150600581901b36038213156134eb575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615319575f80fd5b9190910192915050565b5f82601f830112615332575f80fd5b813561534061520d826151ca565b818152846020838601011115615354575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615380575f80fd5b615388615150565b82356001600160401b038082111561539e575f80fd5b6153aa36838701615323565b835260208501359150808211156153bf575f80fd5b506153cc36828601615323565b60208301525060408301356153e081614e7f565b604082015292915050565b5f8251615319818460208701614fbe565b601f82111561058657805f5260205f20601f840160051c810160208510156154215750805b601f840160051c820191505b81811015610eb1575f815560010161542d565b81516001600160401b038111156154595761545961513c565b61546d8161546784546150f6565b846153fc565b602080601f8311600181146154a0575f84156154895750858301515b5f19600386901b1c1916600185901b1785556110ec565b5f85815260208120601f198616915b828110156154ce578886015182559484019460019091019084016154af565b50858210156154eb57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156123a6576123a66154fb565b5f63ffffffff808316818103615547576155476154fb565b6001019392505050565b6001600160401b03818116838216028082169190828114615574576155746154fb565b505092915050565b5f808335601e19843603018112615591575f80fd5b83016020810192503590506001600160401b038111156155af575f80fd5b8036038213156134eb575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561569a57848303601f19018952813536889003605e19018112615621575f80fd5b8701606061562f828061557c565b82875261563f83880182846155bd565b9250505061564f8683018361557c565b868303888801526156618382846155bd565b92505050604080830135925061567683614e7f565b6001600160401b0392909216949091019390935297830197908301906001016155fc565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356156cb81614df3565b6001600160a01b031660608381019190915283013536849003601e190181126156f2575f80fd5b83016020810190356001600160401b0381111561570d575f80fd5b8060051b360382131561571e575f80fd5b60808085015261573260a0850182846155e5565b95945050505050565b5f8261575557634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061576e5761576e614f96565b91905290565b5f805f60608486031215615786575f80fd5b83519250602084015161579881614e7f565b60408501519092506157a981614e7f565b809150509250925092565b8082028115828204841417610e9f57610e9f6154fb565b5f80604083850312156157dc575f80fd5b825191506020830151614f3881614d0d565b5f60208083525f8454615800816150f6565b806020870152604060018084165f8114615821576001811461583d5761586a565b60ff19851660408a0152604084151560051b8a0101955061586a565b895f5260205f205f5b858110156158615781548b8201860152908301908801615846565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038281168282160390808211156123a6576123a66154fb565b5f80604083850312156158b8575f80fd5b82516001600160401b03808211156158ce575f80fd5b90840190606082870312156158e1575f80fd5b6158e9615150565b8251815260208301516158fb81614df3565b6020820152604083015182811115615911575f80fd5b61591d888286016151f0565b6040830152508094505050506020830151614f3881614d0d565b5f8060408385031215615948575f80fd5b825191506020830151614f3881614e7f565b80820180821115610e9f57610e9f6154fb565b5f8235603e19833603018112615319575f80fd5b5f808335601e19843603018112615996575f80fd5b8301803591506001600160401b038211156159af575f80fd5b6020019150368190038213156134eb575f80fd5b602081525f610fb46020830184866155bd565b5f604082360312156159e6575f80fd5b6159ee615178565b6159f783614d1a565b81526020808401356001600160401b0380821115615a13575f80fd5b9085019036601f830112615a25575f80fd5b813581811115615a3757615a3761513c565b8060051b9150615a4884830161519a565b8181529183018401918481019036841115615a61575f80fd5b938501935b83851015615a8b5784359250615a7b83614df3565b8282529385019390850190615a66565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615af85784516001600160a01b03168252938301936001929092019190830190615acf565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b29610100840182614fe0565b90506040840151601f1980858403016060860152615b478383614fe0565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b778383615a9d565b925060a08601519150808584030160c086015250615b958282615a9d565b91505060c0840151615bb260e08501826001600160401b03169052565b509392505050565b5f8060408385031215615bcb575f80fd5b8251915060208301516001600160401b03811115615be7575f80fd5b615bf3858286016151f0565b9150509250929050565b6001600160401b03831115615c1457615c1461513c565b615c2883615c2283546150f6565b836153fc565b5f601f841160018114615c59575f8515615c425750838201355b5f19600387901b1c1916600186901b178355610eb1565b5f83815260208120601f198716915b82811015615c885786850135825560209485019460019092019101615c68565b5086821015615ca4575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e9f57610e9f6154fb565b5f60208284031215615cd9575f80fd5b6132fa82614e6e565b5f60208284031215615cf2575f80fd5b813560ff811681146132fa575f80fd5b5f6001600160401b03808316818103615547576155476154fb565b5f60208284031215615d2d575f80fd5b81516132fa81614d0d56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122002bf5eca360f2b92763201c33f8c795d94caf37b04e2e7f9ffa939e7b66c549764736f6c63430008190033", } // 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 69ce20e27..6f16c874b 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -104,7 +104,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\":\"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\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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: "0x608060405234801561000f575f80fd5b50604051615ce3380380615ce383398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b968061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614b68565b610724565b005b348015610263575f80fd5b50610256610272366004614ba3565b610735565b348015610282575f80fd5b50610256610291366004614bba565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614b68565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614bd1565b610aae565b34801561030a575f80fd5b50610256610319366004614c1f565b611064565b348015610329575f80fd5b5061033d610338366004614ba3565b6110d8565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614c54565b61112c565b3480156103d9575f80fd5b506102566103e8366004614b68565b61113f565b3480156103f8575f80fd5b50610256610407366004614ca2565b61114b565b348015610417575f80fd5b50610256610426366004614c54565b61120e565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614c1f565b61121a565b34801561047e575f80fd5b5061049261048d366004614ccf565b6114e2565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614ba3565b611502565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614b68565b611516565b3480156104fc575f80fd5b5061025661050b366004614c54565b611522565b34801561051b575f80fd5b5061025661052a366004614c1f565b61152e565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614cea565b611768565b34801561056d575f80fd5b5061025661057c366004614ba3565b611819565b34801561058c575f80fd5b5061025661059b366004614c54565b6118ad565b3480156105ab575f80fd5b506102566105ba366004614ca2565b6118b9565b6104926105cd366004614d29565b611aaf565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614ba3565b611ae3565b348015610649575f80fd5b506104925f80516020615b0183398151915281565b348015610669575f80fd5b50610256610678366004614ba3565b611d3c565b61049261068b366004614ba3565b611e78565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614ba3565b611ea9565b6040516102b89190614dff565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614cea565b611ff8565b348015610710575f80fd5b5061049261071f366004614e7f565b6120bf565b6107308383835f61211a565b505050565b5f8181525f80516020615b218339815191526020526040808220815160e0810190925280545f80516020615b0183398151915293929190829060ff16600581111561078257610782614d8a565b600581111561079357610793614d8a565b81526020016001820180546107a790614eea565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614eea565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614d8a565b146108c5575f8381526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614f1c565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190615025565b6040518263ffffffff1660e01b815260040161097f9190615056565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190615068565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a5683612146565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f612157565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615b018339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190615068565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba1606085016040860161507f565b6001600160a01b031614610be457610bbf606084016040850161507f565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf2606085018561509a565b905090505f805b828163ffffffff161015610e5a575f610c15606088018861509a565b8363ffffffff16818110610c2b57610c2b6150df565b9050602002810190610c3d91906150f3565b610c469061515e565b80516040519192505f916006880191610c5e916151d9565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401615056565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd7916151d9565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190615068565b90508086600601835f0151604051610d2d91906151d9565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610d6d908261522e565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610ded90856152fd565b8251604051919550610dfe916151d9565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610e539061531d565b9050610bf9565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610e9d910460ff168361533f565b6001600160401b03161015610ed057604051633e1a785160e01b81526001600160401b03821660048201526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ef48761248c565b604001516040518263ffffffff1660e01b8152600401610f149190615056565b602060405180830381865af4158015610f2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f539190615068565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f8d9190615495565b5f60405180830381865af4158015610fa7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fce9190810190615025565b90505f600282604051610fe191906151d9565b602060405180830381855afa158015610ffc573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061101f9190615068565b905082811461104b5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506007909201805460ff1916600117905550505050565b61106d826125a2565b61108d576040516330efa98b60e01b8152600481018390526024016108bc565b5f61109783611ea9565b51905060028160058111156110ae576110ae614d8a565b146110ce578060405163170cc93360e21b81526004016108bc9190614f1c565b6109bf83836125cb565b5f806110e261286a565b600301546110f09084615529565b905080158061110557506001600160401b0381115b156111265760405163222d164360e21b8152600481018490526024016108bc565b92915050565b61113884848484612157565b5050505050565b6109bf8383835f61288e565b611153612acb565b5f61115c61286a565b90505f8061116984612b02565b91509150611176826125a2565b611182575050506111f5565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111b55750805b6004835160058111156111ca576111ca614d8a565b036111d9576111d98185612eba565b6111ef826111ea85604001516114e2565b612ee4565b50505050505b61120b60015f80516020615b4183398151915255565b50565b6109bf84848484612f0a565b5f61122361286a565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561125c5761125c614d8a565b600381111561126d5761126d614d8a565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112e382611ea9565b90506001835160038111156112fa576112fa614d8a565b1461131b578251604051633b0d540d60e21b81526108bc9190600401615548565b60048151600581111561133057611330614d8a565b036113465761133e86612f36565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61136b8961248c565b604001516040518263ffffffff1660e01b815260040161138b9190615056565b606060405180830381865af41580156113a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ca9190615562565b50915091508184146113f757846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114305750806001600160401b03168560a001516001600160401b0316115b1561145957604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114eb61286a565b60030154611126906001600160401b038416615597565b5f61150c82611ea9565b6080015192915050565b6107308383835f612f0a565b6111388484848461288e565b611536612acb565b5f61153f61286a565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561157857611578614d8a565b600381111561158957611589614d8a565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561160257611602614d8a565b14611623578051604051633b0d540d60e21b81526108bc9190600401615548565b60046116328260400151611ea9565b51600581111561164457611644614d8a565b14611743575f6116538461248c565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116929190615056565b606060405180830381865af41580156116ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d19190615562565b5091509150818460400151146116fd5760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173f57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174c84612f36565b505061176460015f80516020615b4183398151915255565b5050565b5f61177161286a565b90506001600160a01b0382166117a55760405163caa903f960e01b81526001600160a01b03831660048201526024016108bc565b5f8381526006820160205260409020546001600160a01b031633146117eb57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61182261286a565b90505f61182e83611ea9565b519050600481600581111561184557611845614d8a565b14611865578060405163170cc93360e21b81526004016108bc9190614f1c565b5f8381526006830160205260409020546001600160a01b0316331461188a57336117c6565b5f838152600683016020526040902054610730906001600160a01b031684612eba565b6109bf8484848461211a565b5f80516020615b018339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118ec8661248c565b604001516040518263ffffffff1660e01b815260040161190c9190615056565b6040805180830381865af4158015611926573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061194a91906155ae565b915091508061197057604051632d07135360e01b815281151560048201526024016108bc565b5f8281526004840160205260409020805461198a90614eea565b90505f036119ae5760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580860160205260409091205460ff16908111156119d5576119d5614d8a565b14611a08575f8281526005840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614f1c565b5f8281526004840160205260408120611a2091614abc565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f611ab8612acb565b611ac484848434613143565b9050611adc60015f80516020615b4183398151915255565b9392505050565b5f611aec61286a565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b2557611b25614d8a565b6003811115611b3657611b36614d8a565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611baf57611baf614d8a565b14158015611bd05750600381516003811115611bcd57611bcd614d8a565b14155b15611bf1578051604051633b0d540d60e21b81526108bc9190600401615548565b5f611bff8260400151611ea9565b905080606001516001600160401b03165f03611c31576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c9f93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cb9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ce09190810190615025565b6040518263ffffffff1660e01b8152600401611cfc9190615056565b6020604051808303815f875af1158015611d18573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111389190615068565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615b018339815191529190611d8390614eea565b90505f03611da75760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580840160205260409091205460ff1690811115611dce57611dce614d8a565b14611e01575f8281526005820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614f1c565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e3892016155d1565b6020604051808303815f875af1158015611e54573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190615068565b5f611e81612acb565b611e8c8233346132b8565b9050611ea460015f80516020615b4183398151915255565b919050565b611eb1614af3565b5f8281525f80516020615b21833981519152602052604090819020815160e0810190925280545f80516020615b01833981519152929190829060ff166005811115611efe57611efe614d8a565b6005811115611f0f57611f0f614d8a565b8152602001600182018054611f2390614eea565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4f90614eea565b8015611f9a5780601f10611f7157610100808354040283529160200191611f9a565b820191905f5260205f20905b815481529060010190602001808311611f7d57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b03811661202a5760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61203361286a565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461206157336117c6565b336001600160a01b03831603612090575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615b01833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690612102908690869061565b565b90815260200160405180910390205491505092915050565b61212684848484612157565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b61214e6134f8565b61120b81613543565b5f8061216161286a565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561219a5761219a614d8a565b60038111156121ab576121ab614d8a565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61222182611ea9565b905060028351600381111561223857612238614d8a565b14612259578251604051633b0d540d60e21b81526108bc9190600401615548565b60208301516001600160a01b031633146122f5575f8281526006850160205260409020546001600160a01b0316331461229257336117c6565b5f82815260068501602052604090205460a08201516122c191600160b01b90046001600160401b0316906152fd565b6001600160401b03164210156122f55760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561230a5761230a614d8a565b0361242c576002840154608084015161232c916001600160401b0316906152fd565b6001600160401b03164210156123605760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123725761237082886125cb565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123ab9184916123a6919061566a565b6135bd565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556123ee84888c613794565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124849350505050565b60048151600581111561244157612441614d8a565b036124685761245183878b613794565b5061245b89612f36565b6001945050505050612484565b805160405163170cc93360e21b81526108bc9190600401614f1c565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156124f0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612517919081019061568a565b915091508061253957604051636b2f19e960e01b815260040160405180910390fd5b81511561255f578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b03161561259b576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f806125ac61286a565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612616573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261263d919081019061568a565b915091508061265f57604051636b2f19e960e01b815260040160405180910390fd5b5f61266861286a565b6005810154845191925014612696578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b0316156126d2576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b03161561270e576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161274b9190615056565b6040805180830381865af4158015612765573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612789919061571a565b915091508188146127b05760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612841575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261285f565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061289861286a565b90505f6128a487613979565b90506128af876125a2565b6128be57600192505050612484565b5f8781526006830160205260409020546001600160a01b031633146128e357336117c6565b5f87815260068301602052604090205460a082015161291291600160b01b90046001600160401b0316906152fd565b6001600160401b03168160c001516001600160401b031610156129595760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129715761296a88876125cb565b905061298f565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906129b4906114e2565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612a1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a419190615068565b90506001600160a01b038616612a6d575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a8c90849061573d565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615b41833981519152805460011901612afc57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612b0b614af3565b5f80516020615b018339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b3e8861248c565b604001516040518263ffffffff1660e01b8152600401612b5e9190615056565b6040805180830381865af4158015612b78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b9c91906155ae565b915091508015612bc357604051632d07135360e01b815281151560048201526024016108bc565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612bfa57612bfa614d8a565b6005811115612c0b57612c0b614d8a565b8152602001600182018054612c1f90614eea565b80601f0160208091040260200160405190810160405280929190818152602001828054612c4b90614eea565b8015612c965780601f10612c6d57610100808354040283529160200191612c96565b820191905f5260205f20905b815481529060010190602001808311612c7957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d0157612d01614d8a565b14158015612d225750600181516005811115612d1f57612d1f614d8a565b14155b15612d4357805160405163170cc93360e21b81526108bc9190600401614f1c565b600381516005811115612d5857612d58614d8a565b03612d665760048152612d6b565b600581525b836006018160200151604051612d8191906151d9565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612dc457612dc4614d8a565b021790555060208201516001820190612ddd908261522e565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e8357612e83614d8a565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612ec361286a565b5f838152600a82016020526040812080549190559091506109bf8482613c5e565b6117646001600160a01b03831682613cbc565b60015f80516020615b4183398151915255565b612f168484848461288e565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f3f61286a565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f7857612f78614d8a565b6003811115612f8957612f89614d8a565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130267fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161303591906152fd565b6001600160401b03164210156130695760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130b9575060208201516130d7565b5f858152600985016020526040902080546001600160a01b03191690555b5f806130e4838886613d4f565b915091506130fd85602001516111ea87606001516114e2565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f8061314d61286a565b600281015490915061ffff600160401b90910481169086161080613176575061271061ffff8616115b1561319a57604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b0390811690851610156131d6576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b80548310806131e85750806001015483115b156132095760405163222d164360e21b8152600481018490526024016108bc565b825f613214826110d8565b90505f6132218983613dfc565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f806132c261286a565b90505f6132ce846110d8565b90505f6132da87611ea9565b90506132e5876125a2565b613305576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561331a5761331a614d8a565b1461333b57805160405163170cc93360e21b81526108bc9190600401614f1c565b5f82826080015161334c91906152fd565b905083600201600a9054906101000a90046001600160401b03168260400151613375919061533f565b6001600160401b0316816001600160401b031611156133b257604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806133be8a846135bd565b915091505f8a836040516020016133ec92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661354157604051631afcd79f60e31b815260040160405180910390fd5b565b61354b6134f8565b6135548161436e565b61355c614387565b61120b6060820135608083013561357960c0850160a08601614ccf565b61358960e0860160c08701615750565b61359a610100870160e08801615769565b6101008701356135b261014089016101208a0161507f565b886101400135614397565b5f8281525f80516020615b21833981519152602052604081206002015481905f80516020615b0183398151915290600160801b90046001600160401b0316613605858261457c565b5f61360f876147e6565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156136b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136df9190810190615025565b6040518263ffffffff1660e01b81526004016136fb9190615056565b6020604051808303815f875af1158015613717573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061373b9190615068565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061379e61286a565b90505f6137ae8660400151611ea9565b90505f6003825160058111156137c6576137c6614d8a565b14806137e457506004825160058111156137e2576137e2614d8a565b145b156137f4575060c0810151613831565b60028251600581111561380957613809614d8a565b03613815575042613831565b815160405163170cc93360e21b81526108bc9190600401614f1c565b86608001516001600160401b0316816001600160401b031611613859575f9350505050611adc565b600483015460608801515f916001600160a01b031690634f22429f9061387e906114e2565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156138ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139239190615068565b5f878152600886016020526040902081905590506001600160a01b0387161561285f575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b613981614af3565b5f8281525f80516020615b218339815191526020526040808220815160e0810190925280545f80516020615b0183398151915293929190829060ff1660058111156139ce576139ce614d8a565b60058111156139df576139df614d8a565b81526020016001820180546139f390614eea565b80601f0160208091040260200160405190810160405280929190818152602001828054613a1f90614eea565b8015613a6a5780601f10613a4157610100808354040283529160200191613a6a565b820191905f5260205f20905b815481529060010190602001808311613a4d57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613ad857613ad8614d8a565b14613b0b575f8481526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614f1c565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff1916906001908490811115613b5057613b50614d8a565b021790555060208201516001820190613b69908261522e565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613c0785826135bd565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613caa575f80fd5b505af115801561133e573d5f803e3d5ffd5b80471015613cdf5760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d28576040519150601f19603f3d011682016040523d82523d5f602084013e613d2d565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d5a61286a565b5f86815260088201602052604081208054908290559192509081908015613dee575f87815260068501602052604090205461271090613da490600160a01b900461ffff1683615597565b613dae9190615529565b91508184600a015f8981526020019081526020015f205f828254613dd2919061573d565b90915550613de290508282615789565b9250613dee8984613c5e565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613e4057604051637fab81e560e01b815260040160405180910390fd5b5f80516020615b0183398151915242613e5f6060860160408701614ccf565b6001600160401b0316111580613e995750613e7d6202a3004261573d565b613e8d6060860160408701614ccf565b6001600160401b031610155b15613ed357613eae6060850160408601614ccf565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b60038101546001600160401b0390613ef690600160401b9004821685831661573d565b1115613f2057604051633e1a785160e01b81526001600160401b03841660048201526024016108bc565b613f35613f30606086018661579c565b61485b565b613f45613f30608086018661579c565b6030613f5460208601866157b0565b905014613f8657613f6860208501856157b0565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f9084806157b0565b90505f03613fbd57613fa284806157b0565b604051633e08a12560e11b81526004016108bc9291906157f2565b5f60068201613fcc86806157b0565b604051613fda92919061565b565b9081526020016040518091039020541461401357613ff884806157b0565b60405163a41f772f60e01b81526004016108bc9291906157f2565b61401d835f61457c565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce51906020810161405a8a806157b0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020908101906140a2908b018b6157b0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140eb60608b0160408c01614ccf565b6001600160401b0316815260200161410660608b018b61579c565b61410f90615805565b815260200161412160808b018b61579c565b61412a90615805565b8152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016141589190615932565b5f60405180830381865af4158015614172573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261419991908101906159e9565b5f828152600486016020526040902091935091506141b7828261522e565b5081600684016141c788806157b0565b6040516141d592919061565b565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614211908590600401615056565b6020604051808303815f875af115801561422d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142519190615068565b5f8481526005860160205260409020805460ff19166001179055905061427787806157b0565b5f858152600587016020526040902060010191614295919083615a2c565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142f488806157b0565b60405161430292919061565b565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906143409190614ccf565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b6143766134f8565b61437e6149c4565b61120b816149cc565b61438f6134f8565b613541614ab4565b61439f6134f8565b5f6143a861286a565b905061ffff861615806143c0575061271061ffff8716115b156143e457604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156144085760405163222d164360e21b8152600481018a90526024016108bc565b60ff8516158061441b5750600a60ff8616115b1561443e5760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156144a5576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144c55760405163a733007160e01b815260040160405180910390fd5b816144e657604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615b018339815191525f6001600160401b0380841690851611156145b0576145a9838561566a565b90506145bd565b6145ba848461566a565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061462a575060018401548151614626916001600160401b03169061573d565b8210155b15614652576001600160401b0380841660608301528282526040820151166020820152614671565b828160600181815161466491906152fd565b6001600160401b03169052505b606081015161468190606461533f565b602082015160018601546001600160401b0392909216916146ac9190600160401b900460ff1661533f565b6001600160401b031610156146e557606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b85816040018181516146f791906152fd565b6001600160401b031690525060408101805186919061471790839061566a565b6001600160401b03169052506001840154604082015160649161474591600160401b90910460ff169061533f565b6001600160401b0316101561477e576040808201519051633e1a785160e01b81526001600160401b0390911660048201526024016108bc565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615b218339815191526020526040812060020180545f80516020615b01833981519152919060089061483090600160401b90046001600160401b0316615ae5565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6148686020820182614ca2565b63ffffffff161580156148885750614883602082018261509a565b151590505b156148cf5761489a6020820182614ca2565b6148a7602083018361509a565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148dc602082018261509a565b90506148eb6020830183614ca2565b63ffffffff1611156149045761489a6020820182614ca2565b60015b614914602083018361509a565b90508110156117645761492a602083018361509a565b614935600184615789565b818110614944576149446150df565b9050602002016020810190614959919061507f565b6001600160a01b031661496f602084018461509a565b8381811061497f5761497f6150df565b9050602002016020810190614994919061507f565b6001600160a01b031610156149bc57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614907565b6135416134f8565b6149d46134f8565b80355f80516020615b0183398151915290815560146149f96060840160408501615769565b60ff161180614a185750614a136060830160408401615769565b60ff16155b15614a4c57614a2d6060830160408401615769565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b614a5c6060830160408401615769565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a8d6040830160208401614ccf565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612ef76134f8565b508054614ac890614eea565b5f825580601f10614ad7575050565b601f0160209004905f5260205f209081019061120b9190614b30565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614b44575f8155600101614b31565b5090565b801515811461120b575f80fd5b803563ffffffff81168114611ea4575f80fd5b5f805f60608486031215614b7a575f80fd5b833592506020840135614b8c81614b48565b9150614b9a60408501614b55565b90509250925092565b5f60208284031215614bb3575f80fd5b5035919050565b5f6101608284031215614bcb575f80fd5b50919050565b5f8060408385031215614be2575f80fd5b82356001600160401b03811115614bf7575f80fd5b830160808186031215614c08575f80fd5b9150614c1660208401614b55565b90509250929050565b5f8060408385031215614c30575f80fd5b82359150614c1660208401614b55565b6001600160a01b038116811461120b575f80fd5b5f805f8060808587031215614c67575f80fd5b843593506020850135614c7981614b48565b9250614c8760408601614b55565b91506060850135614c9781614c40565b939692955090935050565b5f60208284031215614cb2575f80fd5b611adc82614b55565b6001600160401b038116811461120b575f80fd5b5f60208284031215614cdf575f80fd5b8135611adc81614cbb565b5f8060408385031215614cfb575f80fd5b823591506020830135614d0d81614c40565b809150509250929050565b803561ffff81168114611ea4575f80fd5b5f805f60608486031215614d3b575f80fd5b83356001600160401b03811115614d50575f80fd5b840160a08187031215614d61575f80fd5b9250614d6f60208501614d18565b91506040840135614d7f81614cbb565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614dae57614dae614d8a565b9052565b5f5b83811015614dcc578181015183820152602001614db4565b50505f910152565b5f8151808452614deb816020860160208601614db2565b601f01601f19169290920160200192915050565b60208152614e11602082018351614d9e565b5f602083015160e06040840152614e2c610100840182614dd4565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e90575f80fd5b82356001600160401b0380821115614ea6575f80fd5b818501915085601f830112614eb9575f80fd5b813581811115614ec7575f80fd5b866020828501011115614ed8575f80fd5b60209290920196919550909350505050565b600181811c90821680614efe57607f821691505b602082108103614bcb57634e487b7160e01b5f52602260045260245ffd5b602081016111268284614d9e565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f6057614f60614f2a565b60405290565b604080519081016001600160401b0381118282101715614f6057614f60614f2a565b604051601f8201601f191681016001600160401b0381118282101715614fb057614fb0614f2a565b604052919050565b5f6001600160401b03821115614fd057614fd0614f2a565b50601f01601f191660200190565b5f82601f830112614fed575f80fd5b8151615000614ffb82614fb8565b614f88565b818152846020838601011115615014575f80fd5b612484826020830160208701614db2565b5f60208284031215615035575f80fd5b81516001600160401b0381111561504a575f80fd5b61248484828501614fde565b602081525f611adc6020830184614dd4565b5f60208284031215615078575f80fd5b5051919050565b5f6020828403121561508f575f80fd5b8135611adc81614c40565b5f808335601e198436030181126150af575f80fd5b8301803591506001600160401b038211156150c8575f80fd5b6020019150600581901b360382131561378d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615107575f80fd5b9190910192915050565b5f82601f830112615120575f80fd5b813561512e614ffb82614fb8565b818152846020838601011115615142575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561516e575f80fd5b615176614f3e565b82356001600160401b038082111561518c575f80fd5b61519836838701615111565b835260208501359150808211156151ad575f80fd5b506151ba36828601615111565b60208301525060408301356151ce81614cbb565b604082015292915050565b5f8251615107818460208701614db2565b601f82111561073057805f5260205f20601f840160051c8101602085101561520f5750805b601f840160051c820191505b81811015611138575f815560010161521b565b81516001600160401b0381111561524757615247614f2a565b61525b816152558454614eea565b846151ea565b602080601f83116001811461528e575f84156152775750858301515b5f19600386901b1c1916600185901b17855561133e565b5f85815260208120601f198616915b828110156152bc5788860151825594840194600190910190840161529d565b50858210156152d957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561259b5761259b6152e9565b5f63ffffffff808316818103615335576153356152e9565b6001019392505050565b6001600160401b03818116838216028082169190828114615362576153626152e9565b505092915050565b5f808335601e1984360301811261537f575f80fd5b83016020810192503590506001600160401b0381111561539d575f80fd5b80360382131561378d575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561548857848303601f19018952813536889003605e1901811261540f575f80fd5b8701606061541d828061536a565b82875261542d83880182846153ab565b9250505061543d8683018361536a565b8683038888015261544f8382846153ab565b92505050604080830135925061546483614cbb565b6001600160401b0392909216949091019390935297830197908301906001016153ea565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356154b981614c40565b6001600160a01b031660608381019190915283013536849003601e190181126154e0575f80fd5b83016020810190356001600160401b038111156154fb575f80fd5b8060051b360382131561550c575f80fd5b60808085015261552060a0850182846153d3565b95945050505050565b5f8261554357634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061555c5761555c614d8a565b91905290565b5f805f60608486031215615574575f80fd5b83519250602084015161558681614cbb565b6040850151909250614d7f81614cbb565b8082028115828204841417611126576111266152e9565b5f80604083850312156155bf575f80fd5b825191506020830151614d0d81614b48565b5f60208083525f84546155e381614eea565b806020870152604060018084165f811461560457600181146156205761564d565b60ff19851660408a0152604084151560051b8a0101955061564d565b895f5260205f205f5b858110156156445781548b8201860152908301908801615629565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561259b5761259b6152e9565b5f806040838503121561569b575f80fd5b82516001600160401b03808211156156b1575f80fd5b90840190606082870312156156c4575f80fd5b6156cc614f3e565b8251815260208301516156de81614c40565b60208201526040830151828111156156f4575f80fd5b61570088828601614fde565b6040830152508094505050506020830151614d0d81614b48565b5f806040838503121561572b575f80fd5b825191506020830151614d0d81614cbb565b80820180821115611126576111266152e9565b5f60208284031215615760575f80fd5b611adc82614d18565b5f60208284031215615779575f80fd5b813560ff81168114611adc575f80fd5b81810381811115611126576111266152e9565b5f8235603e19833603018112615107575f80fd5b5f808335601e198436030181126157c5575f80fd5b8301803591506001600160401b038211156157de575f80fd5b60200191503681900382131561378d575f80fd5b602081525f6124846020830184866153ab565b5f60408236031215615815575f80fd5b61581d614f66565b61582683614b55565b81526020808401356001600160401b0380821115615842575f80fd5b9085019036601f830112615854575f80fd5b81358181111561586657615866614f2a565b8060051b9150615877848301614f88565b8181529183018401918481019036841115615890575f80fd5b938501935b838510156158ba57843592506158aa83614c40565b8282529385019390850190615895565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156159275784516001600160a01b031682529383019360019290920191908301906158fe565b509695505050505050565b60208152815160208201525f602083015160e06040840152615958610100840182614dd4565b90506040840151601f19808584030160608601526159768383614dd4565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159a683836158cc565b925060a08601519150808584030160c0860152506159c482826158cc565b91505060c08401516159e160e08501826001600160401b03169052565b509392505050565b5f80604083850312156159fa575f80fd5b8251915060208301516001600160401b03811115615a16575f80fd5b615a2285828601614fde565b9150509250929050565b6001600160401b03831115615a4357615a43614f2a565b615a5783615a518354614eea565b836151ea565b5f601f841160018114615a88575f8515615a715750838201355b5f19600387901b1c1916600186901b178355611138565b5f83815260208120601f198716915b82811015615ab75786850135825560209485019460019092019101615a97565b5086821015615ad3575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b03808316818103615335576153356152e956fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122064d721e2a02cc61b5cda006e711accc7155320316b599241332bf2a48244210e64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615c9a380380615c9a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b4d8061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614b1f565b610724565b005b348015610263575f80fd5b50610256610272366004614b5a565b610735565b348015610282575f80fd5b50610256610291366004614b71565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614b1f565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614b88565b610aae565b34801561030a575f80fd5b50610256610319366004614bd6565b611064565b348015610329575f80fd5b5061033d610338366004614b5a565b6110d8565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614c0b565b61112c565b3480156103d9575f80fd5b506102566103e8366004614b1f565b61113f565b3480156103f8575f80fd5b50610256610407366004614c59565b61114b565b348015610417575f80fd5b50610256610426366004614c0b565b61120e565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614bd6565b61121a565b34801561047e575f80fd5b5061049261048d366004614c86565b6114e2565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614b5a565b611502565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614b1f565b611516565b3480156104fc575f80fd5b5061025661050b366004614c0b565b611522565b34801561051b575f80fd5b5061025661052a366004614bd6565b61152e565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614ca1565b611768565b34801561056d575f80fd5b5061025661057c366004614b5a565b611819565b34801561058c575f80fd5b5061025661059b366004614c0b565b6118ad565b3480156105ab575f80fd5b506102566105ba366004614c59565b6118b9565b6104926105cd366004614ce0565b611aaf565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614b5a565b611ae3565b348015610649575f80fd5b506104925f80516020615ab883398151915281565b348015610669575f80fd5b50610256610678366004614b5a565b611d3c565b61049261068b366004614b5a565b611e78565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614b5a565b611ea9565b6040516102b89190614db6565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614ca1565b611ff8565b348015610710575f80fd5b5061049261071f366004614e36565b61208f565b6107308383835f6120ea565b505050565b5f8181525f80516020615ad88339815191526020526040808220815160e0810190925280545f80516020615ab883398151915293929190829060ff16600581111561078257610782614d41565b600581111561079357610793614d41565b81526020016001820180546107a790614ea1565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614ea1565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614d41565b146108c5575f8381526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ed3565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614fdc565b6040518263ffffffff1660e01b815260040161097f919061500d565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf919061501f565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a5683612116565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f612127565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615ab88339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b67919061501f565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601615036565b6001600160a01b031614610be457610bbf6060840160408501615036565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf26060850185615051565b905090505f805b828163ffffffff161015610e5a575f610c156060880188615051565b8363ffffffff16818110610c2b57610c2b615096565b9050602002810190610c3d91906150aa565b610c4690615115565b80516040519192505f916006880191610c5e91615190565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc919060040161500d565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd791615190565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d15919061501f565b90508086600601835f0151604051610d2d9190615190565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610d6d90826151e5565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610ded90856152b4565b8251604051919550610dfe91615190565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610e53906152d4565b9050610bf9565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610e9d910460ff16836152f6565b6001600160401b03161015610ed057604051633e1a785160e01b81526001600160401b03821660048201526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ef48761245c565b604001516040518263ffffffff1660e01b8152600401610f14919061500d565b602060405180830381865af4158015610f2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f53919061501f565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f8d919061544c565b5f60405180830381865af4158015610fa7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fce9190810190614fdc565b90505f600282604051610fe19190615190565b602060405180830381855afa158015610ffc573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061101f919061501f565b905082811461104b5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506007909201805460ff1916600117905550505050565b61106d82612572565b61108d576040516330efa98b60e01b8152600481018390526024016108bc565b5f61109783611ea9565b51905060028160058111156110ae576110ae614d41565b146110ce578060405163170cc93360e21b81526004016108bc9190614ed3565b6109bf838361259b565b5f806110e261283a565b600301546110f090846154e0565b905080158061110557506001600160401b0381115b156111265760405163222d164360e21b8152600481018490526024016108bc565b92915050565b61113884848484612127565b5050505050565b6109bf8383835f61285e565b611153612a9b565b5f61115c61283a565b90505f8061116984612ad2565b9150915061117682612572565b611182575050506111f5565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111b55750805b6004835160058111156111ca576111ca614d41565b036111d9576111d98185612e8a565b6111ef826111ea85604001516114e2565b612eb4565b50505050505b61120b60015f80516020615af883398151915255565b50565b6109bf84848484612eda565b5f61122361283a565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561125c5761125c614d41565b600381111561126d5761126d614d41565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112e382611ea9565b90506001835160038111156112fa576112fa614d41565b1461131b578251604051633b0d540d60e21b81526108bc91906004016154ff565b60048151600581111561133057611330614d41565b036113465761133e86612f06565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61136b8961245c565b604001516040518263ffffffff1660e01b815260040161138b919061500d565b606060405180830381865af41580156113a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ca9190615519565b50915091508184146113f757846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114305750806001600160401b03168560a001516001600160401b0316115b1561145957604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114eb61283a565b60030154611126906001600160401b03841661554e565b5f61150c82611ea9565b6080015192915050565b6107308383835f612eda565b6111388484848461285e565b611536612a9b565b5f61153f61283a565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561157857611578614d41565b600381111561158957611589614d41565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561160257611602614d41565b14611623578051604051633b0d540d60e21b81526108bc91906004016154ff565b60046116328260400151611ea9565b51600581111561164457611644614d41565b14611743575f6116538461245c565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b8152600401611692919061500d565b606060405180830381865af41580156116ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d19190615519565b5091509150818460400151146116fd5760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173f57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174c84612f06565b505061176460015f80516020615af883398151915255565b5050565b5f61177161283a565b90506001600160a01b0382166117a55760405163caa903f960e01b81526001600160a01b03831660048201526024016108bc565b5f8381526006820160205260409020546001600160a01b031633146117eb57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f61182261283a565b90505f61182e83611ea9565b519050600481600581111561184557611845614d41565b14611865578060405163170cc93360e21b81526004016108bc9190614ed3565b5f8381526006830160205260409020546001600160a01b0316331461188a57336117c6565b5f838152600683016020526040902054610730906001600160a01b031684612e8a565b6109bf848484846120ea565b5f80516020615ab88339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118ec8661245c565b604001516040518263ffffffff1660e01b815260040161190c919061500d565b6040805180830381865af4158015611926573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061194a9190615565565b915091508061197057604051632d07135360e01b815281151560048201526024016108bc565b5f8281526004840160205260409020805461198a90614ea1565b90505f036119ae5760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580860160205260409091205460ff16908111156119d5576119d5614d41565b14611a08575f8281526005840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ed3565b5f8281526004840160205260408120611a2091614a73565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f611ab8612a9b565b611ac4848484346130f1565b9050611adc60015f80516020615af883398151915255565b9392505050565b5f611aec61283a565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b2557611b25614d41565b6003811115611b3657611b36614d41565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611baf57611baf614d41565b14158015611bd05750600381516003811115611bcd57611bcd614d41565b14155b15611bf1578051604051633b0d540d60e21b81526108bc91906004016154ff565b5f611bff8260400151611ea9565b905080606001516001600160401b03165f03611c31576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611c9f93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cb9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ce09190810190614fdc565b6040518263ffffffff1660e01b8152600401611cfc919061500d565b6020604051808303815f875af1158015611d18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611138919061501f565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615ab88339815191529190611d8390614ea1565b90505f03611da75760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580840160205260409091205460ff1690811115611dce57611dce614d41565b14611e01575f8281526005820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ed3565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e389201615588565b6020604051808303815f875af1158015611e54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610730919061501f565b5f611e81612a9b565b611e8c823334613266565b9050611ea460015f80516020615af883398151915255565b919050565b611eb1614aaa565b5f8281525f80516020615ad8833981519152602052604090819020815160e0810190925280545f80516020615ab8833981519152929190829060ff166005811115611efe57611efe614d41565b6005811115611f0f57611f0f614d41565b8152602001600182018054611f2390614ea1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4f90614ea1565b8015611f9a5780601f10611f7157610100808354040283529160200191611f9a565b820191905f5260205f20905b815481529060010190602001808311611f7d57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b03811661202a5760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61203361283a565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461206157336117c6565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615ab8833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906120d29086908690615612565b90815260200160405180910390205491505092915050565b6120f684848484612127565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b61211e6134a6565b61120b816134f1565b5f8061213161283a565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561216a5761216a614d41565b600381111561217b5761217b614d41565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6121f182611ea9565b905060028351600381111561220857612208614d41565b14612229578251604051633b0d540d60e21b81526108bc91906004016154ff565b60208301516001600160a01b031633146122c5575f8281526006850160205260409020546001600160a01b0316331461226257336117c6565b5f82815260068501602052604090205460a082015161229191600160b01b90046001600160401b0316906152b4565b6001600160401b03164210156122c55760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b6002815160058111156122da576122da614d41565b036123fc57600284015460808401516122fc916001600160401b0316906152b4565b6001600160401b03164210156123305760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b871561234257612340828861259b565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161237b9184916123769190615621565b61356b565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556123be84888c613742565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124549350505050565b60048151600581111561241157612411614d41565b036124385761242183878b613742565b5061242b89612f06565b6001945050505050612454565b805160405163170cc93360e21b81526108bc9190600401614ed3565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156124c0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124e79190810190615641565b915091508061250957604051636b2f19e960e01b815260040160405180910390fd5b81511561252f578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b03161561256b576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f8061257c61283a565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156125e6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261260d9190810190615641565b915091508061262f57604051636b2f19e960e01b815260040160405180910390fd5b5f61263861283a565b6005810154845191925014612666578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b0316156126a2576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b0316156126de576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161271b919061500d565b6040805180830381865af4158015612735573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061275991906156d1565b915091508188146127805760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612811575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261282f565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061286861283a565b90505f61287487613930565b905061287f87612572565b61288e57600192505050612454565b5f8781526006830160205260409020546001600160a01b031633146128b357336117c6565b5f87815260068301602052604090205460a08201516128e291600160b01b90046001600160401b0316906152b4565b6001600160401b03168160c001516001600160401b031610156129295760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129415761293a888761259b565b905061295f565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612984906114e2565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156129ed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a11919061501f565b90506001600160a01b038616612a3d575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a5c9084906156f4565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615af8833981519152805460011901612acc57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612adb614aaa565b5f80516020615ab88339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b0e8861245c565b604001516040518263ffffffff1660e01b8152600401612b2e919061500d565b6040805180830381865af4158015612b48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b6c9190615565565b915091508015612b9357604051632d07135360e01b815281151560048201526024016108bc565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612bca57612bca614d41565b6005811115612bdb57612bdb614d41565b8152602001600182018054612bef90614ea1565b80601f0160208091040260200160405190810160405280929190818152602001828054612c1b90614ea1565b8015612c665780601f10612c3d57610100808354040283529160200191612c66565b820191905f5260205f20905b815481529060010190602001808311612c4957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612cd157612cd1614d41565b14158015612cf25750600181516005811115612cef57612cef614d41565b14155b15612d1357805160405163170cc93360e21b81526108bc9190600401614ed3565b600381516005811115612d2857612d28614d41565b03612d365760048152612d3b565b600581525b836006018160200151604051612d519190615190565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612d9457612d94614d41565b021790555060208201516001820190612dad90826151e5565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e5357612e53614d41565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612e9361283a565b5f838152600a82016020526040812080549190559091506109bf8482613c15565b6117646001600160a01b03831682613c73565b60015f80516020615af883398151915255565b612ee68484848461285e565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f0f61283a565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f4857612f48614d41565b6003811115612f5957612f59614d41565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612ff67fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161300591906152b4565b6001600160401b03164210156130395760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b031680613085575060208201515b5f80613092838886613d06565b915091506130ab85602001516111ea87606001516114e2565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806130fb61283a565b600281015490915061ffff600160401b90910481169086161080613124575061271061ffff8616115b1561314857604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b039081169085161015613184576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b80548310806131965750806001015483115b156131b75760405163222d164360e21b8152600481018490526024016108bc565b825f6131c2826110d8565b90505f6131cf8983613db3565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061327061283a565b90505f61327c846110d8565b90505f61328887611ea9565b905061329387612572565b6132b3576040516330efa98b60e01b8152600481018890526024016108bc565b6002815160058111156132c8576132c8614d41565b146132e957805160405163170cc93360e21b81526108bc9190600401614ed3565b5f8282608001516132fa91906152b4565b905083600201600a9054906101000a90046001600160401b0316826040015161332391906152f6565b6001600160401b0316816001600160401b0316111561336057604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f8061336c8a8461356b565b915091505f8a8360405160200161339a92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166134ef57604051631afcd79f60e31b815260040160405180910390fd5b565b6134f96134a6565b61350281614325565b61350a61433e565b61120b6060820135608083013561352760c0850160a08601614c86565b61353760e0860160c08701615707565b613548610100870160e08801615720565b61010087013561356061014089016101208a01615036565b88610140013561434e565b5f8281525f80516020615ad8833981519152602052604081206002015481905f80516020615ab883398151915290600160801b90046001600160401b03166135b38582614533565b5f6135bd8761479d565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613666573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261368d9190810190614fdc565b6040518263ffffffff1660e01b81526004016136a9919061500d565b6020604051808303815f875af11580156136c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136e9919061501f565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061374c61283a565b90505f61375c8660400151611ea9565b90505f60038251600581111561377457613774614d41565b1480613792575060048251600581111561379057613790614d41565b145b156137a2575060c08101516137df565b6002825160058111156137b7576137b7614d41565b036137c35750426137df565b815160405163170cc93360e21b81526108bc9190600401614ed3565b86608001516001600160401b0316816001600160401b031611613807575f9350505050611adc565b600483015460608801515f916001600160a01b031690634f22429f9061382c906114e2565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156138ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138d1919061501f565b90506001600160a01b0387166138e957876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b613938614aaa565b5f8281525f80516020615ad88339815191526020526040808220815160e0810190925280545f80516020615ab883398151915293929190829060ff16600581111561398557613985614d41565b600581111561399657613996614d41565b81526020016001820180546139aa90614ea1565b80601f01602080910402602001604051908101604052809291908181526020018280546139d690614ea1565b8015613a215780601f106139f857610100808354040283529160200191613a21565b820191905f5260205f20905b815481529060010190602001808311613a0457829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613a8f57613a8f614d41565b14613ac2575f8481526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ed3565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff1916906001908490811115613b0757613b07614d41565b021790555060208201516001820190613b2090826151e5565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613bbe858261356b565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c61575f80fd5b505af115801561133e573d5f803e3d5ffd5b80471015613c965760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613cdf576040519150601f19603f3d011682016040523d82523d5f602084013e613ce4565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d1161283a565b5f86815260088201602052604081208054908290559192509081908015613da5575f87815260068501602052604090205461271090613d5b90600160a01b900461ffff168361554e565b613d6591906154e0565b91508184600a015f8981526020019081526020015f205f828254613d8991906156f4565b90915550613d9990508282615740565b9250613da58984613c15565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613df757604051637fab81e560e01b815260040160405180910390fd5b5f80516020615ab883398151915242613e166060860160408701614c86565b6001600160401b0316111580613e505750613e346202a300426156f4565b613e446060860160408701614c86565b6001600160401b031610155b15613e8a57613e656060850160408601614c86565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b60038101546001600160401b0390613ead90600160401b900482168583166156f4565b1115613ed757604051633e1a785160e01b81526001600160401b03841660048201526024016108bc565b613eec613ee76060860186615753565b614812565b613efc613ee76080860186615753565b6030613f0b6020860186615767565b905014613f3d57613f1f6020850185615767565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f478480615767565b90505f03613f7457613f598480615767565b604051633e08a12560e11b81526004016108bc9291906157a9565b5f60068201613f838680615767565b604051613f91929190615612565b90815260200160405180910390205414613fca57613faf8480615767565b60405163a41f772f60e01b81526004016108bc9291906157a9565b613fd4835f614533565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016140118a80615767565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614059908b018b615767565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140a260608b0160408c01614c86565b6001600160401b031681526020016140bd60608b018b615753565b6140c6906157bc565b81526020016140d860808b018b615753565b6140e1906157bc565b8152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161410f91906158e9565b5f60405180830381865af4158015614129573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261415091908101906159a0565b5f8281526004860160205260409020919350915061416e82826151e5565b50816006840161417e8880615767565b60405161418c929190615612565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141c890859060040161500d565b6020604051808303815f875af11580156141e4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614208919061501f565b5f8481526005860160205260409020805460ff19166001179055905061422e8780615767565b5f85815260058701602052604090206001019161424c9190836159e3565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142ab8880615767565b6040516142b9929190615612565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906142f79190614c86565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61432d6134a6565b61433561497b565b61120b81614983565b6143466134a6565b6134ef614a6b565b6143566134a6565b5f61435f61283a565b905061ffff86161580614377575061271061ffff8716115b1561439b57604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143bf5760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143d25750600a60ff8616115b156143f55760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b0316101561445c576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f0361447c5760405163a733007160e01b815260040160405180910390fd5b8161449d57604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615ab88339815191525f6001600160401b038084169085161115614567576145608385615621565b9050614574565b6145718484615621565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145e15750600184015481516145dd916001600160401b0316906156f4565b8210155b15614609576001600160401b0380841660608301528282526040820151166020820152614628565b828160600181815161461b91906152b4565b6001600160401b03169052505b60608101516146389060646152f6565b602082015160018601546001600160401b0392909216916146639190600160401b900460ff166152f6565b6001600160401b0316101561469c57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b85816040018181516146ae91906152b4565b6001600160401b03169052506040810180518691906146ce908390615621565b6001600160401b0316905250600184015460408201516064916146fc91600160401b90910460ff16906152f6565b6001600160401b03161015614735576040808201519051633e1a785160e01b81526001600160401b0390911660048201526024016108bc565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615ad88339815191526020526040812060020180545f80516020615ab883398151915291906008906147e790600160401b90046001600160401b0316615a9c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61481f6020820182614c59565b63ffffffff1615801561483f575061483a6020820182615051565b151590505b15614886576148516020820182614c59565b61485e6020830183615051565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148936020820182615051565b90506148a26020830183614c59565b63ffffffff1611156148bb576148516020820182614c59565b60015b6148cb6020830183615051565b9050811015611764576148e16020830183615051565b6148ec600184615740565b8181106148fb576148fb615096565b90506020020160208101906149109190615036565b6001600160a01b03166149266020840184615051565b8381811061493657614936615096565b905060200201602081019061494b9190615036565b6001600160a01b0316101561497357604051630dbc8d5f60e31b815260040160405180910390fd5b6001016148be565b6134ef6134a6565b61498b6134a6565b80355f80516020615ab883398151915290815560146149b06060840160408501615720565b60ff1611806149cf57506149ca6060830160408401615720565b60ff16155b15614a03576149e46060830160408401615720565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b614a136060830160408401615720565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a446040830160208401614c86565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612ec76134a6565b508054614a7f90614ea1565b5f825580601f10614a8e575050565b601f0160209004905f5260205f209081019061120b9190614ae7565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614afb575f8155600101614ae8565b5090565b801515811461120b575f80fd5b803563ffffffff81168114611ea4575f80fd5b5f805f60608486031215614b31575f80fd5b833592506020840135614b4381614aff565b9150614b5160408501614b0c565b90509250925092565b5f60208284031215614b6a575f80fd5b5035919050565b5f6101608284031215614b82575f80fd5b50919050565b5f8060408385031215614b99575f80fd5b82356001600160401b03811115614bae575f80fd5b830160808186031215614bbf575f80fd5b9150614bcd60208401614b0c565b90509250929050565b5f8060408385031215614be7575f80fd5b82359150614bcd60208401614b0c565b6001600160a01b038116811461120b575f80fd5b5f805f8060808587031215614c1e575f80fd5b843593506020850135614c3081614aff565b9250614c3e60408601614b0c565b91506060850135614c4e81614bf7565b939692955090935050565b5f60208284031215614c69575f80fd5b611adc82614b0c565b6001600160401b038116811461120b575f80fd5b5f60208284031215614c96575f80fd5b8135611adc81614c72565b5f8060408385031215614cb2575f80fd5b823591506020830135614cc481614bf7565b809150509250929050565b803561ffff81168114611ea4575f80fd5b5f805f60608486031215614cf2575f80fd5b83356001600160401b03811115614d07575f80fd5b840160a08187031215614d18575f80fd5b9250614d2660208501614ccf565b91506040840135614d3681614c72565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d6557614d65614d41565b9052565b5f5b83811015614d83578181015183820152602001614d6b565b50505f910152565b5f8151808452614da2816020860160208601614d69565b601f01601f19169290920160200192915050565b60208152614dc8602082018351614d55565b5f602083015160e06040840152614de3610100840182614d8b565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e47575f80fd5b82356001600160401b0380821115614e5d575f80fd5b818501915085601f830112614e70575f80fd5b813581811115614e7e575f80fd5b866020828501011115614e8f575f80fd5b60209290920196919550909350505050565b600181811c90821680614eb557607f821691505b602082108103614b8257634e487b7160e01b5f52602260045260245ffd5b602081016111268284614d55565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f1757614f17614ee1565b60405290565b604080519081016001600160401b0381118282101715614f1757614f17614ee1565b604051601f8201601f191681016001600160401b0381118282101715614f6757614f67614ee1565b604052919050565b5f6001600160401b03821115614f8757614f87614ee1565b50601f01601f191660200190565b5f82601f830112614fa4575f80fd5b8151614fb7614fb282614f6f565b614f3f565b818152846020838601011115614fcb575f80fd5b612454826020830160208701614d69565b5f60208284031215614fec575f80fd5b81516001600160401b03811115615001575f80fd5b61245484828501614f95565b602081525f611adc6020830184614d8b565b5f6020828403121561502f575f80fd5b5051919050565b5f60208284031215615046575f80fd5b8135611adc81614bf7565b5f808335601e19843603018112615066575f80fd5b8301803591506001600160401b0382111561507f575f80fd5b6020019150600581901b360382131561373b575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126150be575f80fd5b9190910192915050565b5f82601f8301126150d7575f80fd5b81356150e5614fb282614f6f565b8181528460208386010111156150f9575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615125575f80fd5b61512d614ef5565b82356001600160401b0380821115615143575f80fd5b61514f368387016150c8565b83526020850135915080821115615164575f80fd5b50615171368286016150c8565b602083015250604083013561518581614c72565b604082015292915050565b5f82516150be818460208701614d69565b601f82111561073057805f5260205f20601f840160051c810160208510156151c65750805b601f840160051c820191505b81811015611138575f81556001016151d2565b81516001600160401b038111156151fe576151fe614ee1565b6152128161520c8454614ea1565b846151a1565b602080601f831160018114615245575f841561522e5750858301515b5f19600386901b1c1916600185901b17855561133e565b5f85815260208120601f198616915b8281101561527357888601518255948401946001909101908401615254565b508582101561529057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561256b5761256b6152a0565b5f63ffffffff8083168181036152ec576152ec6152a0565b6001019392505050565b6001600160401b03818116838216028082169190828114615319576153196152a0565b505092915050565b5f808335601e19843603018112615336575f80fd5b83016020810192503590506001600160401b03811115615354575f80fd5b80360382131561373b575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561543f57848303601f19018952813536889003605e190181126153c6575f80fd5b870160606153d48280615321565b8287526153e48388018284615362565b925050506153f486830183615321565b86830388880152615406838284615362565b92505050604080830135925061541b83614c72565b6001600160401b0392909216949091019390935297830197908301906001016153a1565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561547081614bf7565b6001600160a01b031660608381019190915283013536849003601e19018112615497575f80fd5b83016020810190356001600160401b038111156154b2575f80fd5b8060051b36038213156154c3575f80fd5b6080808501526154d760a08501828461538a565b95945050505050565b5f826154fa57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061551357615513614d41565b91905290565b5f805f6060848603121561552b575f80fd5b83519250602084015161553d81614c72565b6040850151909250614d3681614c72565b8082028115828204841417611126576111266152a0565b5f8060408385031215615576575f80fd5b825191506020830151614cc481614aff565b5f60208083525f845461559a81614ea1565b806020870152604060018084165f81146155bb57600181146155d757615604565b60ff19851660408a0152604084151560051b8a01019550615604565b895f5260205f205f5b858110156155fb5781548b82018601529083019088016155e0565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561256b5761256b6152a0565b5f8060408385031215615652575f80fd5b82516001600160401b0380821115615668575f80fd5b908401906060828703121561567b575f80fd5b615683614ef5565b82518152602083015161569581614bf7565b60208201526040830151828111156156ab575f80fd5b6156b788828601614f95565b6040830152508094505050506020830151614cc481614aff565b5f80604083850312156156e2575f80fd5b825191506020830151614cc481614c72565b80820180821115611126576111266152a0565b5f60208284031215615717575f80fd5b611adc82614ccf565b5f60208284031215615730575f80fd5b813560ff81168114611adc575f80fd5b81810381811115611126576111266152a0565b5f8235603e198336030181126150be575f80fd5b5f808335601e1984360301811261577c575f80fd5b8301803591506001600160401b03821115615795575f80fd5b60200191503681900382131561373b575f80fd5b602081525f612454602083018486615362565b5f604082360312156157cc575f80fd5b6157d4614f1d565b6157dd83614b0c565b81526020808401356001600160401b03808211156157f9575f80fd5b9085019036601f83011261580b575f80fd5b81358181111561581d5761581d614ee1565b8060051b915061582e848301614f3f565b8181529183018401918481019036841115615847575f80fd5b938501935b83851015615871578435925061586183614bf7565b828252938501939085019061584c565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158de5784516001600160a01b031682529383019360019290920191908301906158b5565b509695505050505050565b60208152815160208201525f602083015160e0604084015261590f610100840182614d8b565b90506040840151601f198085840301606086015261592d8383614d8b565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261595d8383615883565b925060a08601519150808584030160c08601525061597b8282615883565b91505060c084015161599860e08501826001600160401b03169052565b509392505050565b5f80604083850312156159b1575f80fd5b8251915060208301516001600160401b038111156159cd575f80fd5b6159d985828601614f95565b9150509250929050565b6001600160401b038311156159fa576159fa614ee1565b615a0e83615a088354614ea1565b836151a1565b5f601f841160018114615a3f575f8515615a285750838201355b5f19600387901b1c1916600186901b178355611138565b5f83815260208120601f198716915b82811015615a6e5786850135825560209485019460019092019101615a4e565b5086821015615a8a575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b038083168181036152ec576152ec6152a056fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220d605279d17601d99777f7cd029a535b6001ad94544630a2a82610eb594552d4a64736f6c63430008190033", } // NativeTokenStakingManagerABI 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 83baa97b0..40a2cb111 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -306,11 +306,7 @@ abstract contract PoSValidatorManager is revert UnauthorizedOwner(_msgSender()); } - if (rewardRecipient == _msgSender()) { - delete $._delegatorRewardRecipients[delegationID]; - } else { - $._delegatorRewardRecipients[delegationID] = rewardRecipient; - } + $._delegatorRewardRecipients[delegationID] = rewardRecipient; } /** @@ -799,12 +795,13 @@ abstract contract PoSValidatorManager is uptimeSeconds: $._posValidatorInfo[delegator.validationID].uptimeSeconds }); - $._redeemableDelegatorRewards[delegationID] = reward; - - if (rewardRecipient != address(0)) { - $._delegatorRewardRecipients[delegationID] = rewardRecipient; + if (rewardRecipient == address(0)) { + rewardRecipient = delegator.owner; } + $._redeemableDelegatorRewards[delegationID] = reward; + $._delegatorRewardRecipients[delegationID] = rewardRecipient; + return reward; } @@ -895,8 +892,6 @@ abstract contract PoSValidatorManager is if (rewardRecipient == address(0)) { rewardRecipient = delegator.owner; - } else { - delete $._delegatorRewardRecipients[delegationID]; } (uint256 delegationRewards, uint256 validatorFees) = diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index 9fef8e6cc..f4a87b72b 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -226,7 +226,7 @@ interface IPoSValidatorManager is IValidatorManager { /** * @notice See {IPoSValidatorManager-initializeEndDelegation} for details of the first three parameters - * @param recipientAddress The address to receive the rewards. + * @param recipientAddress The address to receive the rewards. If the 0-address is provided, the rewards will be sent to the delegator. */ function initializeEndDelegation( bytes32 delegationID,